@@ -84,6 +84,56 @@ function _create_new_optimizer(opt::MOI.AbstractOptimizer)
8484 return opt_setup
8585end
8686
87+ """
88+ _set_maxiters!(optimizer, maxiters)
89+
90+ Sets the maximum number of iterations for the optimizer using solver-specific parameter names.
91+ Supports common MOI solvers including Ipopt, Gurobi, CPLEX, and SCIP.
92+ """
93+ function _set_maxiters! (optimizer, maxiters:: Number )
94+ optimizer_name = string (typeof (optimizer))
95+
96+ # Try to set maxiters based on common solver patterns
97+ try
98+ if contains (optimizer_name, " Ipopt" )
99+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" max_iter" ), Int (maxiters))
100+ elseif contains (optimizer_name, " Gurobi" )
101+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" IterationLimit" ), Int (maxiters))
102+ elseif contains (optimizer_name, " CPLEX" ) || contains (optimizer_name, " Cplex" )
103+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" CPX_PARAM_ITLIM" ), Int (maxiters))
104+ elseif contains (optimizer_name, " SCIP" ) || contains (optimizer_name, " Scip" )
105+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" limits/iterations" ), Int (maxiters))
106+ elseif contains (optimizer_name, " Mosek" ) || contains (optimizer_name, " MOSEK" )
107+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" MSK_IPAR_INTPNT_MAX_ITERATIONS" ), Int (maxiters))
108+ elseif contains (optimizer_name, " OSQP" )
109+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" max_iter" ), Int (maxiters))
110+ elseif contains (optimizer_name, " ECOS" )
111+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" maxit" ), Int (maxiters))
112+ elseif contains (optimizer_name, " SCS" )
113+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" max_iters" ), Int (maxiters))
114+ elseif contains (optimizer_name, " COSMO" )
115+ MOI. set (optimizer, MOI. RawOptimizerAttribute (" max_iter" ), Int (maxiters))
116+ else
117+ # Generic fallback - try common parameter names
118+ for param_name in [" max_iter" , " maxiter" , " IterationLimit" , " max_iterations" ]
119+ try
120+ MOI. set (optimizer, MOI. RawOptimizerAttribute (param_name), Int (maxiters))
121+ return # Success, exit early
122+ catch
123+ continue # Try next parameter name
124+ end
125+ end
126+ # If all attempts fail, show warning with guidance
127+ @warn " common maxiters argument could not be mapped for $(typeof (optimizer)) . " *
128+ " Set number of iterations via optimizer specific keyword arguments."
129+ end
130+ catch e
131+ # Catch any errors during parameter setting and show informative warning
132+ @warn " Failed to set maxiters parameter for $(typeof (optimizer)) : $(e) . " *
133+ " Set number of iterations via optimizer specific keyword arguments."
134+ end
135+ end
136+
87137function __map_optimizer_args (
88138 cache,
89139 opt:: Union {
@@ -109,7 +159,7 @@ function __map_optimizer_args(
109159 @warn " common abstol argument is currently not used by $(optimizer) . Set tolerances via optimizer specific keyword arguments."
110160 end
111161 if ! isnothing (maxiters)
112- @warn " common maxiters argument is currently not used by $ (optimizer) . Set number of iterations via optimizer specific keyword arguments. "
162+ _set_maxiters! (optimizer, maxiters)
113163 end
114164 return optimizer
115165end
0 commit comments