@@ -60,6 +60,56 @@ function _create_new_optimizer(opt::MOI.AbstractOptimizer)
60
60
return opt_setup
61
61
end
62
62
63
+ """
64
+ _set_maxiters!(optimizer, maxiters)
65
+
66
+ Sets the maximum number of iterations for the optimizer using solver-specific parameter names.
67
+ Supports common MOI solvers including Ipopt, Gurobi, CPLEX, and SCIP.
68
+ """
69
+ function _set_maxiters! (optimizer, maxiters:: Number )
70
+ optimizer_name = string (typeof (optimizer))
71
+
72
+ # Try to set maxiters based on common solver patterns
73
+ try
74
+ if contains (optimizer_name, " Ipopt" )
75
+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" max_iter" ), Int (maxiters))
76
+ elseif contains (optimizer_name, " Gurobi" )
77
+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" IterationLimit" ), Int (maxiters))
78
+ elseif contains (optimizer_name, " CPLEX" ) || contains (optimizer_name, " Cplex" )
79
+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" CPX_PARAM_ITLIM" ), Int (maxiters))
80
+ elseif contains (optimizer_name, " SCIP" ) || contains (optimizer_name, " Scip" )
81
+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" limits/iterations" ), Int (maxiters))
82
+ elseif contains (optimizer_name, " Mosek" ) || contains (optimizer_name, " MOSEK" )
83
+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" MSK_IPAR_INTPNT_MAX_ITERATIONS" ), Int (maxiters))
84
+ elseif contains (optimizer_name, " OSQP" )
85
+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" max_iter" ), Int (maxiters))
86
+ elseif contains (optimizer_name, " ECOS" )
87
+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" maxit" ), Int (maxiters))
88
+ elseif contains (optimizer_name, " SCS" )
89
+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" max_iters" ), Int (maxiters))
90
+ elseif contains (optimizer_name, " COSMO" )
91
+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" max_iter" ), Int (maxiters))
92
+ else
93
+ # Generic fallback - try common parameter names
94
+ for param_name in [" max_iter" , " maxiter" , " IterationLimit" , " max_iterations" ]
95
+ try
96
+ MOI. set (optimizer, MOI. RawOptimizerAttribute (param_name), Int (maxiters))
97
+ return # Success, exit early
98
+ catch
99
+ continue # Try next parameter name
100
+ end
101
+ end
102
+ # If all attempts fail, show warning with guidance
103
+ @warn " common maxiters argument could not be mapped for $(typeof (optimizer)) . " *
104
+ " Set number of iterations via optimizer specific keyword arguments."
105
+ end
106
+ catch e
107
+ # Catch any errors during parameter setting and show informative warning
108
+ @warn " Failed to set maxiters parameter for $(typeof (optimizer)) : $(e) . " *
109
+ " Set number of iterations via optimizer specific keyword arguments."
110
+ end
111
+ end
112
+
63
113
function __map_optimizer_args (cache,
64
114
opt:: Union {MOI. AbstractOptimizer, MOI. OptimizerWithAttributes
65
115
};
@@ -82,7 +132,7 @@ function __map_optimizer_args(cache,
82
132
@warn " common abstol argument is currently not used by $(optimizer) . Set tolerances via optimizer specific keyword arguments."
83
133
end
84
134
if ! isnothing (maxiters)
85
- @warn " common maxiters argument is currently not used by $ (optimizer) . Set number of iterations via optimizer specific keyword arguments. "
135
+ _set_maxiters! (optimizer, maxiters)
86
136
end
87
137
return optimizer
88
138
end
0 commit comments