EAGO.jl
EAGO.jl copied to clipboard
SIP multiple constraints and small violation
Hi! I have been trying to solve a problem with multiple SIP constraints with EAGO using SIPResRev().
- What is the recommended way to use multiple SIP constraints? I have been writing it as
gSIP(x,p)=max(con1,con2)
. However I think this is leading to a violation of a constraint as at one p con1 =0 while con2 >0 . - Does SIPHybrid not work? At some iteration I get the following, which seems to me that something is going wrong.
First Solution Found at Node -1 LBD = Inf UBD = Inf Solution is :
-----------------------------------------------------------------------------------------------------------------------------
| Iteration | Nodes | Lower Bound | Upper Bound | Gap | Ratio | Time | Time Left |
-----------------------------------------------------------------------------------------------------------------------------
| 1000 | 1001 | 0.100E-1 | Inf | Inf | Inf | 0.918E-1 | 0.600E3 |
@evrenmturan Thanks for the feedback!
- The routines accept either a function gSIP as an argument or a vector of functions gSIP = [gSIP1, gSIP2, gSIP3,...]. So that's one option.
- We've done fairly minimal testing on SIPHybrid, so it's quite possible that there is currently an error in the algorithm. Would you mind sharing the example that produced that result? I'd like to get this bug resolved before I push a new release in a couple days and have a reproducible example on hand will make that much easier.
- Ah okay, I didn't notice the vector of functions was an option, thank you.
- I'll try put together a MWE to share soon.
A note on error messages - I don't know if this would be important to you but when running some test problems from Watson (1983) the SIPResult does not report that there was an issue.
I think that this test problem gives odd behaviour (have comments explaining). Or at least, I don't immediately understand why the error is not being caught and reported (even though the issue is obvious to notice when typing the problem).
On Test problem 5 there's a similar issue (I think?). No errors are reported but when using
x_l = Float64[-1000.0, -1000.0,-1000.0] x_u = Float64[1000.0, 1000.0,1000.0]
If you look at the the iteration messages it's clear that there was an issue "Error: basis matrix is singular to working precision (cond = 2.31e+217)", but when just looking at the final printout the incorrect solution is reported without an error.
SIPResult(1, 1, 4.320798635665406, 4.320798635665406, true, [1.0000918203231945, -0.011069365269669004, -0.48894097011504023], [0.0], 3.1574246883392334)
With regards to the original point 1. I changed to using a vector of functions but still have constraint violation despite the algorithm reporting that it has converged - code, with example of violation