Skip to content

Commit e545f6e

Browse files
committed
always show timing stats if solver runs
1 parent 3741647 commit e545f6e

2 files changed

Lines changed: 20 additions & 18 deletions

File tree

cmd/solver/cli.cpp

Lines changed: 18 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,24 @@ int main(int argc, char **argv)
135135
return 1;
136136
}
137137

138+
if (!quiet && solverOutput->stats) {
139+
std::cout << "\n--- Complexity ---" << std::endl;
140+
std::cout << "Rows: " << solverOutput->stats->modelRows << " | "
141+
<< "Cols: " << solverOutput->stats->modelColumns << " | "
142+
<< "Nodes: " << solverOutput->stats->searchNodes << std::endl;
143+
if (solverOutput->stats->finalGap > 0) {
144+
std::cout << "Final Gap: " << solverOutput->stats->finalGap << std::endl;
145+
}
146+
147+
std::cout << "\n--- Timing Performance ---" << std::endl;
148+
std::cout << std::fixed << std::setprecision(2);
149+
std::cout << "Setup/Model Build : " << std::setw(8) << solverOutput->stats->setupDurationMs << " ms" << std::endl;
150+
std::cout << "Driver Solve : " << std::setw(8) << solverOutput->stats->driverSolveDurationMs << " ms" << std::endl;
151+
if (solverOutput->stats->spotterSolveDurationMs > 0) {
152+
std::cout << "Spotter Solve : " << std::setw(8) << solverOutput->stats->spotterSolveDurationMs << " ms" << std::endl;
153+
}
154+
}
155+
138156
if (solverOutput->diagnosis_len > 0) {
139157
if (runDiagnostics) {
140158
if (!quiet) {
@@ -150,23 +168,6 @@ int main(int argc, char **argv)
150168
}
151169
}
152170
} else if (!quiet) {
153-
if (solverOutput->stats) {
154-
std::cout << "\n--- Complexity ---" << std::endl;
155-
std::cout << "Rows: " << solverOutput->stats->modelRows << " | "
156-
<< "Cols: " << solverOutput->stats->modelColumns << " | "
157-
<< "Nodes: " << solverOutput->stats->searchNodes << std::endl;
158-
if (solverOutput->stats->finalGap > 0) {
159-
std::cout << "Final Gap: " << solverOutput->stats->finalGap << std::endl;
160-
}
161-
162-
std::cout << "\n--- Timing Performance ---" << std::endl;
163-
std::cout << std::fixed << std::setprecision(2);
164-
std::cout << "Setup/Model Build : " << std::setw(8) << solverOutput->stats->setupDurationMs << " ms" << std::endl;
165-
std::cout << "Driver Solve : " << std::setw(8) << solverOutput->stats->driverSolveDurationMs << " ms" << std::endl;
166-
if (solverOutput->stats->spotterSolveDurationMs > 0) {
167-
std::cout << "Spotter Solve : " << std::setw(8) << solverOutput->stats->spotterSolveDurationMs << " ms" << std::endl;
168-
}
169-
}
170171
// Print the schedule
171172
std::cout << "\n--- Race Schedule ---" << std::endl;
172173
bool hasSpotters = (solverOptions.spotterMode != JRES_SPOTTER_MODE_NONE);

src/jres_standard_solver.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -567,7 +567,8 @@ jres::internal::SolverOutput JresStandardSolver::solve()
567567

568568
// Check for infeasibility
569569
if (status != HighsModelStatus::kOptimal && status != HighsModelStatus::kTimeLimit) {
570-
throw std::runtime_error("Model is infeasible (Status: " + std::to_string((int)status) + ")");
570+
output.diagnosis.push_back("Model is infeasible (Status: " + std::to_string((int)status) + ")");
571+
return output;
571572
}
572573

573574
// --- Extract Solution and Diagnostics ---

0 commit comments

Comments
 (0)