PSORLab / EAGO.jl

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

SIP multiple constraints and small violation #92

Open evrenmturan opened 3 years ago

evrenmturan commented 3 years ago

Hi! I have been trying to solve a problem with multiple SIP constraints with EAGO using SIPResRev().

  1. 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 .
  2. 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  |
mewilhel commented 3 years ago

@evrenmturan Thanks for the feedback!

  1. The routines accept either a function gSIP as an argument or a vector of functions gSIP = [gSIP1, gSIP2, gSIP3,...]. So that's one option.
  2. 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.
evrenmturan commented 3 years ago
  1. Ah okay, I didn't notice the vector of functions was an option, thank you.
  2. I'll try put together a MWE to share soon.
evrenmturan commented 3 years ago

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)

evrenmturan commented 3 years ago

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