Skip to content

Commit 38132a5

Browse files
committed
handle ai reviews
1 parent 6f21155 commit 38132a5

File tree

6 files changed

+16
-94
lines changed

6 files changed

+16
-94
lines changed

cpp/src/cuts/cuts.cpp

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1246,14 +1246,13 @@ bool cut_generation_t<i_t, f_t>::generate_clique_cuts(
12461246
kept_adj_entries += adj.size();
12471247
#ifdef ASSERT_MODE
12481248
{
1249-
std::unordered_set<i_t> adj_check;
1250-
adj_check.reserve(adj.size());
1249+
std::unordered_set<i_t> adj_global;
1250+
adj_global.reserve(adj.size());
12511251
for (const auto neighbor : adj) {
1252-
cuopt_assert(adj_check.insert(neighbor).second, "Duplicate neighbor in adjacency list");
1253-
// Make sure no complementing variable is present in the adjacency list
1254-
// Given convention: if variable is j, its complement is j + num_vars (and vice versa)
1255-
i_t complement = (neighbor >= num_vars) ? (neighbor - num_vars) : (neighbor + num_vars);
1256-
cuopt_assert(adj_check.find(complement) == adj_check.end(),
1252+
i_t v = vertices[neighbor];
1253+
cuopt_assert(adj_global.insert(v).second, "Duplicate neighbor in adjacency list");
1254+
i_t complement = (v >= num_vars) ? (v - num_vars) : (v + num_vars);
1255+
cuopt_assert(adj_global.find(complement) == adj_global.end(),
12571256
"Adjacency list contains complementing variable");
12581257
}
12591258
}

cpp/src/mip_heuristics/diversity/diversity_manager.cu

Lines changed: 4 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
#include "cuda_profiler_api.h"
99
#include "diversity_manager.cuh"
1010

11-
#include <dual_simplex/simplex_solver_settings.hpp>
1211
#include <mip_heuristics/diversity/known_miplib_objectives.hpp>
1312
#include <mip_heuristics/mip_constants.hpp>
1413
#include <mip_heuristics/presolve/conflict_graph/clique_table.cuh>
@@ -26,17 +25,6 @@ constexpr bool fj_only_run = false;
2625

2726
namespace cuopt::linear_programming::detail {
2827

29-
const char* env_cut_configuration_name(env_cut_configuration_t config)
30-
{
31-
switch (config) {
32-
case env_cut_configuration_t::WITHOUT_CLIQUE: return "cuts_without_clique";
33-
case env_cut_configuration_t::WITH_CLIQUE: return "cuts_with_clique";
34-
case env_cut_configuration_t::CLIQUE_ONLY: return "clique_only";
35-
case env_cut_configuration_t::NONE: return "default";
36-
default: return "unknown";
37-
}
38-
}
39-
4028
size_t fp_recombiner_config_t::max_n_of_vars_from_other =
4129
fp_recombiner_config_t::initial_n_of_vars_from_other;
4230
size_t ls_recombiner_config_t::max_n_of_vars_from_other =
@@ -92,6 +80,7 @@ diversity_manager_t<i_t, f_t>::diversity_manager_t(mip_solver_context_t<i_t, f_t
9280
ls_hash_map(*context.problem_ptr)
9381
{
9482
int max_config = -1;
83+
int env_config_id = -1;
9584
const char* env_max_config = std::getenv("CUOPT_MAX_CONFIG");
9685
if (env_max_config != nullptr) {
9786
try {
@@ -117,52 +106,6 @@ diversity_manager_t<i_t, f_t>::diversity_manager_t(mip_solver_context_t<i_t, f_t
117106
"CUOPT_CONFIG_ID=%d is outside [0, %d). Ignoring cut override.", env_config_id, max_config);
118107
return;
119108
}
120-
121-
switch (env_config_id) {
122-
case 0: env_cut_configuration = env_cut_configuration_t::WITHOUT_CLIQUE; break;
123-
case 1: env_cut_configuration = env_cut_configuration_t::WITH_CLIQUE; break;
124-
case 2: env_cut_configuration = env_cut_configuration_t::CLIQUE_ONLY; break;
125-
default:
126-
CUOPT_LOG_WARN(
127-
"Unsupported CUOPT_CONFIG_ID=%d for cut configuration. "
128-
"Expected 0 (without clique), 1 (with clique), or 2 (clique only).",
129-
env_config_id);
130-
env_cut_configuration = env_cut_configuration_t::NONE;
131-
return;
132-
}
133-
134-
CUOPT_LOG_INFO("Using cut configuration from CUOPT_CONFIG_ID=%d (%s)",
135-
env_config_id,
136-
env_cut_configuration_name(env_cut_configuration));
137-
}
138-
139-
template <typename i_t, typename f_t>
140-
void diversity_manager_t<i_t, f_t>::apply_cut_configuration_from_env(
141-
dual_simplex::simplex_solver_settings_t<i_t, f_t>& settings) const
142-
{
143-
if (env_cut_configuration == env_cut_configuration_t::NONE) { return; }
144-
switch (env_cut_configuration) {
145-
case env_cut_configuration_t::WITHOUT_CLIQUE: settings.clique_cuts = 0; break;
146-
case env_cut_configuration_t::WITH_CLIQUE: settings.clique_cuts = 1; break;
147-
case env_cut_configuration_t::CLIQUE_ONLY:
148-
settings.clique_cuts = 1;
149-
settings.mixed_integer_gomory_cuts = 0;
150-
settings.mir_cuts = 0;
151-
settings.knapsack_cuts = 0;
152-
settings.strong_chvatal_gomory_cuts = 0;
153-
break;
154-
default: break;
155-
}
156-
settings.log.printf(
157-
"Applied cut configuration from CUOPT_CONFIG_ID=%d (%s): mir=%d gomory=%d knapsack=%d "
158-
"strong_cg=%d clique=%d\n",
159-
env_config_id,
160-
env_cut_configuration_name(env_cut_configuration),
161-
settings.mir_cuts,
162-
settings.mixed_integer_gomory_cuts,
163-
settings.knapsack_cuts,
164-
settings.strong_chvatal_gomory_cuts,
165-
settings.clique_cuts);
166109
}
167110

168111
// this function is to specialize the local search with config from diversity manager
@@ -256,7 +199,7 @@ bool diversity_manager_t<i_t, f_t>::run_presolve(f_t time_limit, timer_t global_
256199
if (run_probing_cache) {
257200
// Run probing cache before trivial presolve to discover variable implications
258201
const f_t max_time_on_probing = diversity_config.max_time_on_probing;
259-
f_t time_for_probing_cache = std::min(max_time_on_probing, time_limit);
202+
f_t time_for_probing_cache = std::min(max_time_on_probing, time_limit * 0.9);
260203
timer_t probing_timer{time_for_probing_cache};
261204
// this function computes probing cache, finds singletons, substitutions and changes the problem
262205
bool problem_is_infeasible =
@@ -270,7 +213,7 @@ bool diversity_manager_t<i_t, f_t>::run_presolve(f_t time_limit, timer_t global_
270213
!problem_ptr->empty) {
271214
// TODO this is just CPU time and blocking the GPU time.
272215
// execute this in parallel with something else.
273-
f_t time_limit_for_clique_table = std::min(3., presolve_timer.remaining_time() / 5);
216+
f_t time_limit_for_clique_table = std::min(3., presolve_timer.remaining_time());
274217
// if it is deterministic run until the end
275218
if (context.settings.determinism_mode == CUOPT_MODE_DETERMINISTIC) {
276219
time_limit_for_clique_table = std::numeric_limits<f_t>::infinity();
@@ -284,7 +227,7 @@ bool diversity_manager_t<i_t, f_t>::run_presolve(f_t time_limit, timer_t global_
284227
find_initial_cliques(host_problem,
285228
context.settings.tolerances,
286229
clique_table_ptr,
287-
presolve_timer,
230+
clique_timer,
288231
modify_problem_with_cliques);
289232
if (modify_problem_with_cliques) {
290233
problem_ptr->set_constraints_from_host_user_problem(host_problem);

cpp/src/mip_heuristics/diversity/diversity_manager.cuh

Lines changed: 0 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,8 @@
2929

3030
#include <cstdint>
3131

32-
namespace cuopt::linear_programming::dual_simplex {
33-
template <typename i_t, typename f_t>
34-
struct simplex_solver_settings_t;
35-
}
36-
3732
namespace cuopt::linear_programming::detail {
3833

39-
enum class env_cut_configuration_t : int8_t {
40-
NONE = -1,
41-
WITHOUT_CLIQUE = 0,
42-
WITH_CLIQUE = 1,
43-
CLIQUE_ONLY = 2,
44-
};
45-
46-
const char* env_cut_configuration_name(env_cut_configuration_t config);
47-
4834
template <typename i_t, typename f_t>
4935
class diversity_manager_t {
5036
public:
@@ -85,9 +71,6 @@ class diversity_manager_t {
8571
void set_simplex_solution(const std::vector<f_t>& solution,
8672
const std::vector<f_t>& dual_solution,
8773
f_t objective);
88-
void apply_cut_configuration_from_env(
89-
dual_simplex::simplex_solver_settings_t<i_t, f_t>& settings) const;
90-
9174
mip_solver_context_t<i_t, f_t>& context;
9275
dual_simplex::branch_and_bound_t<i_t, f_t>* branch_and_bound_ptr;
9376
problem_t<i_t, f_t>* problem_ptr;
@@ -121,8 +104,6 @@ class diversity_manager_t {
121104
bool run_only_bp_recombiner{false};
122105
bool run_only_fp_recombiner{false};
123106
bool run_only_sub_mip_recombiner{false};
124-
env_cut_configuration_t env_cut_configuration{env_cut_configuration_t::NONE};
125-
int env_config_id{-1};
126107
};
127108

128109
} // namespace cuopt::linear_programming::detail

cpp/src/mip_heuristics/presolve/conflict_graph/clique_table.cuh

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -97,12 +97,11 @@ struct clique_table_t {
9797
};
9898

9999
template <typename i_t, typename f_t>
100-
void find_initial_cliques(
101-
dual_simplex::user_problem_t<i_t, f_t>& problem,
102-
typename mip_solver_settings_t<i_t, f_t>::tolerances_t tolerances,
103-
std::shared_ptr<clique_table_t<i_t, f_t>>* clique_table_out = nullptr,
104-
cuopt::timer_t& timer = cuopt::timer_t(std::numeric_limits<double>::infinity()),
105-
bool modify_problem = false);
100+
void find_initial_cliques(dual_simplex::user_problem_t<i_t, f_t>& problem,
101+
typename mip_solver_settings_t<i_t, f_t>::tolerances_t tolerances,
102+
std::shared_ptr<clique_table_t<i_t, f_t>>* clique_table_out,
103+
cuopt::timer_t& timer,
104+
bool modify_problem);
106105

107106
template <typename i_t, typename f_t>
108107
void build_clique_table(const dual_simplex::user_problem_t<i_t, f_t>& problem,

cpp/src/mip_heuristics/presolve/third_party_presolve.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,6 +588,7 @@ std::optional<third_party_presolve_result_t<i_t, f_t>> third_party_presolve_t<i_
588588

589589
auto opt_problem = build_optimization_problem_from_pslp<i_t, f_t>(
590590
pslp_presolver_, op_problem.get_handle_ptr(), maximize_, original_obj_offset);
591+
opt_problem.set_problem_name(op_problem.get_problem_name());
591592

592593
return std::make_optional(third_party_presolve_result_t<i_t, f_t>{opt_problem, {}});
593594
}

cpp/src/mip_heuristics/solver.cu

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,6 @@ solution_t<i_t, f_t> mip_solver_t<i_t, f_t>::run_solver()
223223
branch_and_bound_settings.clique_cuts = context.settings.clique_cuts;
224224
branch_and_bound_settings.strong_chvatal_gomory_cuts =
225225
context.settings.strong_chvatal_gomory_cuts;
226-
dm.apply_cut_configuration_from_env(branch_and_bound_settings);
227226
branch_and_bound_settings.reduced_cost_strengthening =
228227
context.settings.reduced_cost_strengthening;
229228
branch_and_bound_settings.cut_change_threshold = context.settings.cut_change_threshold;

0 commit comments

Comments
 (0)