@@ -1623,7 +1623,7 @@ SCIP_RETCODE solveNodeInitialLP(
1623
1623
/* solve initial LP */
1624
1624
SCIPsetDebugMsg (set , "node: solve initial LP\n" );
1625
1625
SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , transprob ,
1626
- SCIPnodeGetDepth (SCIPtreeGetFocusNode (tree )) == 0 ? set -> lp_rootiterlim : set -> lp_iterlim , TRUE, TRUE, FALSE, lperror ) );
1626
+ SCIPnodeGetDepth (SCIPtreeGetFocusNode (tree )) == 0 ? set -> lp_rootiterlim : set -> lp_iterlim , TRUE, TRUE, FALSE, FALSE, lperror ) );
1627
1627
assert (lp -> flushed );
1628
1628
assert (lp -> solved || * lperror );
1629
1629
@@ -1706,7 +1706,7 @@ SCIP_RETCODE separationRoundResolveLP(
1706
1706
{
1707
1707
/* solve LP (with dual simplex) */
1708
1708
SCIPsetDebugMsg (set , "separation: resolve LP\n" );
1709
- SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , prob , set -> lp_iterlim , FALSE, TRUE, FALSE, lperror ) );
1709
+ SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , prob , set -> lp_iterlim , FALSE, TRUE, FALSE, FALSE, lperror ) );
1710
1710
assert (lp -> flushed );
1711
1711
assert (lp -> solved || * lperror );
1712
1712
* mustsepa = TRUE;
@@ -2353,7 +2353,7 @@ SCIP_RETCODE SCIPpriceLoop(
2353
2353
* if LP was infeasible, we have to use dual simplex
2354
2354
*/
2355
2355
SCIPsetDebugMsg (set , "pricing: solve LP\n" );
2356
- SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , transprob , -1LL , FALSE, TRUE, FALSE, lperror ) );
2356
+ SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , transprob , -1LL , FALSE, TRUE, FALSE, FALSE, lperror ) );
2357
2357
assert (lp -> flushed );
2358
2358
assert (lp -> solved || * lperror );
2359
2359
@@ -2382,7 +2382,7 @@ SCIP_RETCODE SCIPpriceLoop(
2382
2382
2383
2383
/* solve LP again after resetting bounds and adding new initial constraints (with dual simplex) */
2384
2384
SCIPsetDebugMsg (set , "pricing: solve LP after resetting bounds and adding new initial constraints\n" );
2385
- SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , transprob , -1LL , FALSE, FALSE, FALSE, lperror ) );
2385
+ SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , transprob , -1LL , FALSE, FALSE, FALSE, FALSE, lperror ) );
2386
2386
assert (lp -> flushed );
2387
2387
assert (lp -> solved || * lperror );
2388
2388
@@ -2489,6 +2489,7 @@ SCIP_RETCODE priceAndCutLoop(
2489
2489
SCIP_EVENTFILTER * eventfilter , /**< global event filter */
2490
2490
SCIP_CLIQUETABLE * cliquetable , /**< clique table data structure */
2491
2491
SCIP_Bool fullseparation , /**< are we in the first prop-and-cut-and-price loop? */
2492
+ SCIP_Bool forcedlpsolve , /**< would SCIP abort if the LP is not solved? */
2492
2493
SCIP_Bool * propagateagain , /**< pointer to store whether we want to propagate again */
2493
2494
SCIP_Bool * cutoff , /**< pointer to store whether the node can be cut off */
2494
2495
SCIP_Bool * unbounded , /**< pointer to store whether an unbounded ray was found in the LP */
@@ -2568,7 +2569,7 @@ SCIP_RETCODE priceAndCutLoop(
2568
2569
/* solve initial LP of price-and-cut loop */
2569
2570
SCIPsetDebugMsg (set , "node: solve LP with price and cut\n" );
2570
2571
SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , transprob ,
2571
- set -> lp_iterlim , FALSE, TRUE, FALSE, lperror ) );
2572
+ set -> lp_iterlim , FALSE, TRUE, FALSE, forcedlpsolve , lperror ) );
2572
2573
assert (lp -> flushed );
2573
2574
assert (lp -> solved || * lperror );
2574
2575
@@ -2672,7 +2673,7 @@ SCIP_RETCODE priceAndCutLoop(
2672
2673
2673
2674
/* resolve LP */
2674
2675
SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , transprob ,
2675
- set -> lp_iterlim , FALSE, TRUE, FALSE, lperror ) );
2676
+ set -> lp_iterlim , FALSE, TRUE, FALSE, FALSE, lperror ) );
2676
2677
assert (lp -> flushed );
2677
2678
assert (lp -> solved || * lperror );
2678
2679
@@ -2908,7 +2909,7 @@ SCIP_RETCODE priceAndCutLoop(
2908
2909
/* solve LP (with dual simplex) */
2909
2910
SCIPsetDebugMsg (set , "separation: solve LP\n" );
2910
2911
SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , transprob ,
2911
- set -> lp_iterlim , FALSE, TRUE, FALSE, lperror ) );
2912
+ set -> lp_iterlim , FALSE, TRUE, FALSE, FALSE, lperror ) );
2912
2913
assert (lp -> flushed );
2913
2914
assert (lp -> solved || * lperror );
2914
2915
@@ -3007,7 +3008,7 @@ SCIP_RETCODE priceAndCutLoop(
3007
3008
lp -> solved = FALSE;
3008
3009
SCIPlpExactAllowExactSolve (lp -> lpexact , set , TRUE);
3009
3010
SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , transprob ,
3010
- set -> lp_iterlim , FALSE, FALSE, FALSE, lperror ) );
3011
+ set -> lp_iterlim , FALSE, FALSE, FALSE, FALSE, lperror ) );
3011
3012
if ( !(* lperror ) )
3012
3013
SCIPtreeSetFocusNodeLP (tree , TRUE);
3013
3014
}
@@ -3206,6 +3207,7 @@ SCIP_RETCODE solveNodeLP(
3206
3207
SCIP_Bool initiallpsolved , /**< was the initial LP already solved? */
3207
3208
SCIP_Bool fullseparation , /**< are we in the first prop-and-cut-and-price loop? */
3208
3209
SCIP_Bool newinitconss , /**< do we have to add new initial constraints? */
3210
+ SCIP_Bool forcedlpsolve , /**< would SCIP abort if the LP is not solved? */
3209
3211
SCIP_Bool * propagateagain , /**< pointer to store whether we want to propagate again */
3210
3212
SCIP_Bool * solverelaxagain , /**< pointer to store TRUE, if the external relaxators should be called again */
3211
3213
SCIP_Bool * cutoff , /**< pointer to store TRUE, if the node can be cut off */
@@ -3361,7 +3363,7 @@ SCIP_RETCODE solveNodeLP(
3361
3363
/* solve the LP with price-and-cut*/
3362
3364
SCIP_CALL ( priceAndCutLoop (blkmem , set , messagehdlr , stat , mem , transprob , origprob , primal , tree , reopt , lp ,
3363
3365
pricestore , sepastore , cutpool , delayedcutpool , branchcand , conflict , conflictstore , eventqueue ,
3364
- eventfilter , cliquetable , fullseparation , propagateagain , cutoff , unbounded , lperror , pricingaborted ) );
3366
+ eventfilter , cliquetable , fullseparation , forcedlpsolve , propagateagain , cutoff , unbounded , lperror , pricingaborted ) );
3365
3367
3366
3368
/* check if the problem was changed and the relaxation needs to be resolved */
3367
3369
if ( (transprob -> ncolvars != oldnpricedvars ) || (stat -> ninitconssadded != oldninitconssadded ) ||
@@ -3392,7 +3394,7 @@ SCIP_RETCODE solveNodeLP(
3392
3394
lp -> cutoffbound = SCIPlpiInfinity (SCIPlpGetLPI (lp ));
3393
3395
3394
3396
lp -> solved = FALSE;
3395
- SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , transprob , -1LL , FALSE, FALSE, FALSE, lperror ) );
3397
+ SCIP_CALL ( SCIPlpSolveAndEval (lp , set , messagehdlr , blkmem , stat , eventqueue , eventfilter , transprob , -1LL , FALSE, FALSE, FALSE, forcedlpsolve , lperror ) );
3396
3398
3397
3399
/* reinstall old cutoff bound */
3398
3400
lp -> cutoffbound = tmpcutoff ;
@@ -3954,7 +3956,7 @@ SCIP_RETCODE propAndSolve(
3954
3956
SCIP_Bool propagate , /**< should we propagate */
3955
3957
SCIP_Bool solvelp , /**< should we solve the lp */
3956
3958
SCIP_Bool solverelax , /**< should we solve the relaxation */
3957
- SCIP_Bool forcedlpsolve , /**< is there a need for a solve lp */
3959
+ SCIP_Bool forcedlpsolve , /**< would SCIP abort if the LP is not solved? */
3958
3960
SCIP_Bool initiallpsolved , /**< was the initial LP already solved? */
3959
3961
SCIP_Bool fullseparation , /**< are we in the first prop-and-cut-and-price loop? */
3960
3962
SCIP_Longint * afterlpproplps , /**< pointer to store the last LP count for which AFTERLP propagation was performed */
@@ -4170,7 +4172,7 @@ SCIP_RETCODE propAndSolve(
4170
4172
/* solve the node's LP */
4171
4173
SCIP_CALL ( solveNodeLP (blkmem , set , messagehdlr , stat , mem , origprob , transprob , primal , tree , reopt , lp , relaxation , pricestore ,
4172
4174
sepastore , cutpool , delayedcutpool , branchcand , conflict , conflictstore , eventqueue , eventfilter , cliquetable ,
4173
- initiallpsolved , fullseparation , newinitconss , propagateagain , solverelaxagain , cutoff , unbounded , lperror , pricingaborted ) );
4175
+ initiallpsolved , fullseparation , newinitconss , forcedlpsolve , propagateagain , solverelaxagain , cutoff , unbounded , lperror , pricingaborted ) );
4174
4176
4175
4177
if ( focusnode -> parent == NULL )
4176
4178
{
0 commit comments