@@ -694,11 +694,6 @@ void HighsMipSolverData::init() {
694694}
695695
696696void HighsMipSolverData::runPresolve (const HighsInt presolve_reduction_limit) {
697- #ifdef HIGHS_DEBUGSOL
698- bool debugSolActive = false ;
699- std::swap (debugSolution.debugSolActive , debugSolActive);
700- #endif
701-
702697 mipsolver.timer_ .start (mipsolver.timer_ .presolve_clock );
703698 presolve::HPresolve presolve;
704699 if (!presolve.okSetInput (mipsolver, presolve_reduction_limit)) {
@@ -709,13 +704,6 @@ void HighsMipSolverData::runPresolve(const HighsInt presolve_reduction_limit) {
709704 presolve_status = presolve.getPresolveStatus ();
710705 }
711706 mipsolver.timer_ .stop (mipsolver.timer_ .presolve_clock );
712-
713- #ifdef HIGHS_DEBUGSOL
714- debugSolution.debugSolActive = debugSolActive;
715- if (debugSolution.debugSolActive ) debugSolution.registerDomain (domain);
716- assert (!debugSolution.debugSolActive ||
717- checkSolution (debugSolution.debugSolution ));
718- #endif
719707}
720708
721709void HighsMipSolverData::runSetup () {
@@ -1022,10 +1010,18 @@ void HighsMipSolverData::runSetup() {
10221010 heuristics.setupIntCols ();
10231011
10241012#ifdef HIGHS_DEBUGSOL
1025- if (numRestarts == 0 ) {
1026- debugSolution.activate ();
1027- assert (!debugSolution.debugSolActive ||
1028- checkSolution (debugSolution.debugSolution ));
1013+ if (debugSolution.debugSolActive ) {
1014+ debugSolution.debugSolution .clear ();
1015+ debugSolution.debugSolution = postSolveStack.getReducedPrimalSolution (
1016+ debugSolution.debugOrigSolution );
1017+ debugSolution.debugSolObjective = 0 ;
1018+ HighsCDouble debugsolobj = 0.0 ;
1019+ for (HighsInt i = 0 ; i != mipsolver.model_ ->num_col_ ; ++i)
1020+ debugsolobj +=
1021+ mipsolver.colCost (i) * HighsCDouble (debugSolution.debugSolution [i]);
1022+ debugSolution.debugSolObjective = static_cast <double >(debugsolobj);
1023+ debugSolution.registerDomain (domain);
1024+ assert (checkSolution (debugSolution.debugSolution ));
10291025 }
10301026#endif
10311027
@@ -1218,6 +1214,10 @@ void HighsMipSolverData::performRestart() {
12181214 presolvedModel = lp.getLp ();
12191215 presolvedModel.offset_ = offset;
12201216 presolvedModel.integrality_ = std::move (integrality);
1217+ #ifdef HIGHS_DEBUGSOL
1218+ bool debugSolActive = false ;
1219+ std::swap (debugSolution.debugSolActive , debugSolActive);
1220+ #endif
12211221
12221222 const HighsBasis& basis = firstrootbasis;
12231223 if (basis.valid ) {
@@ -1321,6 +1321,9 @@ void HighsMipSolverData::performRestart() {
13211321 }
13221322 // Bounds are currently in the original space since presolve will have
13231323 // changed offset_
1324+ #ifdef HIGHS_DEBUGSOL
1325+ debugSolution.debugSolActive = debugSolActive;
1326+ #endif
13241327 runSetup ();
13251328
13261329 postSolveStack.removeCutsFromModel (numCuts);
0 commit comments