[SCIP] pseudo-solution objectives in the presence of pricers

James Cussens james.cussens at bristol.ac.uk
Thu Jan 14 10:24:42 CET 2021


Hi folks,

I am using a heuristic that is a variant of fixandinfer in a problem that also has an active pricer.

fixandinfer (and my variant) work by creating a pseudo-solution in a probing node.

When this pseudo-solution is proposed as a new primal solution we get (unless I am mistaken) the following sequence of calls:

SCIPtryCurrentSol ->
SCIPprimalTryCurrentSol ->
SCIPprimalLinkCurrentSol ->
SCIPsolLinkCurrentSol ->
SCIPsolLinkPseudoSol ->
SCIPlpGetPseudoObjval

When we get to SCIPlpGetPseudoObjVal the following is executed

   if( lp->pseudoobjvalinf > 0 || set->nactivepricers > 0 )
      return -SCIPsetInfinity(set);

Presumably the idea here is that because there are active pricers then more variables might come along and so (since we are in the transformed problem) it makes sense to return -infinity as a bound. The problem is that we can have, restricted to the currently existing variables, a feasible solution which SCIP indeed judges to be feasible.

So what happens is that SCIP informs me that the problem is unbounded since it has found a solution that is (1) feasible and (2) with unbounded objective.

I am currently getting round this problem by just copying over solution values to a brand new solution:

 /* have to copy pseudo solution since there are active pricers */
      SCIP_CALL( SCIPallocBufferArray(scip, &vals, nvars) );
      SCIP_CALL( SCIPgetSolVals(scip, NULL, nvars, vars, vals) );
      SCIP_CALL( SCIPcreateSol(scip, &sol, heur) );
      SCIP_CALL( SCIPsetSolVals(scip, sol, nvars, vars, vals) );
      SCIPfreeBufferArray(scip, &vals);

      SCIP_CALL( SCIPtrySolFree(scip, &sol, FALSE, FALSE, FALSE, FALSE, FALSE, &success) );

Is there a better workaround?

Btw, my variant differs from fixandinfer only in that the best variable to fix is that one whose pseudo-value (ie best with respect to objective) is closest to its current LP solution value. This actually works pretty well for my problem (each variable is binary, with negative objective and there is a collection of set packing constraints; each variable is in exactly one of these, so there are lots of easy propagations).

James


James Cussens
Dept of Computer Science, University of Bristol
https://jcussens.github.io/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.zib.de/pipermail/scip/attachments/20210114/b3e54a75/attachment.html>


More information about the Scip mailing list