Skip to content

Questions regarding "Using EAGO's basic optimizer with user-defined subroutines" #3

Open
@ShuhuaGao

Description

@ShuhuaGao

Hi, @mewilhel, thanks for your excellent work. I played with this notebook, as indicated in the title, and found some problems that need your help.

  1. x._lower_solution = IntervalArithmetic.mid.(x_value) in lower_problem!
    Though there is no documentation for _lower_solution, I guess it is the optimal solution to the lower bound problem. In the line above it x._lower_objective_value = F.lo, the minimum objective value is set the lower bound of the natural interval extension. However, how do we know that this value is attained by mid.(x_value)? Of course, from my limited knowledge of branch and bound (BB), the actual solution of the lower bound problem may not matter (but it may be used in branching though I am not sure how EAGO does)

  2. After optimization, the actual objective value differs from the reported one.
    I changed the last cell to (added the last line)

fval = JuMP.objective_value(m)
xsol = JuMP.value.(x)
status_term = JuMP.termination_status(m)
status_prim = JuMP.primal_status(m)

println("EAGO terminated with a status of $status_term and a result code of $status_prim")
println("The optimal value is: $fval, the solution found is $xsol.")

println("Verify objective value: ", sin(xsol[1])xsol[2]^2-cos(xsol[3])/xsol[4])

The output is

EAGO terminated with a status of OPTIMAL and a result code of FEASIBLE_POINT
The optimal value is: -1.498986093897677, the solution found is [-1.56982421875, -0.999755859375, -0.00244140625, 2.002197265625].
Verify objective value: -1.4989611040367379

Note that JuMP.objective_value(m) leads to -1.49898 but the one computed using the optimal solution xsol is -1.49896. What is the reason for this perceptible difference that cannot be ignored?

  1. About logging
    In EAGO.EAGOParameters, there is a field output_iterations which controls "Display summary of iteration to console every output_iterations (default = 10)". It seems the correct default value is actually 1000, and that's why no display in this notebook.
    After setting opt_dict[:output_iterations] = 10, I saw the display every 10 iterations. My question is how we can access this logging data instead of just printing it. For example, I want to plot the convergence curve of the lower and upper bounds during optimization after the optimization finishes.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions