[Scip] Early Branching issues

Jose L Walteros jl.walteros at gmail.com
Fri Feb 8 00:26:54 MET 2013


Problem solved. I was not sure about the default cut generation strategy of
SCIP. Indeed I am stopping the CG after the root is solved. Hence, no cuts.
I know that generally generating cuts after branching some times reduces
the solution efficiency due to the overhead of the separation algorithms
and the extra rows, but I didn't know that SCIP shut it down almost
completely.

Thanks a lot, you were really helpful

-Jose




On Thu, Feb 7, 2013 at 6:19 PM, Gerald Gamrath <gamrath at zib.de> wrote:

> Hi Jose,
>
> when do you want to stop pricing and start cutting? When you are still at
> the root node? In case you do it after you finished the root node, the
> explanation is easy: per default, SCIP only generates cutting planes at the
> root node, and even if you set the separation to aggressive, separators
> will only be called every 20 depth levels. But you can change the
> frequencies of the separators via the SCIP shell, you just have to change
> the freq parameters of the separators. Perhaps this helps?
>
> Best,
> Gerald
>
> Am 07.02.2013 22:29, schrieb Stefan Heinz:
>
>> Hi Jose,
>>
>> can you send a statistic output of one run please.
>>
>> Stefan
>>
>>
>> On 02/07/2013 07:56 PM, Jose L Walteros wrote:
>>
>>> Hi Stefan,
>>>
>>> Yesterday I gave up with the pricer deactivation and tried to continue
>>> through the (*result= SCIP_SUCCESS) path.
>>>
>>>
>>> This is the piece of the code I have:
>>> if(nconsstree>EARLY_BRANCHING_**LIMIT){
>>> (*success) = TRUE;
>>> for(s=0;s<n;s++)
>>> {
>>> for(i=0;i<m;i++)
>>> {
>>> SCIP_CALL( SCIPsetConsModifiable(scip, conss[s][i], FALSE) );
>>> }
>>> }
>>> SCIP_CALL( SCIPsetSeparating(scip, SCIP_PARAMSETTING_AGGRESSIVE, TRUE) );
>>> return SCIP_OKAY;
>>> }
>>>
>>> I am positive that the constraints I am using are the transformed ones
>>> because those are the ones present in the pricer's data structure and as
>>> far as I know those have to be the transformed ones, otherwise I would
>>> not
>>> be able to update them with new columns.
>>>
>>> To make sure they are the transformed ones I also tried:
>>>
>>> SCIP_CONS* cons;
>>> if(nnodes>EARLY_BRANCHING_**LIMIT){
>>> (*success) = TRUE;
>>> for(s=0;s<n;s++)
>>> {
>>> for(i=0;i<m;i++)
>>> {
>>> SCIP_CALL( SCIPgetTransformedCons(scip, conss[s][i], &cons ));
>>> SCIP_CALL( SCIPsetConsModifiable(scip, cons, FALSE) );
>>> }
>>> }
>>> SCIP_CALL( SCIPsetSeparating(scip, SCIP_PARAMSETTING_AGGRESSIVE, TRUE) );
>>> return SCIP_OKAY;
>>> }
>>>
>>> but no cuts are generated. I am stuck here, I will appreciate some help
>>>
>>> Thank for your help
>>>
>>>
>>> On Thu, Feb 7, 2013 at 5:32 AM, Stefan Heinz <heinz at zib.de> wrote:
>>>
>>>  Hi Jose,
>>>>
>>>>
>>>>
>>>> On 02/07/13 04:32, Jose L Walteros wrote:
>>>>
>>>>  Hi Stefan,
>>>>>
>>>>> I was originally setting a flag inside of the pricer that acivates when
>>>>> the number of nodes was above a given threshold k.
>>>>> Then, once the flag was activated, I was calling:
>>>>>
>>>>> pricer = SCIPfindPricer(scip, PRICER_NAME);
>>>>> SCIP_CALL( SCIPdeactivatePricer(scip, pricer) );
>>>>> SCIP_CALL(SCIPrestartSolve(****scip) );
>>>>>
>>>>> for(s=0;s<n;s++)
>>>>> {
>>>>> for(i=0;i<m;i++)
>>>>> {
>>>>> SCIP_CALL( SCIPsetConsModifiable(scip, conss[s][i], FALSE) );
>>>>> }
>>>>> }
>>>>> SCIP_CALL( SCIPsetSeparating(scip, SCIP_PARAMSETTING_AGGRESSIVE, TRUE)
>>>>> );
>>>>>
>>>>>
>>>>> I was getting the following error, which I thought i was because the
>>>>> call
>>>>> was inside the pricer:
>>>>> cannot call method <SCIPdeactivatePricer> in solving stage
>>>>>
>>>>>  Instead of deactivation the pricer, just return within your pricer
>>>> without
>>>> doing anything and pretend that all columns/variables are generated
>>>> (*result = SCIP_SUCCESS). If you are not pretending that all
>>>> columns/variables are there and force an early branching, then the LP is
>>>> officially not solved to optimality. Meaning that all separators are not
>>>> starting since they need an optimal basis.
>>>>
>>>>
>>>>
>>>>
>>>>  Then, What I tried to do then was to code an event handler that catches
>>>>> and SCIP_EVENTTYPE_NODEFOCUSED
>>>>>
>>>>> and then deactivates the pricer. Unfortunately, I'm still getting the
>>>>> same error.
>>>>>
>>>>> I checked the reference file and it seems that deactivate pricer can
>>>>> only
>>>>> be called in the stages:
>>>>> SCIP_STAGE_PROBLEM
>>>>> SCIP_STAGE_EXITSOLVE
>>>>>
>>>>>
>>>>> Also, If I just use in the event handler:
>>>>>
>>>>> for(s=0;s<n;s++)
>>>>> {
>>>>> for(i=0;i<m;i++)
>>>>> {
>>>>> SCIP_CALL( SCIPsetConsModifiable(scip, conss[s][i], FALSE) );
>>>>> }
>>>>> }
>>>>> SCIP_CALL( SCIPsetSeparating(scip, SCIP_PARAMSETTING_AGGRESSIVE, TRUE)
>>>>> );
>>>>>
>>>>>  Regarding the modifiable flag. Please make sure that you change the
>>>> flags
>>>> of the transformed constraints and not of the original once.
>>>>
>>>> Best Stefan
>>>>
>>>>  It does not generate any cuts.
>>>>>
>>>>> Thanks for your help
>>>>>
>>>>> -Jose
>>>>>
>>>>>
>>>>> On Wed, Feb 6, 2013 at 6:31 PM, Stefan Heinz <heinz at zib.de <mailto:
>>>>> heinz at zib.de>> wrote:
>>>>>
>>>>>       Hi Jose,
>>>>>
>>>>>
>>>>>       On 02/07/2013 12:20 AM, Jose L Walteros wrote:
>>>>>
>>>>>           Hi Stefan,
>>>>>
>>>>>           Thanks for your quick response,  I changed the code as you
>>>>>           suggested (I am
>>>>>           also changing some other parameters and I guess I confused
>>>>> the
>>>>>           TRUE
>>>>>           parameter as the way to do it, thanks for the clarification)
>>>>>           but still no
>>>>>           additional cut are generated.
>>>>>
>>>>>           I am using now:
>>>>>
>>>>>           SCIP_CALL( SCIPsetSeparating(scip,
>>>>>           SCIP_PARAMSETTING_AGGRESSIVE, TRUE) );
>>>>>
>>>>>           I also tried the default.
>>>>>
>>>>>           For this formulation all the constraints of the master
>>>>> problem
>>>>>           are Set
>>>>>           Partitioning constraints defined as:
>>>>>
>>>>>           SCIP_CALL( SCIPcreateConsBasicSetpart(****scip,
>>>>> &(conss[s][i]),
>>>>>           name, 0, NULL)
>>>>>           );
>>>>>           SCIP_CALL( SCIPsetConsModifiable(scip, conss[s][i], TRUE) );
>>>>>
>>>>>       One think, if you stop generating new variables completely, you
>>>>>       should change the "modifiable" flag of the constraints to FALSE.
>>>>>       Additionally you could turn off your pricer(s) and force a
>>>>>       restart. That would run presolving for example again. Check the
>>>>>       method SCIPrestartSolve():
>>>>>
>>>>>       http://scip.zib.de/doc/html/****scip_8h.shtml#**<http://scip.zib.de/doc/html/**scip_8h.shtml#**>
>>>>> a08e665c374c599f96c4968ce8cf10****8ba<http://scip.zib.de/doc/**
>>>>> html/scip_8h.shtml#**a08e665c374c599f96c4968ce8cf10**8ba<http://scip.zib.de/doc/html/scip_8h.shtml#a08e665c374c599f96c4968ce8cf108ba>
>>>>> >
>>>>>
>>>>>       I am not sure but the modifiable issue can be the/a reason for
>>>>> not
>>>>>       executing the separation. Try it and if does not work, I will
>>>>>       check the code (during the day tomorrow).
>>>>>
>>>>>       Best and good night Stefan
>>>>>
>>>>>
>>>>>
>>>>>           I know  that no separators are called because in the
>>>>> execution
>>>>>           summary the
>>>>>           number of calls to all separators is zero.
>>>>>
>>>>>           Is there anything I am missing?
>>>>>
>>>>>           Thanks
>>>>>
>>>>>           -Jose
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>           On Wed, Feb 6, 2013 at 5:53 PM, Stefan Heinz <heinz at zib.de
>>>>>           <mailto:heinz at zib.de>> wrote:
>>>>>
>>>>>               Hi Jose,
>>>>>
>>>>>               It should be possible to turn on the separation. The bool
>>>>>               parameter you
>>>>>               changed from TRUE to FALSE has nothing to with turning on
>>>>>               or off the "OFF"
>>>>>               mode.
>>>>>
>>>>>               http://scip.zib.de/doc/html/******scip_8h.shtml#**<http://scip.zib.de/doc/html/****scip_8h.shtml#**>
>>>>> <http://**scip.zib.de/doc/html/**scip_**8h.shtml#**<http://scip.zib.de/doc/html/**scip_8h.shtml#**>
>>>>> >
>>>>>               af91abf95639f1bf2022c11d13a032******b10<
>>>>> http://scip.zib.de/**doc/ <http://scip.zib.de/doc/>
>>>>> **html/scip_8h.shtml#****af91abf95639f1bf2022c11d13a032****b10<
>>>>> http://scip.zib.de/doc/**html/scip_8h.shtml#**
>>>>> af91abf95639f1bf2022c11d13a032**b10<http://scip.zib.de/doc/html/scip_8h.shtml#af91abf95639f1bf2022c11d13a032b10>
>>>>> >
>>>>>
>>>>>
>>>>>               It does the parameter change "quite" or not. Meaning with
>>>>>               or without an
>>>>>               output via the message handler. You need to change the
>>>>>               second parameter to
>>>>>               one of the followings:
>>>>>
>>>>>               * SCIP_PARAMSETTING_DEFAULT which are the default values
>>>>>               of all separating
>>>>>               parameters
>>>>>
>>>>>               * SCIP_PARAMSETTING_FAST such that the time spend for
>>>>>               separating is
>>>>>               decreased
>>>>>
>>>>>               * SCIP_PARAMSETTING_AGGRESSIVE such that the separating
>>>>> is
>>>>>               done more
>>>>>               aggregative
>>>>>
>>>>>               * SCIP_PARAMSETTING_OFF which turn off all separating
>>>>>
>>>>>               Probably you want to try SCIP_PARAMSETTING_DEFAULT first.
>>>>>
>>>>>               Best Stefan
>>>>>
>>>>>
>>>>>               On 02/06/2013 09:59 PM, Jose L Walteros wrote:
>>>>>
>>>>>                   Hi all,
>>>>>
>>>>>                   I am solving a problem via Branch and Price. For one
>>>>>                   of my experiments, I
>>>>>                   am interested in stopping the pricing at a certain
>>>>>                   point in the B&B tree
>>>>>                   to
>>>>>                   heuristically obtain a good solution. Since I am no
>>>>>                   longer pricing new
>>>>>                   variables, I am wondering if it is possible to
>>>>>                   activate the separate
>>>>>                   algorithms to add default SCIP cutting planes after
>>>>> no
>>>>>                   more columns are
>>>>>                   generated.
>>>>>
>>>>>                   I tried to play with SCIP_CALL(
>>>>> SCIPsetSeparating(scip,
>>>>>                   SCIP_PARAMSETTING_OFF, TRUE) ); changing it from TRUE
>>>>>                   to FALSE but I did
>>>>>                   not get the expected beheavior.
>>>>>
>>>>>                   Tanks
>>>>>
>>>>>                   -Jose
>>>>>
>>>>>
>>>>>
>>>>>                   ______________________________**
>>>>> ****_________________
>>>>>                   Scip mailing list
>>>>>                   Scip at zib.de <mailto:Scip at zib.de>
>>>>>                   http://listserv.zib.de/******mailman/listinfo/scip<http://listserv.zib.de/****mailman/listinfo/scip>
>>>>> <http://**listserv.zib.de/**mailman/**listinfo/scip<http://listserv.zib.de/**mailman/listinfo/scip>
>>>>> >
>>>>> <http://**listserv.zib.de/**mailman/**listinfo/scip<http://listserv.zib.de/mailman/**listinfo/scip>
>>>>> <http:/**/listserv.zib.de/mailman/**listinfo/scip<http://listserv.zib.de/mailman/listinfo/scip>
>>>>> >
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>  ______________________________**_________________
>> Scip mailing list
>> Scip at zib.de
>> http://listserv.zib.de/**mailman/listinfo/scip<http://listserv.zib.de/mailman/listinfo/scip>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserv.zib.de/mailman/private/scip/attachments/20130208/ebec1295/attachment.html


More information about the Scip mailing list