@@ -166,43 +166,47 @@ int main(int argc, char **argv)
166166 }
167167 else {
168168 // --- Standard Schedule Output Handling ---
169- if (resultCode == 0 ) {
170- // Success
171- if (!quiet) {
172-
173- // Print Metadata / Settings
174- if (resultJson.contains (" metadata" )) {
175- std::cout << " \n --- 🔧 Solver Settings ---" << std::endl;
176- json meta = resultJson[" metadata" ];
177- std::cout << " Time Limit: " << meta.value (" timeLimit" , 0 ) << " s | "
178- << " Gap: " << meta.value (" optimalityGap" , 0.0 ) << " | "
179- << " Spotter: " << meta.value (" spotterMode" , " unknown" ) << std::endl;
180- }
169+ if (!quiet) {
170+ // Print Metadata / Settings
171+ if (resultJson.contains (" metadata" )) {
172+ std::cout << " \n --- 🔧 Solver Settings ---" << std::endl;
173+ json meta = resultJson[" metadata" ];
174+ std::cout << " Time Limit: " << meta.value (" timeLimit" , 0 ) << " s | "
175+ << " Gap: " << meta.value (" optimalityGap" , 0.0 ) << " | "
176+ << " Spotter: " << meta.value (" spotterMode" , " unknown" ) << std::endl;
177+ }
181178
182- // Print Complexity
183- if (resultJson.contains (" complexity" )) {
184- std::cout << " \n --- 🧠 Complexity ---" << std::endl;
185- json c = resultJson[" complexity" ];
186- std::cout << " Rows: " << c.value (" modelRows" , 0 ) << " | "
187- << " Cols: " << c.value (" modelColumns" , 0 ) << " | "
188- << " Nodes: " << c.value (" searchNodes" , 0 ) << std::endl;
189- std::cout << " Big-M Rest Constraints: " << c.value (" numRestConstraints" , 0 ) << std::endl;
179+ // Print Complexity (regardless of success/failure)
180+ if (resultJson.contains (" complexity" )) {
181+ std::cout << " \n --- 🧠 Complexity ---" << std::endl;
182+ json c = resultJson[" complexity" ];
183+ std::cout << " Rows: " << c.value (" modelRows" , 0 ) << " | "
184+ << " Cols: " << c.value (" modelColumns" , 0 ) << " | "
185+ << " Nodes: " << c.value (" searchNodes" , 0 ) << std::endl;
186+ std::cout << " Big-M Rest Constraints: " << c.value (" numRestConstraints" , 0 ) << std::endl;
187+ if (!c[" finalGap" ].is_null ()) {
190188 std::cout << " Final Gap: " << c.value (" finalGap" , 0.0 ) << std::endl;
191189 }
190+ }
192191
193- // Print Timing
194- if (resultJson.contains (" timing" )) {
195- std::cout << " \n --- ⏱️ Timing Performance ---" << std::endl;
196- json t = resultJson[" timing" ];
197- std::cout << std::fixed << std::setprecision (2 );
198- std::cout << " Setup/Model Build : " << std::setw (8 ) << t.value (" setupMs" , 0.0 ) << " ms" << std::endl;
199- std::cout << " Driver Solve : " << std::setw (8 ) << t.value (" driverSolveMs" , 0.0 ) << " ms" << std::endl;
200- if (t.contains (" spotterSolveMs" )) {
201- std::cout << " Spotter Solve : " << std::setw (8 ) << t.value (" spotterSolveMs" , 0.0 ) << " ms" << std::endl;
202- }
203- std::cout << " Total Wall Time : " << std::setw (8 ) << t.value (" totalSeconds" , 0.0 ) << " s" << std::endl;
192+ // Print Timing (regardless of success/failure)
193+ if (resultJson.contains (" timing" )) {
194+ std::cout << " \n --- ⏱️ Timing Performance ---" << std::endl;
195+ json t = resultJson[" timing" ];
196+ std::cout << std::fixed << std::setprecision (2 );
197+ std::cout << " Setup/Model Build : " << std::setw (8 ) << t.value (" setupMs" , 0.0 ) << " ms" << std::endl;
198+ std::cout << " Driver Solve : " << std::setw (8 ) << t.value (" driverSolveMs" , 0.0 ) << " ms" << std::endl;
199+ if (t.contains (" spotterSolveMs" )) {
200+ std::cout << " Spotter Solve : " << std::setw (8 ) << t.value (" spotterSolveMs" , 0.0 ) << " ms" << std::endl;
204201 }
202+ std::cout << " Total Wall Time : " << std::setw (8 ) << t.value (" totalSeconds" , 0.0 ) << " s" << std::endl;
203+ }
204+ }
205205
206+ // Check if the solve was successful
207+ if (resultCode == 0 ) {
208+ // Success
209+ if (!quiet) {
206210 // Print the schedule
207211 std::cout << " \n --- 🏁 Race Schedule ---" << std::endl;
208212 bool hasSpotters = (solverOptions.spotterMode != JRES_SPOTTER_MODE_NONE);
0 commit comments