@@ -372,10 +372,9 @@ void HighsMipSolverData::finishAnalyticCenterComputation(
372372 }
373373 if (nfixed > 0 )
374374 highsLogDev (mipsolver.options_mip_ ->log_options , HighsLogType::kInfo ,
375- " Fixing %" HIGHSINT_FORMAT " columns (%" HIGHSINT_FORMAT
376- " integers) sitting at bound at "
375+ " Fixing %d columns (%d integers) sitting at bound at "
377376 " analytic center\n " ,
378- nfixed, nintfixed);
377+ int ( nfixed), int ( nintfixed) );
379378 mipsolver.mipdata_ ->domain .propagate ();
380379 if (mipsolver.mipdata_ ->domain .infeasible ()) return ;
381380 }
@@ -406,34 +405,33 @@ void HighsMipSolverData::finishSymmetryDetection(
406405 taskGroup.sync ();
407406
408407 symmetries = std::move (symData->symmetries );
408+ std::string symmetry_time =
409+ mipsolver.options_mip_ ->timeless_log
410+ ? " "
411+ : highsFormatToString (" %.1fs" , symData->detectionTime );
409412 highsLogUser (mipsolver.options_mip_ ->log_options , HighsLogType::kInfo ,
410- " \n Symmetry detection completed in %.1fs\n " ,
411- symData->detectionTime );
413+ " \n Symmetry detection completed in%s\n " , symmetry_time.c_str ());
412414
413415 if (symmetries.numGenerators == 0 ) {
414416 detectSymmetries = false ;
415417 highsLogUser (mipsolver.options_mip_ ->log_options , HighsLogType::kInfo ,
416418 " No symmetry present\n\n " );
417419 } else if (symmetries.orbitopes .size () == 0 ) {
418420 highsLogUser (mipsolver.options_mip_ ->log_options , HighsLogType::kInfo ,
419- " Found %" HIGHSINT_FORMAT " generator(s)\n\n " ,
420- symmetries.numGenerators );
421+ " Found %d generator(s)\n\n " , int (symmetries.numGenerators ));
421422
422423 } else {
423424 if (symmetries.numPerms != 0 ) {
424- highsLogUser (
425- mipsolver.options_mip_ ->log_options , HighsLogType::kInfo ,
426- " Found %" HIGHSINT_FORMAT " generator(s) and %" HIGHSINT_FORMAT
427- " full orbitope(s) acting on %" HIGHSINT_FORMAT " columns\n\n " ,
428- symmetries.numPerms , (HighsInt)symmetries.orbitopes .size (),
429- (HighsInt)symmetries.columnToOrbitope .size ());
425+ highsLogUser (mipsolver.options_mip_ ->log_options , HighsLogType::kInfo ,
426+ " Found %d generator(s) and %d full orbitope(s) acting on %d "
427+ " columns\n\n " ,
428+ int (symmetries.numPerms ), int (symmetries.orbitopes .size ()),
429+ int (symmetries.columnToOrbitope .size ()));
430430 } else {
431431 highsLogUser (mipsolver.options_mip_ ->log_options , HighsLogType::kInfo ,
432- " Found %" HIGHSINT_FORMAT
433- " full orbitope(s) acting on %" HIGHSINT_FORMAT
434- " columns\n\n " ,
435- (HighsInt)symmetries.orbitopes .size (),
436- (HighsInt)symmetries.columnToOrbitope .size ());
432+ " Found %d full orbitope(s) acting on %d columns\n\n " ,
433+ int (symmetries.orbitopes .size ()),
434+ int (symmetries.columnToOrbitope .size ()));
437435 }
438436 }
439437 symData.reset ();
@@ -678,6 +676,7 @@ void HighsMipSolverData::runSetup() {
678676 const HighsLp& model = *mipsolver.model_ ;
679677
680678 last_disptime = -kHighsInf ;
679+ disptime = 0 ;
681680
682681 // Transform the reference of the objective limit and lower/upper
683682 // bounds from the original model to the current model, undoing the
@@ -1598,21 +1597,26 @@ void HighsMipSolverData::printDisplayLine(const int solution_source) {
15981597 bool output_flag = *mipsolver.options_mip_ ->log_options .output_flag ;
15991598 if (!output_flag) return ;
16001599
1601- double time = mipsolver.timer_ .read ();
1600+ bool timeless_log = mipsolver.options_mip_ ->timeless_log ;
1601+ disptime = timeless_log ? disptime + 1 : mipsolver.timer_ .read ();
16021602 if (solution_source == kSolutionSourceNone &&
1603- time - last_disptime < mipsolver.options_mip_ ->mip_min_logging_interval )
1603+ disptime - last_disptime <
1604+ mipsolver.options_mip_ ->mip_min_logging_interval )
16041605 return ;
1605- last_disptime = time;
1606+ last_disptime = disptime;
1607+ std::string time_string =
1608+ timeless_log ? " " : highsFormatToString (" %7.1fs" , disptime);
16061609
16071610 if (num_disp_lines % 20 == 0 ) {
16081611 if (num_disp_lines == 0 ) printSolutionSourceKey ();
1609- highsLogUser (
1610- mipsolver.options_mip_ ->log_options , HighsLogType::kInfo ,
1611- // clang-format off
1612- " \n Nodes | B&B Tree | Objective Bounds | Dynamic Constraints | Work \n "
1613- " Src Proc. InQueue | Leaves Expl. | BestBound BestSol Gap | Cuts InLp Confl. | LpIters Time\n\n "
1614- // clang-format on
1615- );
1612+ std::string work_string0 = timeless_log ? " Work" : " Work " ;
1613+ std::string work_string1 = timeless_log ? " LpIters" : " LpIters Time" ;
1614+ highsLogUser (mipsolver.options_mip_ ->log_options , HighsLogType::kInfo ,
1615+ // clang-format off
1616+ " \n Nodes | B&B Tree | Objective Bounds | Dynamic Constraints | %s\n "
1617+ " Src Proc. InQueue | Leaves Expl. | BestBound BestSol Gap | Cuts InLp Confl. | %s\n\n " ,
1618+ // clang-format on
1619+ work_string0.c_str (), work_string1.c_str ());
16161620
16171621 // " %7s | %10s | %10s | %10s | %10s | %-15s | %-15s | %7s | %7s "
16181622 // "| %8s | %8s\n",
@@ -1656,13 +1660,13 @@ void HighsMipSolverData::printDisplayLine(const int solution_source) {
16561660 highsLogUser (
16571661 mipsolver.options_mip_ ->log_options , HighsLogType::kInfo ,
16581662 // clang-format off
1659- " %s %7s %7s %7s %6.2f%% %-15s %-15s %8s %6" HIGHSINT_FORMAT " %6" HIGHSINT_FORMAT " %6" HIGHSINT_FORMAT " %7s %7.1fs \n " ,
1663+ " %s %7s %7s %7s %6.2f%% %-15s %-15s %8s %6" HIGHSINT_FORMAT " %6" HIGHSINT_FORMAT " %6" HIGHSINT_FORMAT " %7s%s \n " ,
16601664 // clang-format on
16611665 solutionSourceToString (solution_source).c_str (), print_nodes.data (),
16621666 queue_nodes.data (), print_leaves.data (), explored, lb_string.data (),
16631667 ub_string.data (), gap_string.data (), cutpool.getNumCuts (),
16641668 lp.numRows () - lp.getNumModelRows (), conflictPool.getNumConflicts (),
1665- print_lp_iters.data (), time );
1669+ print_lp_iters.data (), time_string. c_str () );
16661670 } else {
16671671 std::array<char , 22 > ub_string;
16681672 if (mipsolver.options_mip_ ->objective_bound < ub) {
@@ -1677,13 +1681,13 @@ void HighsMipSolverData::printDisplayLine(const int solution_source) {
16771681 highsLogUser (
16781682 mipsolver.options_mip_ ->log_options , HighsLogType::kInfo ,
16791683 // clang-format off
1680- " %s %7s %7s %7s %6.2f%% %-15s %-15s %8.2f %6" HIGHSINT_FORMAT " %6" HIGHSINT_FORMAT " %6" HIGHSINT_FORMAT " %7s %7.1fs \n " ,
1684+ " %s %7s %7s %7s %6.2f%% %-15s %-15s %8.2f %6" HIGHSINT_FORMAT " %6" HIGHSINT_FORMAT " %6" HIGHSINT_FORMAT " %7s%s \n " ,
16811685 // clang-format on
16821686 solutionSourceToString (solution_source).c_str (), print_nodes.data (),
16831687 queue_nodes.data (), print_leaves.data (), explored, lb_string.data (),
16841688 ub_string.data (), gap, cutpool.getNumCuts (),
16851689 lp.numRows () - lp.getNumModelRows (), conflictPool.getNumConflicts (),
1686- print_lp_iters.data (), time );
1690+ print_lp_iters.data (), time_string. c_str () );
16871691 }
16881692 // Check that limitsToBounds yields the same values for the
16891693 // dual_bound, primal_bound (modulo optimization sense) and
@@ -1960,6 +1964,7 @@ void HighsMipSolverData::evaluateRootNode() {
19601964
19611965 // make sure first line after solving root LP is printed
19621966 last_disptime = -kHighsInf ;
1967+ disptime = 0 ;
19631968
19641969 mipsolver.analysis_ .mipTimerStart (kMipClockRandomizedRounding1 );
19651970 heuristics.randomizedRounding (firstlpsol);
0 commit comments