[Scip] Branching on continuous variables in the quadratic constraint

Wen-Yang Ku wku at mie.utoronto.ca
Tue Apr 8 00:56:24 CEST 2014


Hi Timo,

Thanks a lot for your explanation! I asked this because I noticed a  
great improvement after changing the the branching priority for the  
continuous variables for my problem. And the results so far are always  
correct.

Quoting Timo Berthold <berthold at zib.de>:

> Hi Wen-Yang,
>
>> Is there a general guideline on the
>> advantage (other than finding feasible solutions) using IPOPT?
>
> There are three points in SCIP where Ipopt is used:
> - to determine whether quadratic constraints are convex by checking the
> signs of their eigenvalues
> - for the local search heuristic subNLP
> - for the NLP diving heuristic
>
> If none of this is beneficial for you, there is no further added value.

I guess these techniques happen not to be influential on my problem :)  
That said, if I don't compile with IPOPT, SCIP won't have info on the  
convexity, so it's going to assume that the problem is non-convex.  
Then the spatial branching on the non-convex continuous variable will  
be used? If this is true, changing the branching priority on the  
continuous variable seems to make sense.

>
>> My question is that, is it still
>> algorithmic correct if I set the branching priority of these
>> continuous variables (W_j) higher, in order to make SCIP branch on
>> them before branching on the integer variables?
>
> I think that this will not have the intended effect; as long as SCIP has a
> fractional LP solution, it will keep branching on it.
>
> For SCIP nerds ;-): In SCIPbranchExecLP, branch.c, it is checked whether
> there are pseudo candidates of a higher priority than the highest LP
> candidate; however, there is no such check for the external candidates. It
> is debatable whether this is a bug or a feature. So or so, it seems to
> hinder what Wen-Yang tries to implement.
>
> @Wen-Yang, without any warranty (It did not check it myself):
> Adding
>    if( branchcand->externmaxpriority > branchcand->lpmaxpriority )
>    {
>       SCIP_CALL( SCIPbranchExecExtern(blkmem, set, stat, prob, tree, lp,
> branchcand, eventqueue, cutoffbound, allowaddcons, result) );
>       if( *result != SCIP_DIDNOTRUN )
>          return SCIP_OKAY;
>    }
> after the corresponding code block for pseudocands in  SCIPbranchExecLP()
> might give what you are asking for.

I will try this and see what happens. Thanks again!

Best,
Wen-Yang


>
> Best regards,
> Timo




More information about the Scip mailing list