[Scip] Early Branching issues

Stefan Heinz heinz at zib.de
Thu Feb 7 22:29:19 MET 2013


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#**
>>> 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#**>
>>>              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>
>>>
>>>
>>>
>>>



More information about the Scip mailing list