EAGO.jl icon indicating copy to clipboard operation
EAGO.jl copied to clipboard

EAGO times out out trivial problem

Open odow opened this issue 1 year ago • 1 comments

See this example:

julia> using JuMP, EAGO

julia> model = Model(EAGO.Optimizer)
A JuMP Model
├ solver: EAGO - Easy Advanced Global Optimization
├ objective_sense: FEASIBILITY_SENSE
├ num_variables: 0
├ num_constraints: 0
└ Names registered in the model: none

julia> @variable(model, x <= 2)
x

julia> @variable(model, t)
t

julia> @constraint(model, log(x) >= t)
log(x) - t ≥ 0

julia> @objective(model, Max, t)
t

julia> optimize!(model)
┌ Warning: At least one branching variable is unbounded. This will interfere with EAGO's global
│ optimization routine and may cause unexpected results. Bounds have been automatically
│ generated at +/- 1E10 for all unbounded variables, but tighter user-defined bounds are
│ highly recommended. To disable this warning and the automatic generation of bounds, use
│ the option `unbounded_check = false`.
└ @ EAGO ~/.julia/packages/EAGO/oWEmA/src/eago_optimizer/optimize/nonconvex/stack_management.jl:256

******************************************************************************
This program contains Ipopt, a library for large-scale nonlinear optimization.
 Ipopt is released as open source code under the Eclipse Public License (EPL).
         For more information visit https://github.com/coin-or/Ipopt
******************************************************************************

---------------------------------------------------------------------------------------------------------------------------------
|  Iteration #  |     Nodes     |  Lower Bound  |  Upper Bound  |      Gap      |     Ratio     |     Timer     |   Time Left   |
---------------------------------------------------------------------------------------------------------------------------------
|          1000 |            21 |    -1.000E+10 |           Inf |           Inf |           Inf |         10.98 |       3589.02 |
|          2000 |            21 |    -1.000E+10 |           Inf |           Inf |           Inf |         12.30 |       3587.70 |
|          3000 |            19 |    -1.000E+10 |           Inf |           Inf |           Inf |         13.57 |       3586.43 |
|          4000 |            21 |    -1.000E+10 |           Inf |           Inf |           Inf |         14.90 |       3585.10 |
|          5000 |            19 |    -1.000E+10 |           Inf |           Inf |           Inf |         16.21 |       3583.79 |
|          6000 |            21 |    -1.000E+10 |           Inf |           Inf |           Inf |         17.53 |       3582.47 |
|          7000 |            19 |    -1.000E+10 |           Inf |           Inf |           Inf |         18.81 |       3581.19 |
|          8000 |            21 |    -1.000E+10 |           Inf |           Inf |           Inf |         20.11 |       3579.89 |
|          9000 |            17 |    -1.000E+10 |           Inf |           Inf |           Inf |         21.41 |       3578.59 |
|         10000 |            19 |    -1.000E+10 |           Inf |           Inf |           Inf |         22.72 |       3577.28 |
|         11000 |            19 |    -1.000E+10 |           Inf |           Inf |           Inf |         24.03 |       3575.97 |
|         12000 |            19 |    -1.000E+10 |           Inf |           Inf |           Inf |         25.36 |       3574.64 |
|         13000 |            19 |    -1.000E+10 |           Inf |           Inf |           Inf |         26.67 |       3573.33 |
|         14000 |            17 |    -1.000E+10 |           Inf |           Inf |           Inf |         28.00 |       3572.00 |
|         15000 |            17 |    -1.000E+10 |           Inf |           Inf |           Inf |         29.28 |       3570.72 |

I expected it to solve quickly.

Found because I've been adding new tests to MOI. I'll fix the test in MOI to add finite bounds, but I thought this was an interesting test case.

odow avatar Dec 04 '24 01:12 odow

It looks like EAGO's checking the negative region and not correctly interpreting the MOI.INVALID_MODEL termination status code. We're in the process of redoing how EAGO handles constraint propagation so that it is able to detect issues like this and remove the part of the domain causing the numerical issue.

DimitriAlston avatar Dec 04 '24 17:12 DimitriAlston