Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
844e3a0
compiling
Kh4ster Nov 25, 2025
7520dd6
Merge branch 'main' into batch_pdlp
Kh4ster Nov 25, 2025
37b24fe
working deterministic
Kh4ster Nov 28, 2025
397160c
tmp infeasiblity detection
Kh4ster Dec 1, 2025
4a2cf8a
tmp infeasble
Kh4ster Dec 1, 2025
94bc6fa
working batch infeasible detection
Kh4ster Dec 3, 2025
993c771
add big batch test
Kh4ster Dec 4, 2025
beb6614
support for termination if some climber finish with infeasible while …
Kh4ster Dec 4, 2025
dd36c27
fix solver settings bug
Kh4ster Dec 5, 2025
3d70d05
tmp spmm porting
Kh4ster Dec 5, 2025
a7538c4
tmp fix spmm infeasible
Kh4ster Dec 5, 2025
31603ab
working, non deterministic, batch pdlp with infeasiblity detection
Kh4ster Dec 8, 2025
96ee0eb
minor cleanup and deeper test
Kh4ster Dec 8, 2025
fd4fedd
various fixes to support initial primal / dual solution
Kh4ster Dec 9, 2025
bb9bfa6
tmp way to test initial primal weight and step size
Kh4ster Dec 10, 2025
8e8538f
push the branch and bound bencharmker
Kh4ster Dec 10, 2025
461b07e
Merge branch 'main' into batch_pdlp
Kh4ster Dec 10, 2025
5aa4c7a
add midding fix
Kh4ster Dec 10, 2025
53d1649
move code that should to kernel
Kh4ster Dec 12, 2025
f74ba5d
fix forgotten device sync on pinned memory writes
Kh4ster Dec 12, 2025
acd021d
move dual objective computation to the GPU
Kh4ster Dec 12, 2025
6884fa0
experimental row row mode
Kh4ster Dec 12, 2025
70fd4c8
add some benchmark helpers
Kh4ster Dec 15, 2025
748153c
tmp optimal batch size
Kh4ster Dec 16, 2025
7965da4
tmp
Kh4ster Dec 17, 2025
701ecb3
tmp optimal batch size
Kh4ster Dec 17, 2025
45382d2
add support for optimal batch size in strong branching code
Kh4ster Dec 17, 2025
94c61ea
fix reduced cost and last restart error
Kh4ster Dec 17, 2025
e6c4123
moving optimal batch size handler to a sperate file, put back bounds …
Kh4ster Dec 17, 2025
fc688d3
add missing file
Kh4ster Dec 17, 2025
b35e7b8
complete redesign of the pdlp_hyper_params: instead of global vars th…
Kh4ster Dec 18, 2025
5ece7a5
tmp
Kh4ster Dec 19, 2025
a412882
tmp
Kh4ster Dec 20, 2025
44be3a2
Merge branch 'main' into batch_pdlp
Kh4ster Dec 20, 2025
e95b6a7
Merge branch 'main' into using_separate_vector
Kh4ster Jan 5, 2026
164a6f7
Merge branch 'main' into batch_pdlp
Kh4ster Jan 5, 2026
c57b012
disabled now broken infeasible test (since we can't change multiple b…
Kh4ster Jan 5, 2026
b361575
use span and no custom kernel
Kh4ster Jan 6, 2026
77aa92c
Merge branch 'using_separate_vector' into batch_pdlp
Kh4ster Jan 6, 2026
48b79b9
Merge branch 'batch_pdlp' into no_transpose_in_pdhg
Kh4ster Jan 6, 2026
16755cf
tmp working
Kh4ster Jan 7, 2026
b574281
cleanup
Kh4ster Jan 8, 2026
da997b8
update file loading to use the new pdlp hyper param struct
Kh4ster Jan 8, 2026
edac99f
fix settings var size in var bounds, bring back backward compatibilti…
Kh4ster Jan 8, 2026
c751404
clean api for batch pdlp and better optimal batch size handling
Kh4ster Jan 9, 2026
23a3680
fix test, fix losing optimality bug, fix correctly taking solution fr…
Kh4ster Jan 9, 2026
1cad6f3
fix new bounds slice in optimal batch size api
Kh4ster Jan 9, 2026
7b09481
fix timing
Kh4ster Jan 9, 2026
fb3e320
remove useless deterministic code and replace it with actual useful code
Kh4ster Jan 12, 2026
4c1f5ba
use containers for dense vectors, remove legacy row row, remove legac…
Kh4ster Jan 13, 2026
3a3fff9
properly handle warm start data in batch mode
Kh4ster Jan 13, 2026
a9da3d3
cleartout and sanitize all remaining todos
Kh4ster Jan 13, 2026
93ddc7f
improve debug printing and size checking
Kh4ster Jan 13, 2026
4085e4b
change the default hyper params to be stable3
Kh4ster Jan 14, 2026
96d38a8
tmp
Kh4ster Jan 15, 2026
5336955
fix tests
Kh4ster Jan 15, 2026
258109d
enable clibmer removal
Kh4ster Jan 16, 2026
bc1b81f
update strong branching benchmark
Kh4ster Jan 16, 2026
f39fbdb
optimized the host to device additional copies
Kh4ster Jan 19, 2026
48797fd
optimize swap procedure
Kh4ster Jan 20, 2026
0dbd9c6
disable graph capture in batch pdlp
Kh4ster Jan 22, 2026
54fc342
adding API call
Kh4ster Jan 22, 2026
0d67602
Merge branch 'batch_pdlp' into test_batch_pdlp
Kh4ster Jan 22, 2026
50a6575
adding best hyper parameter set
Kh4ster Jan 22, 2026
22f254b
remove printf
Kh4ster Jan 23, 2026
9075a9a
Merge branch 'main' into batch_pdlp
Kh4ster Jan 23, 2026
deb98dc
fix tests
Kh4ster Jan 23, 2026
572f777
add default parameter to get dual objective
Kh4ster Jan 23, 2026
8711984
remove legacy benchmark file
Kh4ster Jan 23, 2026
e42a9fb
update comments
Kh4ster Jan 23, 2026
c2b2183
update solve comments
Kh4ster Jan 23, 2026
60c4e7d
update comment pesudo cost
Kh4ster Jan 23, 2026
8d1ee52
style check
Kh4ster Jan 23, 2026
30a1e4b
fix style
Kh4ster Jan 23, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
103 changes: 48 additions & 55 deletions benchmarks/linear_programming/cuopt/benchmark_helper.hpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* clang-format off */
/*
* SPDX-FileCopyrightText: Copyright (c) 2024-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2024-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
/* clang-format on */
Expand All @@ -24,8 +24,11 @@
#include <rmm/mr/owning_wrapper.hpp>
#include <rmm/mr/pool_memory_resource.hpp>

#include <cstdlib>
#include <filesystem>
#include <fstream>
#include <iostream>
#include <map>
#include <regex>
#include <sstream>
#include <stdexcept>
Expand Down Expand Up @@ -56,7 +59,9 @@ void parse_value(std::istringstream& iss, bool& value)
iss >> std::boolalpha >> value;
}

