@@ -300,6 +300,7 @@ run_dual_simplex(dual_simplex::user_problem_t<i_t, f_t>& user_problem,
300
300
pdlp_solver_settings_t <i_t , f_t > const & settings,
301
301
const timer_t & timer)
302
302
{
303
+ timer_t timer_dual_simplex (timer.remaining_time ());
303
304
f_t norm_user_objective = dual_simplex::vector_norm2<i_t , f_t >(user_problem.objective );
304
305
f_t norm_rhs = dual_simplex::vector_norm2<i_t , f_t >(user_problem.rhs );
305
306
@@ -316,7 +317,9 @@ run_dual_simplex(dual_simplex::user_problem_t<i_t, f_t>& user_problem,
316
317
auto status =
317
318
dual_simplex::solve_linear_program<i_t , f_t >(user_problem, dual_simplex_settings, solution);
318
319
319
- CUOPT_LOG_INFO (" Dual simplex finished in %.2f seconds" , timer.elapsed_time ());
320
+ CUOPT_LOG_INFO (" Dual simplex finished in %.2f seconds, total time %.2f" ,
321
+ timer_dual_simplex.elapsed_time (),
322
+ timer.elapsed_time ());
320
323
321
324
if (settings.concurrent_halt != nullptr && (status == dual_simplex::lp_status_t ::OPTIMAL ||
322
325
status == dual_simplex::lp_status_t ::UNBOUNDED ||
@@ -370,14 +373,17 @@ optimization_problem_solution_t<i_t, f_t> run_pdlp(detail::problem_t<i_t, f_t>&
370
373
{
371
374
auto start_solver = std::chrono::high_resolution_clock::now ();
372
375
f_t start_time = dual_simplex::tic ();
373
- auto sol = run_pdlp_solver (problem, settings, timer, is_batch_mode);
376
+ timer_t timer_pdlp (timer.remaining_time ());
377
+ auto sol = run_pdlp_solver (problem, settings, timer, is_batch_mode);
378
+ auto pdlp_solve_time = timer_pdlp.elapsed_time ();
374
379
sol.set_solve_time (timer.elapsed_time ());
375
380
CUOPT_LOG_INFO (" PDLP finished" );
376
381
if (sol.get_termination_status () != pdlp_termination_status_t ::ConcurrentLimit) {
377
- CUOPT_LOG_INFO (" Status: %s Objective: %.8e Iterations: %d Time: %.3fs" ,
382
+ CUOPT_LOG_INFO (" Status: %s Objective: %.8e Iterations: %d Time: %.3fs, Total time %.3fs " ,
378
383
sol.get_termination_status_string ().c_str (),
379
384
sol.get_objective_value (),
380
385
sol.get_additional_termination_information ().number_of_steps_taken ,
386
+ pdlp_solve_time,
381
387
sol.get_solve_time ());
382
388
}
383
389
@@ -474,6 +480,7 @@ optimization_problem_solution_t<i_t, f_t> run_concurrent(
474
480
bool is_batch_mode)
475
481
{
476
482
CUOPT_LOG_INFO (" Running concurrent\n " );
483
+ timer_t timer_concurrent (timer.remaining_time ());
477
484
478
485
// Copy the settings so that we can set the concurrent halt pointer
479
486
pdlp_solver_settings_t <i_t , f_t > settings_pdlp (settings,
@@ -513,7 +520,8 @@ optimization_problem_solution_t<i_t, f_t> run_concurrent(
513
520
std::get<4 >(*sol_dual_simplex_ptr));
514
521
515
522
f_t end_time = timer.elapsed_time ();
516
- CUOPT_LOG_INFO (" Concurrent time: %.3fs" , end_time);
523
+ CUOPT_LOG_INFO (
524
+ " Concurrent time: %.3fs, total time %.3fs" , timer_concurrent.elapsed_time (), end_time);
517
525
// Check status to see if we should return the pdlp solution or the dual simplex solution
518
526
if (sol_dual_simplex.get_termination_status () == pdlp_termination_status_t ::Optimal ||
519
527
sol_dual_simplex.get_termination_status () == pdlp_termination_status_t ::PrimalInfeasible ||
0 commit comments