[SCIP] Cutting off the optimum when using relaxation handler

Renato Melo melo.renatosilva at gmail.com
Mon Dec 7 15:51:49 CET 2020


Hi everyone,

I am implementing a branch-and-cut model using C++ with SCIP 6.0.1. I am
using a relaxation handler to find lower bounds for a minimization problem.
The idea is providing only the lower bound value, not a relaxed solution.
Therefore, I was only updating the '*lowerbound' pointer on the RELAXEXEC
callback. However, when my relaxation finds a lower bound value equal to
the problem's optimal objective value, the branch-and-cut ends with a
solution greater than the optimal. I have no idea why this is happening.

- It can be because I am not providing a relaxed solution?

I tried to provide a relaxed solution that I know is optimal (for a
restricted case of the problem). To do this, I am setting the values one by
one with SCIPsetRelaxSolVal() and calling SCIPmarkRelaxSolValid() to inform
SCIP that the solution is complete and valid. In this case, if I set the
"includeslp" argument of SCIPmarkRelaxSolValid() as FALSE, nothing changes,
and SCIP continues cutting off the optimum. When I set the "includeslp"
argument to TRUE, I get the following error:

[src/scip/cons.c:3294] ERROR: enforcing method of constraint handler
<cycle-elimination> for relaxation returned an invalid result 1

However, I am sure that there are no cycles in the given solution. That is,
the solution is feasible.

I followed the Relaxator example (
https://www.scipopt.org/doc/html/RELAXATOR_MAIN.php) to implement my
relaxation and add a relaxed solution to SCIP's data structure. The
priority is -1, and the frequency is 1.

Have you some suggestions about what I can do?

Best regards,
Renato
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.zib.de/pipermail/scip/attachments/20201207/c425c16a/attachment.html>


More information about the Scip mailing list