void fill_pdlp_hyper_params(const std::string& pdlp_hyper_params_path)
void fill_pdlp_hyper_params(
const std::string& pdlp_hyper_params_path,
cuopt::linear_programming::pdlp_hyper_params::pdlp_hyper_params_t& params)
{
if (!std::filesystem::exists(pdlp_hyper_params_path)) {
std::cerr << "PDLP config file path is not a valid: " << pdlp_hyper_params_path << std::endl;
Expand All @@ -66,67 +71,55 @@ void fill_pdlp_hyper_params(const std::string& pdlp_hyper_params_path)
std::string line;

std::map<std::string, double*> double_settings = {
{"initial_step_size_scaling",
&cuopt::linear_programming::pdlp_hyper_params::initial_step_size_scaling},
{"default_alpha_pock_chambolle_rescaling",
&cuopt::linear_programming::pdlp_hyper_params::default_alpha_pock_chambolle_rescaling},
{"default_reduction_exponent",
&cuopt::linear_programming::pdlp_hyper_params::host_default_reduction_exponent},
{"default_growth_exponent",
&cuopt::linear_programming::pdlp_hyper_params::host_default_growth_exponent},
{"default_primal_weight_update_smoothing",
&cuopt::linear_programming::pdlp_hyper_params::host_default_primal_weight_update_smoothing},
{"default_sufficient_reduction_for_restart",
&cuopt::linear_programming::pdlp_hyper_params::host_default_sufficient_reduction_for_restart},
{"default_necessary_reduction_for_restart",
&cuopt::linear_programming::pdlp_hyper_params::host_default_necessary_reduction_for_restart},
{"default_artificial_restart_threshold",
&cuopt::linear_programming::pdlp_hyper_params::default_artificial_restart_threshold},
{"initial_primal_weight_c_scaling",
&cuopt::linear_programming::pdlp_hyper_params::initial_primal_weight_c_scaling},
{"initial_primal_weight_b_scaling",
&cuopt::linear_programming::pdlp_hyper_params::initial_primal_weight_b_scaling},
{"primal_importance", &cuopt::linear_programming::pdlp_hyper_params::host_primal_importance},
{"primal_distance_smoothing",
&cuopt::linear_programming::pdlp_hyper_params::host_primal_distance_smoothing},
{"dual_distance_smoothing",
&cuopt::linear_programming::pdlp_hyper_params::host_dual_distance_smoothing}};
{"initial_step_size_scaling", &params.initial_step_size_scaling},
{"default_alpha_pock_chambolle_rescaling", &params.default_alpha_pock_chambolle_rescaling},
{"default_reduction_exponent", &params.reduction_exponent},
{"default_growth_exponent", &params.growth_exponent},
{"default_primal_weight_update_smoothing", &params.primal_weight_update_smoothing},
{"default_sufficient_reduction_for_restart", &params.sufficient_reduction_for_restart},
{"default_necessary_reduction_for_restart", &params.necessary_reduction_for_restart},
{"default_artificial_restart_threshold", &params.default_artificial_restart_threshold},
{"initial_primal_weight_c_scaling", &params.initial_primal_weight_c_scaling},
{"initial_primal_weight_b_scaling", &params.initial_primal_weight_b_scaling},
{"primal_importance", &params.primal_importance},
{"primal_distance_smoothing", &params.primal_distance_smoothing},
{"dual_distance_smoothing", &params.dual_distance_smoothing},
{"reflection_coefficient", &params.reflection_coefficient},
{"restart_k_p", &params.restart_k_p},
{"restart_k_i", &params.restart_k_i},
{"restart_k_d", &params.restart_k_d},
{"restart_i_smooth", &params.restart_i_smooth}};

std::map<std::string, int*> int_settings = {
{"default_l_inf_ruiz_iterations",
&cuopt::linear_programming::pdlp_hyper_params::default_l_inf_ruiz_iterations},
{"major_iteration", &cuopt::linear_programming::pdlp_hyper_params::major_iteration},
{"min_iteration_restart", &cuopt::linear_programming::pdlp_hyper_params::min_iteration_restart},
{"restart_strategy", &cuopt::linear_programming::pdlp_hyper_params::restart_strategy},
{"default_l_inf_ruiz_iterations", &params.default_l_inf_ruiz_iterations},
{"major_iteration", &params.major_iteration},
{"min_iteration_restart", &params.min_iteration_restart},
{"restart_strategy", &params.restart_strategy},
};

std::map<std::string, bool*> bool_settings = {
{"do_pock_chambolle_scaling",
&cuopt::linear_programming::pdlp_hyper_params::do_pock_chambolle_scaling},
{"do_ruiz_scaling", &cuopt::linear_programming::pdlp_hyper_params::do_ruiz_scaling},
{"compute_initial_step_size_before_scaling",
&cuopt::linear_programming::pdlp_hyper_params::compute_initial_step_size_before_scaling},
{"do_pock_chambolle_scaling", &params.do_pock_chambolle_scaling},
{"do_ruiz_scaling", &params.do_ruiz_scaling},
{"compute_initial_step_size_before_scaling", &params.compute_initial_step_size_before_scaling},
{"compute_initial_primal_weight_before_scaling",
&cuopt::linear_programming::pdlp_hyper_params::compute_initial_primal_weight_before_scaling},
{"never_restart_to_average",
&cuopt::linear_programming::pdlp_hyper_params::never_restart_to_average},
&params.compute_initial_primal_weight_before_scaling},
{"never_restart_to_average", &params.never_restart_to_average},
{"compute_last_restart_before_new_primal_weight",
&cuopt::linear_programming::pdlp_hyper_params::compute_last_restart_before_new_primal_weight},
{"artificial_restart_in_main_loop",
&cuopt::linear_programming::pdlp_hyper_params::artificial_restart_in_main_loop},
{"rescale_for_restart", &cuopt::linear_programming::pdlp_hyper_params::rescale_for_restart},
{"update_primal_weight_on_initial_solution",
&cuopt::linear_programming::pdlp_hyper_params::update_primal_weight_on_initial_solution},
{"update_step_size_on_initial_solution",
&cuopt::linear_programming::pdlp_hyper_params::update_step_size_on_initial_solution},
&params.compute_last_restart_before_new_primal_weight},
{"artificial_restart_in_main_loop", &params.artificial_restart_in_main_loop},
{"rescale_for_restart", &params.rescale_for_restart},
{"update_primal_weight_on_initial_solution", &params.update_primal_weight_on_initial_solution},
{"update_step_size_on_initial_solution", &params.update_step_size_on_initial_solution},
{"handle_some_primal_gradients_on_finite_bounds_as_residuals",
&cuopt::linear_programming::pdlp_hyper_params::
handle_some_primal_gradients_on_finite_bounds_as_residuals},
{"project_initial_primal",
&cuopt::linear_programming::pdlp_hyper_params::project_initial_primal},
{"use_adaptive_step_size_strategy",
&cuopt::linear_programming::pdlp_hyper_params::use_adaptive_step_size_strategy},
};
&params.handle_some_primal_gradients_on_finite_bounds_as_residuals},
{"project_initial_primal", &params.project_initial_primal},
{"use_adaptive_step_size_strategy", &params.use_adaptive_step_size_strategy},
{"initial_step_size_max_singular_value", &params.initial_step_size_max_singular_value},
{"initial_primal_weight_combined_bounds", &params.initial_primal_weight_combined_bounds},
{"bound_objective_rescaling", &params.bound_objective_rescaling},
{"use_reflected_primal_dual", &params.use_reflected_primal_dual},
{"use_fixed_point_error", &params.use_fixed_point_error},
{"use_conditional_major", &params.use_conditional_major}};

