Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
149 commits
Select commit Hold shift + click to select a range
d1ab4eb
test fp only
akifcorduk Jul 31, 2025
47708f4
generate and then run FP
akifcorduk Aug 1, 2025
17561a2
with fj
akifcorduk Aug 1, 2025
6276efa
with obj cut
akifcorduk Aug 1, 2025
b2ed360
test FP ls
akifcorduk Aug 4, 2025
ebbb5e4
20s fp run
akifcorduk Aug 4, 2025
90c1696
fix feasibility run. 20s LS
akifcorduk Aug 4, 2025
7e859fb
fix feasibility run. 20s LS
akifcorduk Aug 4, 2025
5363e79
add as part of the local search
akifcorduk Aug 5, 2025
474d170
fp ls with mab
akifcorduk Aug 5, 2025
0690083
try with shorter run time
akifcorduk Aug 5, 2025
6c02547
tidy up functions and reduce local min to 500
akifcorduk Aug 6, 2025
0a176f1
revert cmake comments
akifcorduk Aug 6, 2025
e2d0d8b
fix typo
akifcorduk Aug 6, 2025
a4c37d6
fix typo
akifcorduk Aug 6, 2025
49584ed
remove the warning in pdlp solve
akifcorduk Aug 6, 2025
5ea08e8
handle review comments
akifcorduk Aug 7, 2025
85820e0
handle review comments
akifcorduk Aug 7, 2025
4437481
try without fp
akifcorduk Aug 8, 2025
c0b0a21
fix warning
akifcorduk Aug 8, 2025
ebb4958
enable lp and probing cache
akifcorduk Aug 11, 2025
54afd53
fix issues including the objective cut not being on copy constructor
akifcorduk Aug 14, 2025
df34a01
without probing cache
akifcorduk Aug 15, 2025
5ebb86c
nearest rounding
akifcorduk Aug 15, 2025
57b1b9d
FJ alone run
akifcorduk Aug 15, 2025
ee861a2
remove unnecessary function
akifcorduk Aug 18, 2025
f960946
Merge branch 'branch-25.10' of github.com:NVIDIA/cuopt into fp_ls
akifcorduk Aug 18, 2025
cc21c3d
add assert
akifcorduk Aug 19, 2025
9821f03
handle weight issue on fj with changed size
akifcorduk Aug 19, 2025
9cd097a
Merge branch 'branch-25.10' of github.com:NVIDIA/cuopt into fp_ls
akifcorduk Aug 19, 2025
a4b23ae
0.1, unfixed
akifcorduk Aug 20, 2025
ed04e4c
0.5, unfixed
akifcorduk Aug 20, 2025
dff8e0b
0.1, all
akifcorduk Aug 20, 2025
5266f6f
0.1, all
akifcorduk Aug 20, 2025
245026c
0.1, all
akifcorduk Aug 20, 2025
ced9d56
fj only
akifcorduk Aug 20, 2025
3476771
reduced probing cache time
akifcorduk Aug 20, 2025
24ffb0e
nearest rounding
akifcorduk Aug 20, 2025
d572c6b
nearest rounding
akifcorduk Aug 20, 2025
b6e17e3
without repair
akifcorduk Aug 20, 2025
bfe6954
1e-4 abs tolerance, bounds prop
akifcorduk Aug 20, 2025
ac73a18
1e-4 abs tolerance, nearest
akifcorduk Aug 20, 2025
1c7d597
1e-4 abs tolerance, nearest
akifcorduk Aug 20, 2025
8dbcc2f
1e-4 abs tolerance, constraint prop
akifcorduk Aug 20, 2025
87b095f
no staged fp
akifcorduk Aug 20, 2025
6c8c186
no staged fp, nearest rounding
akifcorduk Aug 20, 2025
e244176
no lp after bounds prop
akifcorduk Aug 20, 2025
1012dc7
staged fp, no lp after bounds prop
akifcorduk Aug 20, 2025
188f971
reduce probing cache and initial LP time. and skip bounds prop lp onl…
akifcorduk Aug 21, 2025
5fd4cfc
increase time to 1.5s and round all vars in FP
akifcorduk Aug 21, 2025
1a6c608
disable repair
akifcorduk Aug 21, 2025
678c66b
repair disabled, probing cache and LP 0.1
akifcorduk Aug 21, 2025
364739d
with fix on the fixed var bounds
akifcorduk Aug 21, 2025
bb807cd
only round 50 vars
akifcorduk Aug 21, 2025
31f1723
nearest rounding
akifcorduk Aug 21, 2025
a70498d
last 50 fixed
akifcorduk Aug 21, 2025
1fdebd3
switch to frac
akifcorduk Aug 21, 2025
ea0e251
no staged FP
akifcorduk Aug 21, 2025
611310d
nearest rounding
akifcorduk Aug 21, 2025
2fee710
staged nearest rounding
akifcorduk Aug 21, 2025
594a0c4
staged bounds prop rounding
akifcorduk Aug 21, 2025
d3a9b45
staged bounds prop rounding
akifcorduk Aug 21, 2025
2c849f0
with nearest rounding
akifcorduk Aug 26, 2025
39f4c8b
fp loop generates
akifcorduk Aug 27, 2025
25a5f6e
with B&B
akifcorduk Aug 27, 2025
bb0cde2
revert constraint prop changes
akifcorduk Aug 27, 2025
28cbe17
with probing cache
akifcorduk Aug 27, 2025
c9d9487
without probing cache, increased diversity
akifcorduk Aug 27, 2025
8462883
at least 6 solutions
akifcorduk Aug 27, 2025
4c1d801
lower ratios
akifcorduk Aug 27, 2025
3318970
increase diversity even more
akifcorduk Aug 27, 2025
79fe7be
3 solutions
akifcorduk Aug 27, 2025
13576ae
back to previous ratios
akifcorduk Aug 27, 2025
548c246
disable presolve
akifcorduk Aug 27, 2025
cba77bf
without fp ls
akifcorduk Aug 27, 2025
9cee0e2
slightly less diversity
akifcorduk Aug 28, 2025
b3d141b
merge with main
akifcorduk Aug 28, 2025
a5bbd8b
fix merge conflict
akifcorduk Aug 28, 2025
346daf7
recombine at each call
akifcorduk Aug 28, 2025
8225802
enable recombiation
akifcorduk Aug 29, 2025
5279af8
with higher diversity
akifcorduk Aug 29, 2025
7005f5a
run all recombiners
akifcorduk Aug 29, 2025
cd3a3a7
add cutting plane after recombination and fix timer
akifcorduk Aug 29, 2025
17d08c3
sqrt diversity
akifcorduk Aug 29, 2025
70810b5
new hash
akifcorduk Sep 1, 2025
692dcef
separate fp and hashmap check
akifcorduk Sep 1, 2025
1c7857b
with 0.1% diff to obj
akifcorduk Sep 1, 2025
e463821
without probing cache better objective cuts
akifcorduk Sep 2, 2025
c869505
with probing cache
akifcorduk Sep 2, 2025
abf162f
with bounds prop rounding
akifcorduk Sep 2, 2025
a346d8b
with 4 solutions in pop
akifcorduk Sep 2, 2025
5cab9b5
increased time in probing cache
akifcorduk Sep 2, 2025
db34e48
lower time in probing cache
akifcorduk Sep 2, 2025
b94a40b
nearest rounding
akifcorduk Sep 2, 2025
85f417f
without trivial presolve
akifcorduk Sep 3, 2025
f996b65
without submip
akifcorduk Sep 3, 2025
d1b4adc
test with only submip
akifcorduk Sep 4, 2025
4c2335c
flush on debug
akifcorduk Sep 4, 2025
6ba676f
B&B logs on
akifcorduk Sep 5, 2025
6348501
only selected instanceS
akifcorduk Sep 5, 2025
e44ce75
spit the problem
akifcorduk Sep 5, 2025
7fe82bd
new path
akifcorduk Sep 5, 2025
254b728
debug log
akifcorduk Sep 5, 2025
24f82b1
with generation
akifcorduk Sep 8, 2025
4b12ed5
Revert "with generation"
akifcorduk Sep 8, 2025
6f40f4f
fix issues
akifcorduk Sep 8, 2025
d913a3f
with trivial presolve
akifcorduk Sep 8, 2025
0e67d99
add scaling
akifcorduk Sep 8, 2025
30ff7d2
Reapply "with generation"
akifcorduk Sep 8, 2025
d8364fe
with sanitizer
akifcorduk Sep 8, 2025
4fb0591
logs enabled
akifcorduk Sep 8, 2025
f46c9f2
logs enabled
akifcorduk Sep 8, 2025
8a5ea76
correct rpint
akifcorduk Sep 8, 2025
e54d478
with undefined as well
akifcorduk Sep 8, 2025
4ac5b2b
without logs
akifcorduk Sep 8, 2025
a90ac9c
test inf and nans
akifcorduk Sep 8, 2025
c31ae8f
return numeric in bounds flipping ratio test
akifcorduk Sep 8, 2025
05e37bd
rever to best settings
akifcorduk Sep 9, 2025
ea3ef61
change default tolerance
akifcorduk Sep 9, 2025
51cff97
nearest rounding
akifcorduk Sep 9, 2025
a86503f
remove previous population generation
akifcorduk Sep 9, 2025
0d82a96
change the preemption values to atomic
akifcorduk Sep 9, 2025
21ff255
move saving to a function
akifcorduk Sep 9, 2025
fa4ed0e
more clean up
akifcorduk Sep 9, 2025
f849e60
back to BP rounding
akifcorduk Sep 9, 2025
7102686
remove fp ls
akifcorduk Sep 9, 2025
508f1e9
with B&B
akifcorduk Sep 9, 2025
4f91d39
fix solution ptr
akifcorduk Sep 9, 2025
047ce52
with a single thread
akifcorduk Sep 10, 2025
2842328
no set simplex
akifcorduk Sep 10, 2025
6f11475
few fixes
akifcorduk Sep 10, 2025
bcaa98a
fix initial LP and simplex callback
akifcorduk Sep 15, 2025
056b5e2
with per constraint
akifcorduk Sep 15, 2025
70e174f
fix many issues
akifcorduk Sep 15, 2025
23e720c
fix timer issue
akifcorduk Sep 15, 2025
9186f2c
don't preempt on mip infeasible
akifcorduk Sep 16, 2025
8e34d06
increased cpu threads and lowered probing cache
akifcorduk Sep 16, 2025
6556656
with presolve on miplib dataset
akifcorduk Sep 16, 2025
96d922b
remove mps files
akifcorduk Sep 16, 2025
a743959
Merge branch 'branch-25.10' of github.com:NVIDIA/cuopt into fp_tests
akifcorduk Sep 16, 2025
88ae1cf
fix merge conflicts
akifcorduk Sep 16, 2025
54941ee
fix limiting memory resource
akifcorduk Sep 16, 2025
3f8b57b
try fixing load balancing
akifcorduk Sep 16, 2025
0d644fd
handle review comments
akifcorduk Sep 17, 2025
618d550
remove the -1 return
akifcorduk Sep 17, 2025
7f529f5
Merge branch 'branch-25.10' of github.com:NVIDIA/cuopt into fp_tests
akifcorduk Sep 17, 2025
4748744
fix fast solution not being returned
akifcorduk Sep 17, 2025
153fbb2
fix standardization test
akifcorduk Sep 17, 2025
aaeb08f
fix elim var tests
akifcorduk Sep 17, 2025
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
180 changes: 8 additions & 172 deletions benchmarks/linear_programming/cuopt/mip_test_instances.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -17,175 +17,11 @@
#pragma once
#include <string>
#include <vector>
std::vector<std::string> instances = {"30n20b8.mps",
"50v-10.mps",
"CMS750_4.mps",
"academictimetablesmall.mps",
"air05.mps",
"app1-1.mps",
"app1-2.mps",
"assign1-5-8.mps",
"atlanta-ip.mps",
"bab2.mps",
"bab6.mps",
"beasleyC3.mps",
"binkar10_1.mps",
"blp-ar98.mps",
"blp-ic98.mps",
"bppc4-08.mps",
"brazil3.mps",
"cmflsp50-24-8-8.mps",
"co-100.mps",
"cod105.mps",
"comp07-2idx.mps",
"comp21-2idx.mps",
"csched007.mps",
"csched008.mps",
"cvs16r128-89.mps",
"dano3_3.mps",
"decomp2.mps",
"drayage-100-23.mps",
"drayage-25-23.mps",
"eil33-2.mps",
"eilA101-2.mps",
"exp-1-500-5-5.mps",
"fast0507.mps",
"fastxgemm-n2r6s0t2.mps",
"fiball.mps",
"gen-ip002.mps",
"germanrr.mps",
"glass4.mps",
"graph20-20-1rand.mps",
"graphdraw-domain.mps",
"h80x6320d.mps",
"highschool1-aigio.mps",
"hypothyroid-k1.mps",
"icir97_tension.mps",
"irish-electricity.mps",
"istanbul-no-cutoff.mps",
"k1mushroom.mps",
"lectsched-5-obj.mps",
"leo1.mps",
"leo2.mps",
"lotsize.mps",
"mad.mps",
"map10.mps",
"map16715-04.mps",
"markshare2.mps",
"markshare_4_0.mps",
"mas74.mps",
"mc11.mps",
"mcsched.mps",
"mik-250-20-75-4.mps",
"momentum1.mps",
"mushroom-best.mps",
"mzzv11.mps",
"mzzv42z.mps",
"n2seq36q.mps",
"n3div36.mps",
"neos-1171448.mps",
"neos-1171737.mps",
"neos-1354092.mps",
"neos-1445765.mps",
"neos-1456979.mps",
"neos-1582420.mps",
"neos-2657525-crna.mps",
"neos-2746589-doon.mps",
"neos-3024952-loue.mps",
"neos-3046615-murg.mps",
"neos-3216931-puriri.mps",
"neos-3402294-bobin.mps",
"neos-3656078-kumeu.mps",
"neos-3754480-nidda.mps",
"neos-4300652-rahue.mps",
"neos-4338804-snowy.mps",
"neos-4387871-tavua.mps",
"neos-4413714-turia.mps",
"neos-4532248-waihi.mps",
"neos-4722843-widden.mps",
"neos-4738912-atrato.mps",
"neos-4763324-toguru.mps",
"neos-4954672-berkel.mps",
"neos-5049753-cuanza.mps",
"neos-5093327-huahum.mps",
"neos-5107597-kakapo.mps",
"neos-5114902-kasavu.mps",
"neos-5188808-nattai.mps",
"neos-5195221-niemur.mps",
"neos-662469.mps",
"neos-787933.mps",
"neos-848589.mps",
"neos-860300.mps",
"neos-911970.mps",
"neos-933966.mps",
"neos-950242.mps",
"neos17.mps",
"neos5.mps",
"net12.mps",
"netdiversion.mps",
"nexp-150-20-8-5.mps",
"ns1644855.mps",
"ns1760995.mps",
"ns1830653.mps",
"nursesched-medium-hint03.mps",
"nursesched-sprint02.mps",
"opm2-z10-s4.mps",
"pg.mps",
"physiciansched3-3.mps",
"piperout-08.mps",
"piperout-27.mps",
"pk1.mps",
"qap10.mps",
"radiationm18-12-05.mps",
"radiationm40-10-02.mps",
"rail01.mps",
"rail02.mps",
"rail507.mps",
"ran14x18-disj-8.mps",
"rmatr100-p10.mps",
"rmatr200-p5.mps",
"rocI-4-11.mps",
"rocII-5-11.mps",
"rococoB10-011000.mps",
"rococoC10-001000.mps",
"roi2alpha3n4.mps",
"roi5alpha10n8.mps",
"roll3000.mps",
"s100.mps",
"s250r10.mps",
"satellites2-40.mps",
"satellites2-60-fs.mps",
"savsched1.mps",
"sct2.mps",
"seymour.mps",
"seymour1.mps",
"sing326.mps",
"sing44.mps",
"sorrell3.mps",
"sp97ar.mps",
"sp98ar.mps",
"splice1k1.mps",
"square41.mps",
"square47.mps",
"supportcase10.mps",
"supportcase12.mps",
"supportcase18.mps",
"supportcase26.mps",
"supportcase33.mps",
"supportcase40.mps",
"supportcase42.mps",
"supportcase6.mps",
"supportcase7.mps",
"swath1.mps",
"swath3.mps",
"tbfp-network.mps",
"thor50dday.mps",
"timtab1.mps",
"tr12-30.mps",
"traininstance2.mps",
"traininstance6.mps",
"trento1.mps",
"uccase12.mps",
"uct-subprob.mps",
"unitcal_7.mps",
"var-smallemery-m6j6.mps"};
std::vector<std::string> instances = {"supportcase26_presolved.mps",
"supportcase26_presolved_2.mps",
"supportcase26_presolved_3.mps",
"supportcase26_presolved_4.mps",
"supportcase26_presolved_5.mps",
"supportcase26_presolved_6.mps",
"supportcase26_presolved_7.mps",
"supportcase26_presolved_8.mps"};
1 change: 1 addition & 0 deletions benchmarks/linear_programming/cuopt/run_mip.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,7 @@ int run_single_file(std::string file_path,
settings.log_to_console = log_to_console;
settings.tolerances.relative_tolerance = 1e-12;
settings.tolerances.absolute_tolerance = 1e-6;
settings.presolve = true;
cuopt::linear_programming::benchmark_info_t benchmark_info;
settings.benchmark_info_ptr = &benchmark_info;
auto start_run_solver = std::chrono::high_resolution_clock::now();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -72,8 +72,8 @@ class mip_solver_settings_t {

struct tolerances_t {
f_t presolve_absolute_tolerance = 1.0e-6;
f_t absolute_tolerance = 1.0e-4;
f_t relative_tolerance = 1.0e-6;
f_t absolute_tolerance = 1.0e-6;
f_t relative_tolerance = 1.0e-12;
f_t integrality_tolerance = 1.0e-5;
f_t absolute_mip_gap = 1.0e-10;
f_t relative_mip_gap = 1.0e-4;
Expand Down
4 changes: 2 additions & 2 deletions cpp/include/cuopt/logger.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ inline rapids_logger::logger& default_logger()
logger_.set_pattern(default_pattern());
#endif
logger_.set_level(default_level());
logger_.flush_on(rapids_logger::level_enum::info);
logger_.flush_on(rapids_logger::level_enum::debug);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Maybe we should keep the flush in the info option unless there is a performance penalty.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Debug is disabled in production, so there will be no performance penalty.


return logger_;
}();
Expand All @@ -100,7 +100,7 @@ inline void reset_default_logger()
default_logger().set_pattern(default_pattern());
#endif
default_logger().set_level(default_level());
default_logger().flush_on(rapids_logger::level_enum::info);
default_logger().flush_on(rapids_logger::level_enum::debug);
}

} // namespace cuopt
6 changes: 6 additions & 0 deletions cpp/src/dual_simplex/bound_flipping_ratio_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,11 @@ i_t bound_flipping_ratio_test_t<i_t, f_t>::single_pass(i_t start,
}
step_length = min_val;
nonbasic_entering = candidate;
// this should be temporary, find root causes where the candidate is not filled
if (nonbasic_entering == -1) {
// -1,-2 and -3 are reserved for other things
return -4;
}
Comment on lines +97 to +100
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This issue is tracked, right?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I will create an issue thanks!

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

