Skip to content

Commit e383b98

Browse files
committed
Merge remote-tracking branch 'origin/v92-bugfix' into v9-minor
2 parents b807e20 + ab989ce commit e383b98

File tree

7 files changed

+85
-21
lines changed

7 files changed

+85
-21
lines changed

CHANGELOG

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ Fixed bugs
5050

5151
- avoid hashmap key error in removal of doubletons and singletons in dual presolve of setppc constraints by skipping tripleton locks
5252
- when upgrading to xor constraint require parity variable to be enforced integral
53+
- provide the depth of the applied effective root with SCIPtreeGetEffectiveRootDepth() to avert invalid globalization of constraint set changes
5354

5455
Build system
5556
------------

check/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,7 @@ set(pairs_Issue
510510
# Test currently not working since problems with the relative check for presolved problems appear: https://git.zib.de/integer/scip/-/issues/3819
511511
# "instances/Issue/3842.cip\;-16812.7692740365\;default"
512512
"instances/Issue/3870.cip\;5133546551065818\;default"
513+
"instances/Issue/3908.cip\;-20317.1313131313\;subrestart"
513514
)
514515

515516
#
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
presolving/subrestartfac = 0.1

check/instances/Issue/3908.cip

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
STATISTICS
2+
Problem name : seed
3+
Variables : 6 (0 binary, 5 integer, 0 implicit integer, 1 continuous)
4+
Constraints : 0 initial, 42 maximal
5+
OBJECTIVE
6+
Sense : minimize
7+
VARIABLES
8+
[integer] <x0>: obj=-23, original bounds=[-200,200]
9+
[integer] <x2>: obj=-63, original bounds=[-200,200]
10+
[integer] <x3>: obj=-76, original bounds=[-200,200]
11+
[integer] <x4>: obj=62, original bounds=[-200,200]
12+
[integer] <x5>: obj=-73, original bounds=[-200,200]
13+
[continuous] <x1>: obj=41, original bounds=[-200,200]
14+
CONSTRAINTS
15+
[linear] <_C1>: +53<x0>[I] -65<x2>[I] +5<x3>[I] -96<x4>[I] +9<x5>[I] -65<x1>[C] <= 671;
16+
[linear] <_C10>: -14<x0>[I] +92<x2>[I] +5<x3>[I] +55<x4>[I] -22<x5>[I] -46<x1>[C] >= -2297;
17+
[linear] <_C11>: -97<x0>[I] +28<x2>[I] -52<x3>[I] +39<x4>[I] -52<x5>[I] -22<x1>[C] >= -1771;
18+
[linear] <_C18>: +14<x0>[I] -80<x2>[I] -58<x3>[I] +18<x4>[I] +65<x5>[I] -<x1>[C] <= 4319;
19+
[linear] <_C19>: +2<x0>[I] +17<x2>[I] +81<x3>[I] +42<x4>[I] -48<x5>[I] -47<x1>[C] >= 2100;
20+
[linear] <_C2>: -59.14<x0>[I] +16.78<x2>[I] -5.71<x3>[I] -60.15<x4>[I] +53.86<x5>[I] +77.63<x1>[C] <= 1507.5;
21+
[linear] <_C20>: -94<x0>[I] +24<x2>[I] -24<x3>[I] -15<x4>[I] -27<x5>[I] +22<x1>[C] <= 4326;
22+
[linear] <_C21>: -48<x0>[I] -54<x2>[I] -58<x3>[I] +33<x4>[I] +52<x5>[I] -98<x1>[C] >= 4281;
23+
[linear] <_C22>: -85<x0>[I] +94<x2>[I] -<x3>[I] -22<x4>[I] -38<x5>[I] -8<x1>[C] >= 1169;
24+
[linear] <_C25>: +51<x0>[I] -95<x2>[I] +89<x3>[I] -48<x4>[I] +8<x5>[I] -83<x1>[C] >= -1788;
25+
[linear] <_C26>: +28<x0>[I] +76<x2>[I] +86<x3>[I] +66<x4>[I] -33<x5>[I] -43<x1>[C] >= -2298;
26+
[linear] <_C27>: +50<x0>[I] -16<x2>[I] +84<x3>[I] -29<x4>[I] -14<x5>[I] -81<x1>[C] >= -4523;
27+
[linear] <_C28>: -84<x0>[I] -18<x2>[I] -87<x3>[I] -72<x4>[I] -58<x5>[I] -70<x1>[C] <= 2214;
28+
[linear] <_C3>: +75<x0>[I] -95<x2>[I] +61<x3>[I] +89<x4>[I] +31<x5>[I] -99<x1>[C] >= 1563;
29+
[linear] <_C31>: +5<x0>[I] +17<x2>[I] -19<x3>[I] +61<x4>[I] +46<x5>[I] +34<x1>[C] >= -193;
30+
[linear] <_C36>: +3.17<x0>[I] +76.9<x2>[I] -21.63<x3>[I] +64.88<x4>[I] -32.86<x5>[I] +1.42<x1>[C] <= 4377.36;
31+
[linear] <_C38>: -19<x0>[I] -76<x2>[I] -74<x3>[I] +27<x4>[I] +68<x5>[I] +29<x1>[C] <= -3025;
32+
[linear] <_C39>: -2<x0>[I] -16<x2>[I] +15<x3>[I] -87<x4>[I] -60<x5>[I] -99<x1>[C] <= 2000;
33+
[linear] <_C40>: -17<x0>[I] -50<x2>[I] -6<x3>[I] +44<x4>[I] -72<x5>[I] +99<x1>[C] <= -1668;
34+
[linear] <_C42>: -59<x0>[I] -77<x2>[I] -23<x3>[I] +22<x4>[I] -37<x5>[I] +42<x1>[C] <= 4656;
35+
[linear] <_C44>: -60<x0>[I] -73<x2>[I] -79<x3>[I] -29<x4>[I] +85<x5>[I] +15<x1>[C] >= -864;
36+
[linear] <_C45>: +41<x0>[I] +4<x2>[I] -25<x3>[I] -51<x4>[I] -7<x5>[I] -48<x1>[C] <= 4357;
37+
[linear] <_C46>: +23<x0>[I] +40<x2>[I] +88<x3>[I] -46<x4>[I] +64<x5>[I] -17<x1>[C] >= -1656;
38+
[linear] <_C48>: -73<x0>[I] -24<x2>[I] -79<x3>[I] +77<x4>[I] +8<x5>[I] -93<x1>[C] >= 4033;
39+
[linear] <_C49>: +7<x0>[I] -3<x2>[I] +40<x3>[I] +42<x4>[I] +19<x5>[I] -52<x1>[C] >= 242;
40+
[linear] <_C54>: -47<x0>[I] +2<x2>[I] -7<x3>[I] +21<x4>[I] -29<x5>[I] +23<x1>[C] >= -2872;
41+
[linear] <_C59>: +51<x0>[I] +35<x2>[I] +53<x3>[I] -59<x4>[I] -75<x5>[I] +30<x1>[C] <= 4948;
42+
[linear] <_C6>: +17<x0>[I] +39<x2>[I] +92<x3>[I] +5<x4>[I] +30<x5>[I] +99<x1>[C] <= 3558;
43+
[linear] <_C60>: -55<x0>[I] -59<x2>[I] +26<x3>[I] +45<x4>[I] -31<x5>[I] -78<x1>[C] >= -2445;
44+
[linear] <_C61>: -77.7<x0>[I] +42.84<x2>[I] -71.46<x3>[I] +78.97<x4>[I] -24.19<x5>[I] +84.25<x1>[C] >= -3596.23;
45+
[linear] <_C62>: -53.11<x0>[I] +65.29<x2>[I] +88.24<x3>[I] -70.8<x4>[I] -7.2<x5>[I] +67.64<x1>[C] <= 3973.31;
46+
[linear] <_C63>: +41<x0>[I] -4<x2>[I] +30<x3>[I] +55<x4>[I] -43<x5>[I] +31<x1>[C] <= 1568;
47+
[linear] <_C67>: +92<x0>[I] +25<x2>[I] +83<x3>[I] -91<x4>[I] +3<x5>[I] +10<x1>[C] <= 4398;
48+
[linear] <_C7>: +85<x0>[I] -13<x2>[I] +14<x3>[I] -15<x4>[I] +35<x5>[I] -12<x1>[C] <= 2235;
49+
[linear] <_C70>: -7<x0>[I] +30<x2>[I] -41<x3>[I] +49<x4>[I] +74<x5>[I] +79<x1>[C] >= -1188;
50+
[linear] <_C72>: -48<x0>[I] +78<x2>[I] -28<x3>[I] +84<x4>[I] -57<x5>[I] +23<x1>[C] >= -1429;
51+
[linear] <_C73>: -33<x0>[I] +57<x2>[I] -4<x3>[I] -96<x4>[I] -95<x5>[I] +55<x1>[C] <= -997;
52+
[linear] <_C74>: -65.7<x0>[I] -44.11<x2>[I] -84.74<x3>[I] +99.83<x4>[I] +98.48<x5>[I] +61.29<x1>[C] <= 4254.62;
53+
[linear] <_C79>: -42<x0>[I] +51<x2>[I] -82<x3>[I] +68<x4>[I] -6<x5>[I] +87<x1>[C] <= 412;
54+
[linear] <_C80>: +4<x0>[I] +36<x2>[I] +88<x3>[I] -89<x4>[I] -86<x5>[I] +52<x1>[C] <= -505;
55+
[linear] <_C81>: -39<x0>[I] +29<x2>[I] -77<x3>[I] -67<x4>[I] -80<x5>[I] +19<x1>[C] <= 2859;
56+
[linear] <_C9>: -48<x0>[I] -13<x2>[I] -27<x3>[I] +79<x4>[I] -<x5>[I] -26<x1>[C] >= 4684;
57+
END

