0

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

pira pira
  • 3
  • 2
  • Have you compiled in Debug mode to trace back the segmentation fault? – Gregor Aug 20 '18 at 08:58
  • 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 Aug 20 '18 at 09:06
  • 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 Aug 20 '18 at 10:01
  • 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 Aug 20 '18 at 10:58
  • great that it works. Good luck with your project. Let us know if you have further questions. – Gregor Aug 20 '18 at 12:03

1 Answers1

1

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".

stefan
  • 799
  • 4
  • 9