0
votes

I have a SCIP project to solve a binary problem with nonlinear objective function that works well but for some instances I got a message saying "the best solution is not feasible", and there is some violation in the constraints. (The violation is mostly very small) To solve this issue, I added the SCIP_CALL_EXC( SCIPsetRealParam(scip, "numerics/feastol", 1e-5) to change the default value of feastol. But I get segmentation fault!

Following your helpful suggestion, the violation value is now much lower. My objective function is in the form of Min: AX+ LSqrt(BX). In the previous version, I had used an auxiliary variable, let say, Q such that Q^2 - L^2(BX) >=0 and the objective function was expressed as Min: AX+ Q . In the new version, I changed the inequality sign into equality and in combination with SCIPsetRealParam(scip, "numerics/feastol",1e-8), the violation in the constraints are much lower. What can I do more to decrease the violation value? Moreover, when I printed the value of feastol, I seenumerics/lpfeastol=1e-8 but lpfeastol is different from feastol!. So, why lpfeastol is modified instead?. I see the modified value of lpfeastol several times printed on screen when SCIP is solving the problem. I appreciate your help in advance

1
Have you compiled in Debug mode to trace back the segmentation fault? - Gregor
Thanks for your quick response. I have traced it by hand since my debugger does not work for some time. When I remove the line for SCIP_CALL_EXC( SCIPsetRealParam(scip, "numerics/feastol", 1e-5, there is no segmentation fault. - pira pira
Your usage of the method SCIPsetRealParam looks correct, however, the use of SCIP_CALL_EXC makes me suspicious. Did you copy it from the Queens example? I would try to a) remove the SCIP_CALL_EXC and simply print the retcode of SCIPsetRealParam to see what goes wrong inside, and b) experiment with the placement of the method. Try to call it as early as possible after calling SCIPcreate() - Gregor
Not from Queens example, in fact, I am working on a SCIP project implemented by my supervisor in which SCIP_CALL_EXC is used instead of SCIP_CALL. If I use SCIP_CALL , I will get an error. I did what you suggested and the printed value is 1. It seems that the parameter is changed correctly. Thanks for your guidance - pira pira
great that it works. Good luck with your project. Let us know if you have further questions. - Gregor

1 Answers

1
votes

Maybe try changing the define of UPGSCALE in src/scip/cons_soc.c to some larger value.

The output for the lpfeastol is unfortunate, but normal. Reducing feastol automatically leads to adjusting lpfeastol, too. I cannot reproduce "I printed the value of feastol, I seenumerics/lpfeastol=1e-8 but lpfeastol is different from feastol".