while (std::getline(file, line)) {
std::istringstream iss(line);
Expand Down
8 changes: 5 additions & 3 deletions benchmarks/linear_programming/cuopt/run_pdlp.cu
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* clang-format off */
/*
* SPDX-FileCopyrightText: Copyright (c) 2022-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2022-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
/* clang-format on */
Expand All @@ -17,6 +17,7 @@

#include <argparse/argparse.hpp>

#include <cmath>
#include <filesystem>
#include <stdexcept>
#include <string>
Expand Down Expand Up @@ -48,7 +49,7 @@ static void parse_arguments(argparse::ArgumentParser& program)
program.add_argument("--pdlp-solver-mode")
.help("Solver mode for PDLP. Possible values: Stable3 (default), Methodical1, Fast1")
.default_value("Stable3")
.choices("Stable3", "Methodical1", "Fast1");
.choices("Stable3", "Stable2", "Stable1", "Methodical1", "Fast1");

program.add_argument("--method")
.help(
Expand Down Expand Up @@ -81,6 +82,7 @@ static void parse_arguments(argparse::ArgumentParser& program)
static cuopt::linear_programming::pdlp_solver_mode_t string_to_pdlp_solver_mode(
const std::string& mode)
{
if (mode == "Stable1") return cuopt::linear_programming::pdlp_solver_mode_t::Stable1;
if (mode == "Stable2")
return cuopt::linear_programming::pdlp_solver_mode_t::Stable2;
else if (mode == "Methodical1")
Expand Down Expand Up @@ -131,7 +133,7 @@ int main(int argc, char* argv[])
bool use_pdlp_solver_mode = true;
if (program.is_used("--pdlp-hyper-params-path")) {
std::string pdlp_hyper_params_path = program.get<std::string>("--pdlp-hyper-params-path");
fill_pdlp_hyper_params(pdlp_hyper_params_path);
fill_pdlp_hyper_params(pdlp_hyper_params_path, settings.hyper_params);
use_pdlp_solver_mode = false;
}

Expand Down
85 changes: 43 additions & 42 deletions cpp/include/cuopt/linear_programming/constants.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* clang-format off */
/*
* SPDX-FileCopyrightText: Copyright (c) 2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2025-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
/* clang-format on */
Expand All @@ -20,47 +20,48 @@
#define CUOPT_INSTANTIATE_INT64 0

/* @brief LP/MIP parameter string constants */
#define CUOPT_ABSOLUTE_DUAL_TOLERANCE "absolute_dual_tolerance"
#define CUOPT_RELATIVE_DUAL_TOLERANCE "relative_dual_tolerance"
#define CUOPT_ABSOLUTE_PRIMAL_TOLERANCE "absolute_primal_tolerance"
#define CUOPT_RELATIVE_PRIMAL_TOLERANCE "relative_primal_tolerance"
#define CUOPT_ABSOLUTE_GAP_TOLERANCE "absolute_gap_tolerance"
#define CUOPT_RELATIVE_GAP_TOLERANCE "relative_gap_tolerance"
#define CUOPT_INFEASIBILITY_DETECTION "infeasibility_detection"
#define CUOPT_STRICT_INFEASIBILITY "strict_infeasibility"
#define CUOPT_PRIMAL_INFEASIBLE_TOLERANCE "primal_infeasible_tolerance"
#define CUOPT_DUAL_INFEASIBLE_TOLERANCE "dual_infeasible_tolerance"
#define CUOPT_ITERATION_LIMIT "iteration_limit"
#define CUOPT_TIME_LIMIT "time_limit"
#define CUOPT_PDLP_SOLVER_MODE "pdlp_solver_mode"
#define CUOPT_METHOD "method"
#define CUOPT_PER_CONSTRAINT_RESIDUAL "per_constraint_residual"
#define CUOPT_SAVE_BEST_PRIMAL_SO_FAR "save_best_primal_so_far"
#define CUOPT_FIRST_PRIMAL_FEASIBLE "first_primal_feasible"
#define CUOPT_LOG_FILE "log_file"
#define CUOPT_LOG_TO_CONSOLE "log_to_console"
#define CUOPT_CROSSOVER "crossover"
#define CUOPT_FOLDING "folding"
#define CUOPT_AUGMENTED "augmented"
#define CUOPT_DUALIZE "dualize"
#define CUOPT_ORDERING "ordering"
#define CUOPT_BARRIER_DUAL_INITIAL_POINT "barrier_dual_initial_point"
#define CUOPT_ELIMINATE_DENSE_COLUMNS "eliminate_dense_columns"
#define CUOPT_CUDSS_DETERMINISTIC "cudss_deterministic"
#define CUOPT_PRESOLVE "presolve"
#define CUOPT_DUAL_POSTSOLVE "dual_postsolve"
#define CUOPT_MIP_ABSOLUTE_TOLERANCE "mip_absolute_tolerance"
#define CUOPT_MIP_RELATIVE_TOLERANCE "mip_relative_tolerance"
#define CUOPT_MIP_INTEGRALITY_TOLERANCE "mip_integrality_tolerance"
#define CUOPT_MIP_ABSOLUTE_GAP "mip_absolute_gap"
#define CUOPT_MIP_RELATIVE_GAP "mip_relative_gap"
#define CUOPT_MIP_HEURISTICS_ONLY "mip_heuristics_only"
#define CUOPT_MIP_SCALING "mip_scaling"
#define CUOPT_MIP_PRESOLVE "mip_presolve"
#define CUOPT_SOLUTION_FILE "solution_file"
#define CUOPT_NUM_CPU_THREADS "num_cpu_threads"
#define CUOPT_NUM_GPUS "num_gpus"
#define CUOPT_USER_PROBLEM_FILE "user_problem_file"
#define CUOPT_ABSOLUTE_DUAL_TOLERANCE "absolute_dual_tolerance"
#define CUOPT_RELATIVE_DUAL_TOLERANCE "relative_dual_tolerance"
#define CUOPT_ABSOLUTE_PRIMAL_TOLERANCE "absolute_primal_tolerance"
#define CUOPT_RELATIVE_PRIMAL_TOLERANCE "relative_primal_tolerance"
#define CUOPT_ABSOLUTE_GAP_TOLERANCE "absolute_gap_tolerance"
#define CUOPT_RELATIVE_GAP_TOLERANCE "relative_gap_tolerance"
#define CUOPT_INFEASIBILITY_DETECTION "infeasibility_detection"
#define CUOPT_STRICT_INFEASIBILITY "strict_infeasibility"
#define CUOPT_PRIMAL_INFEASIBLE_TOLERANCE "primal_infeasible_tolerance"
#define CUOPT_DUAL_INFEASIBLE_TOLERANCE "dual_infeasible_tolerance"
#define CUOPT_ITERATION_LIMIT "iteration_limit"
#define CUOPT_TIME_LIMIT "time_limit"
#define CUOPT_PDLP_SOLVER_MODE "pdlp_solver_mode"
#define CUOPT_METHOD "method"
#define CUOPT_PER_CONSTRAINT_RESIDUAL "per_constraint_residual"
#define CUOPT_SAVE_BEST_PRIMAL_SO_FAR "save_best_primal_so_far"
#define CUOPT_FIRST_PRIMAL_FEASIBLE "first_primal_feasible"
#define CUOPT_LOG_FILE "log_file"
#define CUOPT_LOG_TO_CONSOLE "log_to_console"
#define CUOPT_CROSSOVER "crossover"
#define CUOPT_FOLDING "folding"
#define CUOPT_AUGMENTED "augmented"
#define CUOPT_DUALIZE "dualize"
#define CUOPT_ORDERING "ordering"
#define CUOPT_BARRIER_DUAL_INITIAL_POINT "barrier_dual_initial_point"
#define CUOPT_ELIMINATE_DENSE_COLUMNS "eliminate_dense_columns"
#define CUOPT_CUDSS_DETERMINISTIC "cudss_deterministic"
#define CUOPT_PRESOLVE "presolve"
#define CUOPT_DUAL_POSTSOLVE "dual_postsolve"
#define CUOPT_MIP_ABSOLUTE_TOLERANCE "mip_absolute_tolerance"
#define CUOPT_MIP_RELATIVE_TOLERANCE "mip_relative_tolerance"
#define CUOPT_MIP_INTEGRALITY_TOLERANCE "mip_integrality_tolerance"
#define CUOPT_MIP_BATCH_PDLP_STRONG_BRANCHING "mip_batch_pdlp_strong_branching"
#define CUOPT_MIP_ABSOLUTE_GAP "mip_absolute_gap"
#define CUOPT_MIP_RELATIVE_GAP "mip_relative_gap"
#define CUOPT_MIP_HEURISTICS_ONLY "mip_heuristics_only"
#define CUOPT_MIP_SCALING "mip_scaling"
#define CUOPT_MIP_PRESOLVE "mip_presolve"
#define CUOPT_SOLUTION_FILE "solution_file"
#define CUOPT_NUM_CPU_THREADS "num_cpu_threads"
#define CUOPT_NUM_GPUS "num_gpus"
#define CUOPT_USER_PROBLEM_FILE "user_problem_file"

/* @brief LP/MIP termination status constants */
#define CUOPT_TERIMINATION_STATUS_NO_TERMINATION 0
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* clang-format off */
/*
* SPDX-FileCopyrightText: Copyright (c) 2023-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-FileCopyrightText: Copyright (c) 2023-2026, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
* SPDX-License-Identifier: Apache-2.0
*/
/* clang-format on */
Expand All @@ -10,6 +10,7 @@
#include <vector>

#include <cuopt/linear_programming/constants.h>
#include <cuopt/linear_programming/pdlp/pdlp_hyper_params.cuh>
#include <cuopt/linear_programming/utilities/internals.hpp>

#include <raft/core/device_span.hpp>
Expand Down Expand Up @@ -82,7 +83,8 @@ class mip_solver_settings_t {
bool heuristics_only = false;
i_t num_cpu_threads = -1; // -1 means use default number of threads in branch and bound
i_t num_gpus = 1;
bool log_to_console = true;
i_t mip_batch_pdlp_strong_branching = 0;
bool log_to_console = true;
std::string log_file;
std::string sol_file;
std::string user_problem_file;
Expand All @@ -95,6 +97,9 @@ class mip_solver_settings_t {
// benchmarks
benchmark_info_t* benchmark_info_ptr = nullptr;

// TODO check with Akif and Alice
pdlp_hyper_params::pdlp_hyper_params_t hyper_params;

private:
std::vector<internals::base_solution_callback_t*> mip_callbacks_;

Expand Down
Loading
Loading