check/rungamscluster.sh

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,12 +88,16 @@ then
8888
else
8989
GAMSOPTS="${GAMSOPTS} optdir=${OPTDIR} optfile=1"
9090
fi
91-
echo "scaled yes" >> "${OPTDIR}/examiner2.opt"
91+
echo "scaled no" >> "${OPTDIR}/examiner2.opt"
9292
echo "unscaled yes" >> "${OPTDIR}/examiner2.opt"
9393
echo "examinesolupoint yes" >> "${OPTDIR}/examiner2.opt"
94-
echo "examinesolvpoint yes" >> "${OPTDIR}/examiner2.opt"
94+
echo "examinesolvpoint no" >> "${OPTDIR}/examiner2.opt"
9595
echo "examinegamspoint no" >> "${OPTDIR}/examiner2.opt"
9696
echo "examineinitpoint no" >> "${OPTDIR}/examiner2.opt"
97+
echo "fcheckdcon off" >> "${OPTDIR}/examiner2.opt"
98+
echo "fcheckdcmp off" >> "${OPTDIR}/examiner2.opt"
99+
echo "fcheckdvar off" >> "${OPTDIR}/examiner2.opt"
100+
echo "fcheckpcmp off" >> "${OPTDIR}/examiner2.opt"
97101
echo "trace ${EXMFILE}" >> "${OPTDIR}/examiner2.opt"
98102
echo "tracestyle 1" >> "${OPTDIR}/examiner2.opt"
99103

