@@ -357,18 +357,24 @@ solution_t<i_t, f_t> diversity_manager_t<i_t, f_t>::run_solver()
357357 pdlp_settings.pdlp_solver_mode = pdlp_solver_mode_t ::Stable2;
358358 pdlp_settings.num_gpus = context.settings .num_gpus ;
359359
360- rmm::device_uvector<f_t > lp_optimal_solution_copy (lp_optimal_solution.size (),
361- problem_ptr->handle_ptr ->get_stream ());
362360 timer_t lp_timer (lp_time_limit);
363361 auto lp_result = solve_lp_with_method<i_t , f_t >(*problem_ptr, pdlp_settings, lp_timer);
364362
365363 {
366364 std::lock_guard<std::mutex> guard (relaxed_solution_mutex);
367365 if (!simplex_solution_exists.load ()) {
366+ cuopt_assert (lp_result.get_primal_solution ().size () == lp_optimal_solution.size (),
367+ " LP optimal solution size mismatch" );
368+ cuopt_assert (lp_result.get_dual_solution ().size () == lp_dual_optimal_solution.size (),
369+ " LP dual optimal solution size mismatch" );
368370 raft::copy (lp_optimal_solution.data (),
369- lp_optimal_solution_copy .data (),
371+ lp_result. get_primal_solution () .data (),
370372 lp_optimal_solution.size (),
371373 problem_ptr->handle_ptr ->get_stream ());
374+ raft::copy (lp_dual_optimal_solution.data (),
375+ lp_result.get_dual_solution ().data (),
376+ lp_dual_optimal_solution.size (),
377+ problem_ptr->handle_ptr ->get_stream ());
372378 } else {
373379 // copy the lp state
374380 raft::copy (lp_state.prev_primal .data (),
@@ -382,6 +388,11 @@ solution_t<i_t, f_t> diversity_manager_t<i_t, f_t>::run_solver()
382388 }
383389 problem_ptr->handle_ptr ->sync_stream ();
384390 }
391+ cuopt_assert (thrust::all_of (problem_ptr->handle_ptr ->get_thrust_policy (),
392+ lp_optimal_solution.begin (),
393+ lp_optimal_solution.end (),
394+ [] __host__ __device__ (f_t val) { return std::isfinite (val); }),
395+ " LP optimal solution contains non-finite values" );
385396 ls.lp_optimal_exists = true ;
386397 if (lp_result.get_termination_status () == pdlp_termination_status_t ::Optimal) {
387398 set_new_user_bound (lp_result.get_objective_value ());
0 commit comments