const i_t j = entering_index = nonbasic_list_[nonbasic_entering];

constexpr bool verbose = false;
Expand Down Expand Up @@ -137,6 +142,7 @@ i_t bound_flipping_ratio_test_t<i_t, f_t>::compute_step_length(f_t& step_length,

i_t k_idx = single_pass(
0, num_breakpoints, indicies, ratios, slope, step_length, nonbasic_entering, entering_index);
if (k_idx == -4) { return -4; }
bool continue_search = k_idx >= 0 && num_breakpoints > 1 && slope > 0.0;
if (!continue_search) {
if constexpr (0) {
Expand Down
21 changes: 16 additions & 5 deletions cpp/src/dual_simplex/branch_and_bound.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -409,9 +409,12 @@ mip_status_t branch_and_bound_t<i_t, f_t>::solve(mip_solution_t<i_t, f_t>& solut
assert(root_vstatus.size() == original_lp.num_cols);
if (root_status == lp_status_t::INFEASIBLE) {
settings.log.printf("MIP Infeasible\n");
if (settings.heuristic_preemption_callback != nullptr) {
settings.heuristic_preemption_callback();
}
// FIXME: rarely dual simplex detects infeasible whereas it is feasible.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So if heuristics has a feasible solution, but branch and bound says it is infeasible, you take the feasible solution?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, that's what i wanted to do for now.

// to add a small safety net, check if there is a primal solution already.
// Uncomment this if the issue with cost266-UUE is resolved
// if (settings.heuristic_preemption_callback != nullptr) {
// settings.heuristic_preemption_callback();
// }
return mip_status_t::INFEASIBLE;
}
if (root_status == lp_status_t::UNBOUNDED) {
Expand All @@ -434,8 +437,16 @@ mip_status_t branch_and_bound_t<i_t, f_t>::solve(mip_solution_t<i_t, f_t>& solut
if (settings.set_simplex_solution_callback != nullptr) {
std::vector<f_t> original_x;
uncrush_primal_solution(original_problem, original_lp, root_relax_soln.x, original_x);
settings.set_simplex_solution_callback(original_x,
compute_user_objective(original_lp, root_objective));
std::vector<f_t> original_dual;
std::vector<f_t> original_z;
uncrush_dual_solution(original_problem,
original_lp,
root_relax_soln.y,
root_relax_soln.z,
original_dual,
original_z);
settings.set_simplex_solution_callback(
original_x, original_dual, compute_user_objective(original_lp, root_objective));
}
mutex_lower.lock();
f_t lower_bound = lower_bound_ = root_objective;
Expand Down
25 changes: 17 additions & 8 deletions cpp/src/dual_simplex/phase2.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1495,13 +1495,13 @@ void compute_delta_y(const basis_update_mpf_t<i_t, f_t>& ft,
}

template <typename i_t, typename f_t>
void update_dual_variables(const sparse_vector_t<i_t, f_t>& delta_y_sparse,
const std::vector<i_t>& delta_z_indices,
const std::vector<f_t>& delta_z,
f_t step_length,
i_t leaving_index,
std::vector<f_t>& y,
std::vector<f_t>& z)
i_t update_dual_variables(const sparse_vector_t<i_t, f_t>& delta_y_sparse,
const std::vector<i_t>& delta_z_indices,
const std::vector<f_t>& delta_z,
f_t step_length,
i_t leaving_index,
std::vector<f_t>& y,
std::vector<f_t>& z)
{
// Update dual variables
// y <- y + steplength * delta_y
Expand All @@ -1517,6 +1517,7 @@ void update_dual_variables(const sparse_vector_t<i_t, f_t>& delta_y_sparse,
z[j] += step_length * delta_z[j];
}
z[leaving_index] += step_length * delta_z[leaving_index];
return 0;
}

template <typename i_t, typename f_t>
Expand Down Expand Up @@ -2514,6 +2515,10 @@ dual::status_t dual_phase2(i_t phase,
delta_z_indices,
nonbasic_mark);
entering_index = bfrt.compute_step_length(step_length, nonbasic_entering_index);
if (entering_index == -4) {
settings.log.printf("Numerical issues encountered in ratio test.\n");
return dual::status_t::NUMERICAL;
}
timers.bfrt_time += timers.stop_timer();
} else {
entering_index = phase2::phase2_ratio_test(
Expand Down Expand Up @@ -2663,8 +2668,12 @@ dual::status_t dual_phase2(i_t phase,
// Update dual variables
// y <- y + steplength * delta_y
// z <- z + steplength * delta_z
phase2::update_dual_variables(
i_t update_dual_variables_status = phase2::update_dual_variables(
delta_y_sparse, delta_z_indices, delta_z, step_length, leaving_index, y, z);
if (update_dual_variables_status == -1) {
settings.log.printf("Numerical issues encountered in update_dual_variables.\n");
return dual::status_t::NUMERICAL;
}
timers.vector_time += timers.stop_timer();

#ifdef COMPUTE_DUAL_RESIDUAL
Expand Down
1 change: 1 addition & 0 deletions cpp/src/dual_simplex/presolve.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1134,6 +1134,7 @@ void uncrush_dual_solution(const user_problem_t<i_t, f_t>& user_problem,
std::vector<f_t>& user_y,
std::vector<f_t>& user_z)
{
user_y.resize(user_problem.num_rows);
// Reduced costs are uncrushed just like the primal solution
uncrush_primal_solution(user_problem, problem, z, user_z);

Expand Down
2 changes: 1 addition & 1 deletion cpp/src/dual_simplex/simplex_solver_settings.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ struct simplex_solver_settings_t {
i_t inside_mip; // 0 if outside MIP, 1 if inside MIP at root node, 2 if inside MIP at leaf node
std::function<void(std::vector<f_t>&, f_t)> solution_callback;
std::function<void()> heuristic_preemption_callback;
std::function<void(std::vector<f_t>&, f_t)> set_simplex_solution_callback;
std::function<void(std::vector<f_t>&, std::vector<f_t>&, f_t)> set_simplex_solution_callback;
mutable logger_t log;
std::atomic<i_t>* concurrent_halt; // if nullptr ignored, if !nullptr, 0 if solver should
// continue, 1 if solver should halt
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,17 +39,17 @@ pdlp_initial_scaling_strategy_t<i_t, f_t>::pdlp_initial_scaling_strategy_t(
problem_t<i_t, f_t>& op_problem_scaled,
i_t number_of_ruiz_iterations,
f_t alpha,
pdhg_solver_t<i_t, f_t>& pdhg_solver,
rmm::device_uvector<f_t>& A_T,
rmm::device_uvector<i_t>& A_T_offsets,
rmm::device_uvector<i_t>& A_T_indices,
pdhg_solver_t<i_t, f_t>* pdhg_solver_ptr,
bool running_mip)
: handle_ptr_(handle_ptr),
stream_view_(handle_ptr_->get_stream()),
primal_size_h_(op_problem_scaled.n_variables),
dual_size_h_(op_problem_scaled.n_constraints),
op_problem_scaled_(op_problem_scaled),
pdhg_solver_(pdhg_solver),
pdhg_solver_ptr_(pdhg_solver_ptr),
A_T_(A_T),
A_T_offsets_(A_T_offsets),
A_T_indices_(A_T_indices),
Expand Down Expand Up @@ -398,7 +398,7 @@ void pdlp_initial_scaling_strategy_t<i_t, f_t>::scale_problem()

op_problem_scaled_.is_scaled_ = true;
if (!running_mip_) {
scale_solutions(pdhg_solver_.get_primal_solution(), pdhg_solver_.get_dual_solution());
scale_solutions(pdhg_solver_ptr_->get_primal_solution(), pdhg_solver_ptr_->get_dual_solution());
}
}

Expand Down
Loading