src/scip/struct_tree.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -225,8 +225,8 @@ struct SCIP_Tree
225225
int nsiblings; /**< number of siblings of focus node (number of used slots in siblings vector) */
226226
int pathlen; /**< length of the current path */
227227
int pathsize; /**< number of available slots in path arrays */
228-
int effectiverootdepth; /**< first depth with node with at least two children */
229-
int appliedeffectiverootdepth; /**< the effective root depth which was already enforced (that is constraint and bound changes were made global) */
228+
int effectiverootdepth; /**< the effective root depth which was already enforced */
229+
int updatedeffectiverootdepth; /**< first depth of node with at least two children or focus node */
230230
int correctlpdepth; /**< depth to which current LP data corresponds to LP data of active path */
231231
int cutoffdepth; /**< depth of first node in active path that is marked being cutoff */
232232
int repropdepth; /**< depth of first node in active path that has to be propagated again */

src/scip/tree.c

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -945,11 +945,11 @@ SCIP_RETCODE nodeReleaseParent(
945945
SCIP_Bool singleChild = FALSE;
946946
int focusdepth = SCIPtreeGetFocusDepth(tree);
947947

948-
assert(tree->effectiverootdepth >= 0);
948+
assert(tree->updatedeffectiverootdepth >= 0);
949949

950-
while( tree->effectiverootdepth < focusdepth )
950+
while( tree->updatedeffectiverootdepth < focusdepth )
951951
{
952-
SCIP_NODE* effectiveroot = tree->path[tree->effectiverootdepth];
952+
SCIP_NODE* effectiveroot = tree->path[tree->updatedeffectiverootdepth];
953953

954954
switch( SCIPnodeGetType(effectiveroot) )
955955
{
@@ -994,14 +994,14 @@ SCIP_RETCODE nodeReleaseParent(
994994
if( !singleChild )
995995
break;
996996

997-
++tree->effectiverootdepth;
997+
++tree->updatedeffectiverootdepth;
998998

999999
SCIPsetDebugMsg(set,
10001000
"unlinked node #%" SCIP_LONGINT_FORMAT " in depth %d -> new effective root depth: %d\n",
1001-
SCIPnodeGetNumber(node), SCIPnodeGetDepth(node), tree->effectiverootdepth);
1001+
SCIPnodeGetNumber(node), SCIPnodeGetDepth(node), tree->updatedeffectiverootdepth);
10021002
}
10031003

1004-
assert(!singleChild || SCIPtreeGetEffectiveRootDepth(tree) == SCIPtreeGetFocusDepth(tree));
1004+
assert(!singleChild || tree->updatedeffectiverootdepth == SCIPtreeGetFocusDepth(tree));
10051005
}
10061006
}
10071007

