[SCIP] Using debugsol with branching rules

Matheus Ota matheusota at gmail.com
Fri Jul 1 19:58:51 CEST 2022


Hi All,

Just an update and to make my question more precise. When I plug a debug
solution, SCIP give reports of the type

> ERROR: debugging solution was cut off in local node #443

Which I believe means that the debugged solution was present at node 443
and it was incorrectly cut off. I'm guessing that, because I use constraint
handlers to implement my branching rule, SCIP is reporting that the debug
solution is getting cut off in every node (including nodes where the
solution was cut off because of branching and not because of a cut or
pruning). Thus, in this context, it is harder to use the debug information
reported by SCIP.

In any case, using the branch-and-bound tree visualization:

> SCIP_CALL(SCIPsetStringParam(scip, "visual/vbcfilename", "mytree.vbc"));

I managed to manually keep track of which node the debug solution is
present. And I discovered that the debug solution is getting incorrectly
cut off in node #1728. However, I can't see why this node is getting
pruned. The LP bound returned at this node is 670, which is lower then the
solution returned by the whole algorithm (which has cost 674), so it
doesn't seem that it is getting pruned because of its bounds. Moreover, I'm
printing one line of log for each node using the command

> SCIP_CALL(SCIPsetIntParam(scip, "display/freq", 1));

and there is no line being printed for node #1728. Also, I'm printing the
node number every time I call my custom feasibility check (called in
CONSENFOPS, CONSENFOLP and CONSCHECK), and it is not being called at node
#1728. So I'm puzzled about where the algorithm is pruning this node.

Oh, one more thing, I'm also locking the variables to avoid incorrect
rounding. So for each variable x[e] in my model, I'm calling the following
in the CONSLOCK method

> SCIP_CALL(SCIPaddVarLocks(scip, x[e], nlockspos + nlocksneg,nlockspos +
> nlocksneg));


Any help is greatly appreciated.

Thanks,
Matheus

Em qui., 30 de jun. de 2022 às 20:29, Matheus Ota <matheusota at gmail.com>
escreveu:

> Dear Scip Community,
>
> I'm currently trying to debug my C++ program which incorrectly outputs a
> non-optimal solution. I have a minimization problem and I have a solution
> with value 673. My program when executed on my computer claims that a
> solution with value 674 is optimal. However, if I execute this program on
> another computer, it correctly outputs a solution with value 673. There are
> also instances where my computer is correct, but the other computer is not.
>
> In order to debug this problem I've compiled SCIP with -DDEBUGSOL=on and
> I'm using the parameter "misc/debugsol" to pass the solution with value
> 673. One thing to mention is that I have custom branching rules which were
> implemented via constraint handlers. When I execute the program with the
> debug solution it is printing a lot of violated constraints in the
> terminal, however, the violated constraints all seem to correspond to the
> branching inequalities. Is there a way to suppress the errors specifically
> for these inequalities?
>
> Also, I would be thankful for any help here (as I'm getting out of ideas
> of where the bug is)! I've checked my branching constraints and indeed, if
> a solution is cut-off in one branch, then it is present in the other
> branch. So the branching constraints are just partitioning the set of
> feasible solutions (as expected).
>
> Thanks for your time,
> Matheus
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.zib.de/pipermail/scip/attachments/20220701/44121497/attachment.html>


More information about the Scip mailing list