@@ -169,7 +169,8 @@ double HighsLpRelaxation::slackUpper(HighsInt row,
169169 return kHighsInf ;
170170}
171171
172- HighsLpRelaxation::HighsLpRelaxation (const HighsMipSolver& mipsolver)
172+ HighsLpRelaxation::HighsLpRelaxation (const HighsMipSolver& mipsolver,
173+ HighsInt index)
173174 : mipsolver(mipsolver) {
174175 lpsolver.setOptionValue (" output_flag" , false );
175176 lpsolver.setOptionValue (" random_seed" , mipsolver.options_mip_ ->random_seed );
@@ -189,9 +190,11 @@ HighsLpRelaxation::HighsLpRelaxation(const HighsMipSolver& mipsolver)
189190 currentbasisstored = false ;
190191 adjustSymBranchingCol = true ;
191192 row_ep.size = 0 ;
193+ index_ = index;
192194}
193195
194- HighsLpRelaxation::HighsLpRelaxation (const HighsLpRelaxation& other)
196+ HighsLpRelaxation::HighsLpRelaxation (const HighsLpRelaxation& other,
197+ HighsInt index)
195198 : mipsolver(other.mipsolver),
196199 lprows(other.lprows),
197200 fractionalints(other.fractionalints),
@@ -214,6 +217,7 @@ HighsLpRelaxation::HighsLpRelaxation(const HighsLpRelaxation& other)
214217 lastAgeCall = 0 ;
215218 objective = -kHighsInf ;
216219 row_ep.size = 0 ;
220+ index_ = index;
217221}
218222
219223void HighsLpRelaxation::loadModel () {
@@ -927,7 +931,8 @@ void HighsLpRelaxation::storeDualInfProof() {
927931 for (HighsInt j = 0 ; j < len; ++j) row_ap.add (inds[j], weight * vals[j]);
928932 }
929933
930- const HighsDomain& globaldomain = mipsolver.mipdata_ ->domain ;
934+ assert (index_ <= mipsolver.mipdata_ ->domains .size () - 1 );
935+ const HighsDomain& globaldomain = mipsolver.mipdata_ ->domains [index_];
931936
932937 for (HighsInt i : row_ap.getNonzeros ()) {
933938 double val = row_ap.getValue (i);
@@ -972,7 +977,7 @@ void HighsLpRelaxation::storeDualInfProof() {
972977 }
973978
974979 dualproofrhs = double (upper);
975- mipsolver.mipdata_ ->domain .tightenCoefficients (
980+ mipsolver.mipdata_ ->domains [index_] .tightenCoefficients (
976981 dualproofinds.data (), dualproofvals.data (), dualproofinds.size (),
977982 dualproofrhs);
978983
@@ -993,12 +998,14 @@ void HighsLpRelaxation::storeDualUBProof() {
993998 dualproofinds.clear ();
994999 dualproofvals.clear ();
9951000
996- if (lpsolver.getSolution ().dual_valid )
997- hasdualproof = computeDualProof (mipsolver.mipdata_ ->domain ,
1001+ if (lpsolver.getSolution ().dual_valid ) {
1002+ assert (index_ <= mipsolver.mipdata_ ->domains .size () - 1 );
1003+ hasdualproof = computeDualProof (mipsolver.mipdata_ ->domains [index_],
9981004 mipsolver.mipdata_ ->upper_limit ,
9991005 dualproofinds, dualproofvals, dualproofrhs);
1000- else
1006+ } else {
10011007 hasdualproof = false ;
1008+ }
10021009
10031010 if (!hasdualproof) dualproofrhs = kHighsInf ;
10041011}
@@ -1330,8 +1337,11 @@ HighsLpRelaxation::Status HighsLpRelaxation::resolveLp(HighsDomain* domain) {
13301337 if (lpsolver.getBasis ().col_status [i] == HighsBasisStatus::kBasic )
13311338 continue ;
13321339
1333- const double glb = mipsolver.mipdata_ ->domain .col_lower_ [i];
1334- const double gub = mipsolver.mipdata_ ->domain .col_upper_ [i];
1340+ assert (index_ <= mipsolver.mipdata_ ->domains .size () - 1 );
1341+ const double glb =
1342+ mipsolver.mipdata_ ->domains [index_].col_lower_ [i];
1343+ const double gub =
1344+ mipsolver.mipdata_ ->domains [index_].col_upper_ [i];
13351345
13361346 if (std::min (gub - sol.col_value [i], sol.col_value [i] - glb) <=
13371347 mipsolver.mipdata_ ->feastol )
0 commit comments