@@ -3114,7 +3114,7 @@ SCIP_RETCODE treeSwitchPath(
31143114
SCIP_Bool* cutoff /**< pointer to store whether the new focus node can be cut off */
31153115
)
31163116
{
3117-
int newappliedeffectiverootdepth;
3117+
int neweffectiverootdepth;
31183118
int forklen; /* length of the path to subroot/fork/pseudofork/junction node, or 0 if no fork */
31193119
int focusnodedepth; /* depth of the new focus node, or -1 if focusnode == NULL */
31203120
int i;
@@ -3204,41 +3204,41 @@ SCIP_RETCODE treeSwitchPath(
32043204

32053205
if( freeNode )
32063206
{
3207-
assert(tree->appliedeffectiverootdepth <= tree->effectiverootdepth);
3207+
assert(tree->effectiverootdepth <= tree->updatedeffectiverootdepth);
32083208
SCIP_CALL( SCIPnodeFree(&oldfocusnode, blkmem, set, stat, eventfilter, eventqueue, tree, lp) );
3209-
assert(tree->effectiverootdepth <= focusnodedepth || tree->focusnode == NULL);
3209+
assert(tree->updatedeffectiverootdepth <= focusnodedepth || tree->focusnode == NULL);
32103210
}
32113211
}
32123212

32133213
/* apply effective root shift up to the new focus node */
32143214
*cutoff = FALSE;
3215-
newappliedeffectiverootdepth = MIN(tree->effectiverootdepth, focusnodedepth);
3215+
neweffectiverootdepth = MIN(tree->updatedeffectiverootdepth, focusnodedepth);
32163216

32173217
/* promote the constraint set and bound changes up to the new effective root to be global changes */
3218-
if( tree->appliedeffectiverootdepth < newappliedeffectiverootdepth )
3218+
if( tree->effectiverootdepth < neweffectiverootdepth )
32193219
{
32203220
SCIPsetDebugMsg(set,
32213221
"shift effective root from depth %d to %d: applying constraint set and bound changes to global problem\n",
3222-
tree->appliedeffectiverootdepth, newappliedeffectiverootdepth);
3222+
tree->effectiverootdepth, neweffectiverootdepth);
32233223

32243224
/* at first globalize constraint changes to update constraint handlers before changing bounds */
3225-
for( i = tree->appliedeffectiverootdepth + 1; i <= newappliedeffectiverootdepth; ++i )
3225+
for( i = tree->effectiverootdepth + 1; i <= neweffectiverootdepth; ++i )
32263226
{
32273227
SCIPsetDebugMsg(set, " -> applying constraint set changes of depth %d\n", i);
32283228

32293229
SCIP_CALL( SCIPconssetchgMakeGlobal(&tree->path[i]->conssetchg, blkmem, set, stat, transprob, reopt) );
32303230
}
32313231

32323232
/* at last globalize bound changes triggering delayed events processed after the path switch */
3233-
for( i = tree->appliedeffectiverootdepth + 1; i <= newappliedeffectiverootdepth && !(*cutoff); ++i )
3233+
for( i = tree->effectiverootdepth + 1; i <= neweffectiverootdepth && !(*cutoff); ++i )
32343234
{
32353235
SCIPsetDebugMsg(set, " -> applying bound changes of depth %d\n", i);
32363236

32373237
SCIP_CALL( SCIPdomchgApplyGlobal(tree->path[i]->domchg, blkmem, set, stat, lp, branchcand, eventqueue, cliquetable, cutoff) );
32383238
}
32393239

32403240
/* update applied effective root depth */
3241-
tree->appliedeffectiverootdepth = newappliedeffectiverootdepth;
3241+
tree->effectiverootdepth = neweffectiverootdepth;
32423242
}
32433243

32443244
/* fork might be cut off when applying the pending bound changes */
@@ -4916,7 +4916,7 @@ SCIP_RETCODE SCIPtreeCreate(
49164916
(*tree)->pathlen = 0;
49174917
(*tree)->pathsize = 0;
49184918
(*tree)->effectiverootdepth = 0;
4919-
(*tree)->appliedeffectiverootdepth = 0;
4919+
(*tree)->updatedeffectiverootdepth = 0;
49204920
(*tree)->lastbranchparentid = -1L;
49214921
(*tree)->correctlpdepth = -1;
49224922
(*tree)->cutoffdepth = INT_MAX;
@@ -5033,7 +5033,7 @@ SCIP_RETCODE SCIPtreeClear(
50335033
tree->nsiblings = 0;
50345034
tree->pathlen = 0;
50355035
tree->effectiverootdepth = 0;
5036-
tree->appliedeffectiverootdepth = 0;
5036+
tree->updatedeffectiverootdepth = 0;
50375037
tree->correctlpdepth = -1;
50385038
tree->cutoffdepth = INT_MAX;
50395039
tree->repropdepth = INT_MAX;

0 commit comments

Comments
 (0)