Skip to content

Commit c4d9a95

Browse files
committed
Merge remote-tracking branch 'origin/v9-minor'
2 parents d23dfad + 295f508 commit c4d9a95

File tree

9 files changed

+47
-114
lines changed

9 files changed

+47
-114
lines changed

CHANGELOG

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ Interface changes
149149
### Changed parameters
150150

151151
- presolving/milp/threads only configurable if PaPILO is built with TBB
152+
- numerics/recomputefac gets default value 1e+6 to aim at relative epsilon precision
152153

153154
### Data structures
154155

check/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -475,6 +475,7 @@ set(pairs_Issue
475475
"instances/Issue/3047.lp\;20000\;dualinfer"
476476
"instances/Issue/3132.lp\;0\;default"
477477
"instances/Issue/3499.lp\;11460\;closeobj"
478+
"instances/Issue/3556.cip\;57138036.9442457\;default"
478479
"instances/Issue/3589.cip\;-1\;default"
479480
"instances/Issue/3607.cip\;1\;default"
480481
"instances/Issue/3610.cip\;0\;default"
File renamed without changes.

src/scip/def.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@
177177
#define SCIP_DEFAULT_BOUNDSTREPS 0.05 /**< default minimal relative improve for strengthening bounds */
178178
#define SCIP_DEFAULT_PSEUDOCOSTEPS 1e-01 /**< default minimal variable distance value to use for pseudo cost updates */
179179
#define SCIP_DEFAULT_PSEUDOCOSTDELTA 1e-04 /**< default minimal objective distance value to use for pseudo cost updates */
180-
#define SCIP_DEFAULT_RECOMPFAC 1e+07 /**< default minimal decrease factor that causes the recomputation of a value (e.g., pseudo objective) instead of an update */
180+
#define SCIP_DEFAULT_RECOMPFAC 1e+06 /**< default minimal decrease factor that causes the recomputation of a value (e.g., pseudo objective) instead of an update */
181181
#define SCIP_DEFAULT_HUGEVAL 1e+15 /**< values larger than this are considered huge and should be handled separately (e.g., in activity computation) */
182182
#define SCIP_MAXEPSILON 1e-03 /**< maximum value for any numerical epsilon */
183183
#define SCIP_MINEPSILON 1e-20 /**< minimum value for any numerical epsilon */

src/scip/prop_pseudoobj.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1820,7 +1820,7 @@ SCIP_RETCODE propdataInit(
18201820
propdata->glbpropagated = FALSE;
18211821
propdata->glbpseudoobjval = SCIPgetGlobalPseudoObjval(scip);
18221822
propdata->cutoffbound = SCIPgetCutoffbound(scip);
1823-
assert(SCIPgetDepth(scip) > 0 || SCIPisFeasEQ(scip, propdata->glbpseudoobjval, SCIPgetPseudoObjval(scip)));
1823+
assert(SCIPgetDepth(scip) > 0 || SCIPisRelEQ(scip, propdata->glbpseudoobjval, SCIPgetPseudoObjval(scip)));
18241824

18251825
/* create hash table which is used for resolving bound changes */
18261826
if( nminactvars > 0 )
@@ -2430,11 +2430,11 @@ SCIP_RETCODE propagateCutoffboundBinvar(
24302430
/* if the lbobjchg and ubobjchg are both able to fix the variable to its upper (1.0) or lower (0.0) bound,
24312431
* respectively, we detected an cutoff
24322432
*
2433-
* @note There is no need to use SCIPisFeasLT() in case the objective is integral since the cutoff bound in that case
2433+
* @note There is no need to use SCIPisLT() in case the objective is integral since the cutoff bound in that case
24342434
* is the upper bound minus 1 plus the SCIPcutoffbounddelta() (which is MIN(100.0 * feastol, 0.0001)). However,
24352435
* if the objective is not integral we have to check w.r.t. an epsilon to avoid numerical problems.
24362436
*/
2437-
if( SCIPisFeasLT(scip, cutoffbound, pseudoobjval + ubobjchg) && SCIPisFeasLT(scip, cutoffbound, pseudoobjval + lbobjchg) )
2437+
if( SCIPisLT(scip, cutoffbound, pseudoobjval + ubobjchg) && SCIPisLT(scip, cutoffbound, pseudoobjval + lbobjchg) )
24382438
{
24392439
/* check if conflict analysis is applicable */
24402440
if( local && SCIPisConflictAnalysisApplicable(scip) )

src/scip/solve.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -378,7 +378,7 @@ SCIP_RETCODE SCIPprimalHeuristics(
378378
/* if the new solution cuts off the current node due to a new primal solution (via the cutoff bound) interrupt
379379
* calling the remaining heuristics
380380
*/
381-
if( (result == SCIP_FOUNDSOL && lowerbound > primal->cutoffbound) || SCIPsolveIsStopped(set, stat, FALSE) )
381+
if( SCIPsolveIsStopped(set, stat, FALSE) || ( result == SCIP_FOUNDSOL && SCIPsetIsGE(set, lowerbound, primal->cutoffbound) ) )
382382
break;
383383

384384
/* check if the problem is proven to be unbounded, currently this happens only in reoptimization */
@@ -3114,7 +3114,7 @@ SCIP_RETCODE applyBounding(
31143114
|| (!set->misc_exactsolve && SCIPsetIsGE(set, SCIPnodeGetLowerbound(focusnode), primal->cutoffbound)) )
31153115
{
31163116
/* call pseudo conflict analysis, if the node is cut off due to the pseudo objective value */
3117-
if( pseudoobjval >= primal->cutoffbound && !SCIPsetIsInfinity(set, primal->cutoffbound) && !SCIPsetIsInfinity(set, -pseudoobjval) )
3117+
if( !SCIPsetIsInfinity(set, -pseudoobjval) && !SCIPsetIsInfinity(set, primal->cutoffbound) && SCIPsetIsGE(set, pseudoobjval, primal->cutoffbound) )
31183118
{
31193119
SCIP_CALL( SCIPconflictAnalyzePseudo(conflict, blkmem, set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue, cliquetable, NULL) );
31203120
}
@@ -3588,7 +3588,7 @@ SCIP_RETCODE enforceConstraints(
35883588
else
35893589
{
35903590
pseudoobjval = SCIPlpGetPseudoObjval(lp, set, prob);
3591-
objinfeasible = SCIPsetIsFeasLT(set, pseudoobjval, SCIPnodeGetLowerbound(SCIPtreeGetFocusNode(tree)));
3591+
objinfeasible = SCIPsetIsDualfeasLT(set, pseudoobjval, SCIPnodeGetLowerbound(SCIPtreeGetFocusNode(tree)));
35923592
}
35933593

35943594
/* during constraint enforcement, generated cuts should enter the LP in any case; otherwise, a constraint handler
@@ -4871,7 +4871,7 @@ SCIP_RETCODE solveNode(
48714871
if( actdepth == 0 && !(*cutoff) && !(*unbounded) && !(*postpone) )
48724872
{
48734873
/* the root pseudo objective value and pseudo objective value should be equal in the root node */
4874-
assert(SCIPsetIsFeasEQ(set, SCIPlpGetGlobalPseudoObjval(lp, set, transprob), SCIPlpGetPseudoObjval(lp, set, transprob)));
4874+
assert(SCIPsetIsRelEQ(set, SCIPlpGetGlobalPseudoObjval(lp, set, transprob), SCIPlpGetPseudoObjval(lp, set, transprob)));
48754875

48764876
SCIPprobStoreRootSol(transprob, set, stat, lp, SCIPtreeHasFocusNodeLP(tree));
48774877
}

tests/src/bugs/varboundnumerics.c

Lines changed: 0 additions & 67 deletions
This file was deleted.

0 commit comments

Comments
 (0)