[Scip] Early Branching issues
Stefan Heinz
heinz at zib.de
Fri Feb 8 01:00:29 MET 2013
good.
Best Stefan
On 02/08/2013 12:26 AM, Jose L Walteros wrote:
> 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>
>>>
>>
>
>
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> http://listserv.zib.de/mailman/listinfo/scip
More information about the Scip
mailing list