Skip to content

Commit 159a433

Browse files
committed
run concurrent LP instead
1 parent 5e71185 commit 159a433

File tree

3 files changed

+27
-10
lines changed

3 files changed

+27
-10
lines changed

cpp/src/linear_programming/solve.cu

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ void run_dual_simplex_thread(
467467

468468
template <typename i_t, typename f_t>
469469
optimization_problem_solution_t<i_t, f_t> run_concurrent(
470-
optimization_problem_t<i_t, f_t>& op_problem,
470+
const optimization_problem_t<i_t, f_t>& op_problem,
471471
detail::problem_t<i_t, f_t>& problem,
472472
pdlp_solver_settings_t<i_t, f_t> const& settings,
473473
bool is_batch_mode)
@@ -540,7 +540,7 @@ optimization_problem_solution_t<i_t, f_t> run_concurrent(
540540

541541
template <typename i_t, typename f_t>
542542
optimization_problem_solution_t<i_t, f_t> solve_lp_with_method(
543-
optimization_problem_t<i_t, f_t>& op_problem,
543+
const optimization_problem_t<i_t, f_t>& op_problem,
544544
detail::problem_t<i_t, f_t>& problem,
545545
pdlp_solver_settings_t<i_t, f_t> const& settings,
546546
bool is_batch_mode)
@@ -714,6 +714,12 @@ optimization_problem_solution_t<i_t, f_t> solve_lp(
714714
bool problem_checking, \
715715
bool use_pdlp_solver_mode); \
716716
\
717+
template optimization_problem_solution_t<int, F_TYPE> solve_lp_with_method( \
718+
const optimization_problem_t<int, F_TYPE>& op_problem, \
719+
detail::problem_t<int, F_TYPE>& problem, \
720+
pdlp_solver_settings_t<int, F_TYPE> const& settings, \
721+
bool is_batch_mode = false); \
722+
\
717723
template optimization_problem_t<int, F_TYPE> mps_data_model_to_optimization_problem( \
718724
raft::handle_t const* handle_ptr, \
719725
const cuopt::mps_parser::mps_data_model_t<int, F_TYPE>& data_model);

cpp/src/linear_programming/solve.cuh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,11 @@ cuopt::linear_programming::optimization_problem_t<i_t, f_t> mps_data_model_to_op
3030
raft::handle_t const* handle_ptr,
3131
const cuopt::mps_parser::mps_data_model_t<i_t, f_t>& data_model);
3232

33+
template <typename i_t, typename f_t>
34+
cuopt::linear_programming::optimization_problem_solution_t<i_t, f_t> solve_lp_with_method(
35+
const optimization_problem_t<i_t, f_t>& op_problem,
36+
detail::problem_t<i_t, f_t>& problem,
37+
pdlp_solver_settings_t<i_t, f_t> const& settings,
38+
bool is_batch_mode = false);
39+
3340
} // namespace cuopt::linear_programming

cpp/src/mip/solver.cu

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
#include "solver.cuh"
2525

2626
#include <linear_programming/pdlp.cuh>
27+
#include <linear_programming/solve.cuh>
2728

2829
#include <dual_simplex/branch_and_bound.hpp>
2930
#include <dual_simplex/simplex_solver_settings.hpp>
@@ -126,16 +127,19 @@ solution_t<i_t, f_t> mip_solver_t<i_t, f_t>::run_solver()
126127
return sol;
127128
}
128129

129-
// if the problem was reduced to a LP: run PDLP
130+
// if the problem was reduced to a LP: run concurrent LP
130131
if (context.problem_ptr->n_integer_vars == 0) {
131-
CUOPT_LOG_INFO("Problem reduced to a LP, running PDLP");
132-
pdlp_solver_settings_t<i_t, f_t> pdlp_settings{};
133-
pdlp_settings.time_limit = timer_.remaining_time();
134-
detail::pdlp_solver_t<i_t, f_t> solver(*context.problem_ptr, pdlp_settings, false);
135-
auto start_time = std::chrono::high_resolution_clock::now();
136-
auto opt_sol = solver.run_solver(start_time);
132+
CUOPT_LOG_INFO("Problem reduced to a LP, running concurrent LP");
133+
pdlp_solver_settings_t<i_t, f_t> settings{};
134+
settings.time_limit = timer_.remaining_time();
135+
settings.method = method_t::Concurrent;
136+
137+
auto opt_sol = solve_lp_with_method<i_t, f_t>(
138+
*context.problem_ptr->original_problem_ptr, *context.problem_ptr, settings);
139+
137140
solution_t<i_t, f_t> sol(*context.problem_ptr);
138-
sol.copy_new_assignment(host_copy(opt_sol.get_primal_solution()));
141+
sol.copy_new_assignment(
142+
host_copy(opt_sol.get_primal_solution())); // TODO: check if this is correct
139143
if (opt_sol.get_termination_status() == pdlp_termination_status_t::Optimal ||
140144
opt_sol.get_termination_status() == pdlp_termination_status_t::PrimalInfeasible ||
141145
opt_sol.get_termination_status() == pdlp_termination_status_t::DualInfeasible) {

0 commit comments

Comments
 (0)