[Scip] How to modify the objective function value of a variable within the pricing loop ?

Gerald Gamrath gamrath at zib.de
Mon Sep 16 12:01:51 CEST 2013


Dear Behrouz,

unfortunately, it is currently not possible to modify the objective
coefficients of variables during the search, because this would mean
that all previously computed dual bounds become invalid.
I assume you want to do this for implementing a dual variable
stabilization? We are currently evaluating possibilities to implement
this within SCIP such that you continue pricing even if you did not find
an improving variable as long as the stabilization is active. But until
now, this is not supported by SCIP.

However, you could try a dual variable smoothing technique, which does
not need auxiliary variables.

The way you do it right now should also work, but has some drawbacks. It
probably consumes a lot of memory, because all the old variables are
kept. You could try to not only set the variables removable (from the
LP), but also deletable (from the complete problem) by calling
SCIPvarMarkDeletable(), see
http://scip.zib.de/doc/html/pub__var_8h.shtml#a3f47c9e7e057200e54e1b5858f5ca428
Furthermore, you could set lp/cleanupcols and lp/cleanupcolsroot to
TRUE, which - in addition to the colage limit - removes all non-basic
variables from the LP (and then also the problem), at the end of the
processing of one node. Please note that a variable that is in the LP
after this cleanup phase will be part of the basis information and
therefore cannot be removed from the LP afterwards. Additionally, fixing
the old auxiliary variables to 0 and introducing new ones destroys both
primal as well as dual feasibility of you basis information, so the
simplex algorithm cannot be warmstarted.

Therefore, I would recommend to better try a dual variable smoothing
technique, which often gives very good results as well.

Best,
Gerald

On 12.09.2013 17:11, Behrouz Babaki wrote:
> Dear SCIP community,
>
> In my branch-and-price implementation in SCIP, I have a number of
> continuous variables that I have to modify multiple times. This should
> happen once every number of times that the pricing function is called.
> So, these variables are meant to be modified several times while the
> (progressively growing) LP is being solved.
>
> The modification involves changing the objective function values as
> well as variable bounds. I know that I can change the bounds using
> SCIPchgVarLb(...) and SCIPchgVarUb(...). However, I don't know how to
> change the objective function value while in SCIP_STAGE_SOLVING,
> especially when the lp has not been solved to optimality yet.
>
> So far, the only safe way that I have found for doing so is to fix all
> these variables to zero, and create another set with different
> objective function coefficients and different bounds within the
> pricing function. Also, By setting these variables as removable and
> reducing "lp/colagelimit" I hope that they are removed from the LP
> soon enough after they are fixed to zero.
>
> My question is that whether there is a better way for modifying the
> objective function values without having to remove and re-create the
> variables?
>
> Behrouz
>
>
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> http://listserv.zib.de/mailman/listinfo/scip

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listserv.zib.de/pipermail/scip/attachments/20130916/a906e474/attachment.html>


More information about the Scip mailing list