coin-or / SYMPHONY

SYMPHONY is an open-source solver, callable library, and development framework for mixed-integer linear programs (MILPs) written in C with a number of unique features
https://github.com/coin-or/SYMPHONY/wiki
Other
65 stars 18 forks source link

sensitivity.c segmentation fault errors #186

Open SelinBayramoglu opened 2 years ago

SelinBayramoglu commented 2 years ago

Hello,

I compiled SYMPHONY 5.6.18 with coinbrew using the following commands:

wget https://github.com/coin-or/SYMPHONY/archive/refs/tags/releases/5.6.18.zip unzip 5.6.18.zip wget https://raw.githubusercontent.com/coin-or/coinbrew/master/coinbrew ./coinbrew fetch SYMPHONY@5.6.18 ./coinbrew build SYMPHONY --enable-optional --enable-debug --enable-sensitivity-analysis --disable-cgl-cuts --with-application --no-prompt

I'd like to use the sensitivity analysis feature. So I compiled the sensitivity.c program in the Examples folder via the Makefile. I got it to work with the example exmip1.lp in Data/Sample folder. For other example problems, I get several errors.

For example, with exmip1.mps I get: ++++++++++++++++++++++++++++++++++++++++++++++++++++

I want to perform sensitivity analysis without preprocessing as well, so I tried running the code again with the following parameters:

sym_set_int_param(env, "sensitivity_analysis", TRUE); sym_set_int_param(env, "verbosity", 5); sym_set_int_param(env, "prep_level", -1);

This time, I got a segmentation fault with the exmip1.lp as well, which used to work when preprocessing was on.

GDB shows that the error occurs at line 1610 of tm_func.c:

child->duals = bobj->duals[i];

where bobj->duals is a null pointer.

I'd appreciate any help/advice with this issue. Thank you.

tkralphs commented 2 years ago

Thanks for reporting this and sorry that I haven't gotten to look at it yet. The sensitivity analysis features of SYMPHONY have not received a lot of exercise. @bsuresh Might you have a chance to look at this?

tkralphs commented 2 years ago

@SelinBayramoglu I probably should have given you this answer right off the bat, but had to refresh my memory. The WS ("warm starting") branch has a lot of fixes for sensitivity and warm starting that have not made it into either master or 5.6. I guess that I probably won't end up fixing these issues in 5.6, but will move on to another stable version based on what is in the WS branch. The WS branch should be working well, since that is the branch I'm using most of the time. It does need to be rebased on master, though. There may be a few minor fixes in master that are not in WS.

I just tried the example that was failing in 5.6 and it seems to work fine in WS. Can you give it a try?