PSORLab / EAGO.jl

A development environment for robust and global optimization
MIT License
140 stars 16 forks source link

EAGO configuration routine for COPT subsolver #129

Open stumarcus314 opened 1 month ago

stumarcus314 commented 1 month ago

I get the message below when I try to set COPT as a subsolver for EAGO. The message states that a configuration routine needs to be added to EAGO in order to interface with COPT. COPT is an excellent LP & MILP solver (almost on par with Gurobi) and has a generous license, at least for now. https://github.com/COPT-Public/COPT-Release https://www.shanshu.ai/copt https://github.com/COPT-Public/COPT.jl


using IntervalArithmetic; setrounding(Interval, :accurate) using EAGO, COPT eago_factory = () -> EAGO.Optimizer(SubSolvers(; r = COPT.Optimizer())) model = Model(eago_factory)


$ julia create_model.jl Number of pulses: 256. Cardinal Optimizer v7.1.3. Build date Apr 29 2024 Copyright Cardinal Operations 2024. All Rights Reserved Constructing deprecated model.

JuMP model construction time: 4.072189102 [s]. EAGO lacks a specialized configuration routine for the subsolver (COPT) you selected. As a result, EAGO cannot set the subsolver tolerances based on the absolute_tolerance, relative_tolerance, and absolute_constraint_feas_tolerance parameters passed to the EAGO optimizer. Consequently, need to ensure that the tolerances set in the provided subsolver are appropriate (for instance if the absolute_tolerance = 1E-3 then the absolute tolerance for a subsolver should be < 1E-4 and any feasibility tolerances should be as conservative as the absolute_constraint_feas_tolerance). If you see this message please submit an issue at https://github.com/PSORLab/EAGO.jl/issues/new/choose requesting that a configuration routine be added for this subsolver.

RXGottlieb commented 1 month ago

This message is essentially stating that EAGO doesn't automatically set tolerances for COPT based on EAGO's tolerances. EAGO will still work using COPT as a subsolver, you'll just need to be sure that the subsolver tolerances are appropriate for the tolerances you're using at the EAGO level. We may look into adding specific support for COPT in the future to hide this message, or you can submit a pull request with a file like EAGO.jl/src/subsolvers/copt.jl that sets the desired parameters relative to EAGO. If you decide to submit a pull request, you can look at the other files in the subsolvers folder for formatting examples.