[SCIP] Branching called the wrong constraints

Ngô Lan lan.ngo at aalto.fi
Mon Sep 23 10:56:36 CEST 2019


Hi all,


I am solving a project scheduling problem using BPC in C++. My pricer works fine now but I am stuck with branching and I would like to have your opinion on this. So in my problem, a project consists of several activities and events e.g 10 activities and 10 events and in master problem, I will try to determine the duration of each event and minimize it.


Each activity is a subproblem and the subproblem tries to find a feasible schedule (column beta) with minimized reduced cost and respecting non-preemption and resource requirement. After the master reaches the optimal LP solution, I would choose an activity and a random event to branch on so I am branching on whether an activity is processed in a specific event:

- INPROCESS: sum (all column/schedule t of activity j that is active at event e) beta_jt = 1

- NOTINPROCESS: sum (all column/schedule t of activity j that is active at event e) beta_jt = 0


Then I create 2 child nodes using SCIPcreateChild and add 2 linear constraints corresponding to the branching decision and 2 marker constraints (using constraint handler) to update pricer data. My questions are:

1. I printed out the constraint at each node and even when a node is in the NOTINPROCESS branch, my marker constraint's type is still INPROCESS. Do you have any idea why this could happen? I used the binpacking example as a template for my constraint handler


2. What should I do in CONSACTIVE and CONSDEACTIVE. I have read in several posts that I should update pricer / problem data here but I am still not clear how I should do it. As in binpacking example, you don't really update pricer in CONSACTIVE and CONSDEACTIVE but in addBranchingDecisionConss and addFixedVarConss as I understand the code correctly.


3. What I need to update in my pricer is the dual of the linear branching constraints and a new constraint that prevent columns that violate my branching decisions to happen again. What I am doing is saving all the linear branching constraints in a vector in my problem data and going through the vector while constructing my pricer to determine which constraint is active and add a new constraint and dual to subscip if it is active. Is this a proper way to do it?


Thank you for your help.


Best,

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


More information about the Scip mailing list