Skip to content

Commit 526aed5

Browse files
authored
Merge branch 'main' into c++_20_support
2 parents 864fd2c + 5879493 commit 526aed5

File tree

28 files changed

+447
-257
lines changed

28 files changed

+447
-257
lines changed

.coderabbit.yaml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@
1515

1616
reviews:
1717
profile: chill
18-
high_level_summary: false
18+
high_level_summary: true
1919
auto_review:
20-
enabled: false
20+
enabled: true
2121
drafts: false
2222
ignore_usernames: ["rapids-bot", "GPUtester", "nv-automation-bot", "copy-pr-bot"]
2323
tools:
24-
eslint:
24+
markdownlint:
25+
enabled: true
26+
shellcheck:
2527
enabled: true
2628
gitleaks:
2729
enabled: true
30+
sequence_diagrams: false
Lines changed: 80 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,21 @@
1-
=====================
2-
Release Notes
3-
=====================
1+
# Release Notes
42

5-
====================
6-
Release Notes 25.10
7-
====================
3+
## Release Notes 25.10
84

9-
New Features (25.10)
10-
--------------------
5+
### New Features (25.10)
116

127
- New barrier method for solving LPs. Uses cuDSS for sparse Cholesky / LDT.
138
- Concurrent mode for LPs now uses PDLP, dual simplex, and barrier
149
- New PDLP solver mode Stable3.
1510
- MIP presolve using Papilo (enabled by default). LP presolve using Papilo (optional).
1611
- Parallel branch and bound on the CPU: multiple best-first search and diving threads
1712

18-
Breaking Changes (25.10)
19-
------------------------
13+
### Breaking Changes (25.10)
2014

2115
- New PDLP Solver mode Stable3 is the default
2216

2317

24-
Improvements (25.10)
25-
--------------------
18+
### Improvements (25.10)
2619

2720
- Add setting "CUOPT_BARRIER_DUAL_INITIAL_POINT" to change the dual initial point used by barrier
2821
- CPUFJ for local search + simple rounding
@@ -60,8 +53,7 @@ Improvements (25.10)
6053
- This library now supports the QPS format, which is an extension of the standard MPS format for representing quadratic programming problems.
6154

6255

63-
Bug Fixes (25.10)
64-
-----------------
56+
### Bug Fixes (25.10)
6557

6658
- Fix variables out of bounds caused by CPUFJ LP scratch thread
6759
- Fix the maybe-uninitialized compilation error
@@ -76,8 +68,7 @@ Bug Fixes (25.10)
7668
- Empty columns with infinite bounds are not removed
7769

7870

79-
Documentation (25.10)
80-
---------------------
71+
### Documentation (25.10)
8172

8273
- Add tutorial video links to Decompression
8374
- Add warmstart, model update, update docs
@@ -89,99 +80,86 @@ Documentation (25.10)
8980
- Doc update for container version update, and add ``nvidia-cuda-runtime`` as a dependency
9081

9182

92-
====================
93-
Release Notes 25.08
94-
====================
95-
96-
97-
New Features (25.08)
98-
--------------------
99-
100-
- Added Python API for LP and MILP (`#223 <https://github.com/NVIDIA/cuopt/pull/223>`_)
101-
102-
Breaking Changes (25.08)
103-
------------------------
104-
105-
- Fixed versioning for nightly and release package (`#175 <https://github.com/NVIDIA/cuopt/pull/175>`_)
106-
107-
Improvements (25.08)
108-
--------------------
109-
110-
- New heuristic improvements (`#178 <https://github.com/NVIDIA/cuopt/pull/178>`_)
111-
- Add helm chart for cuOpt service (`#224 <https://github.com/NVIDIA/cuopt/pull/224>`_)
112-
- Add nightly container support (`#180 <https://github.com/NVIDIA/cuopt/pull/180>`_)
113-
- Adding deb package support as a beta feature (`#190 <https://github.com/NVIDIA/cuopt/pull/190>`_)
114-
- Use cusparsespmv_preprocess() now that Raft implements it (`#120 <https://github.com/NVIDIA/cuopt/pull/120>`_)
115-
- Create a bash script to run MPS files in parallel (`#87 <https://github.com/NVIDIA/cuopt/pull/87>`_)
116-
- Several fixes needed to compile cuOpt with LLVM (`#121 <https://github.com/NVIDIA/cuopt/pull/121>`_)
117-
- Small fixes for corner cases (`#130 <https://github.com/NVIDIA/cuopt/pull/130>`_)
118-
- Small improvements on how paths are handled in tests (`#129 <https://github.com/NVIDIA/cuopt/pull/129>`_)
119-
- Update cxxopts to v3.3.1 (`#128 <https://github.com/NVIDIA/cuopt/pull/128>`_)
120-
- Bump actions/checkout in nightly.yaml to v4 (`#230 <https://github.com/NVIDIA/cuopt/pull/230>`_)
121-
- Remove CUDA 11 specific changes from repo (`#222 <https://github.com/NVIDIA/cuopt/pull/222>`_)
122-
- Heuristic improvements with solution hash, MAB and simplex root solution (`#216 <https://github.com/NVIDIA/cuopt/pull/216>`_)
123-
- Various typos in comments and strings, note on result dir (`#200 <https://github.com/NVIDIA/cuopt/pull/200>`_)
124-
- Split very large tests into smaller individual test cases (`#152 <https://github.com/NVIDIA/cuopt/pull/152>`_)
125-
- Fix compile error when using clang with C++20 (`#145 <https://github.com/NVIDIA/cuopt/pull/145>`_)
126-
- Relax pinnings on several dependencies, remove nvidia channel (`#125 <https://github.com/NVIDIA/cuopt/pull/125>`_)
127-
- Fix compile error when building with clang (`#119 <https://github.com/NVIDIA/cuopt/pull/119>`_)
128-
- cuOpt service add healthcheck for / (`#114 <https://github.com/NVIDIA/cuopt/pull/114>`_)
129-
- refactor(shellcheck): fix all remaining shellcheck errors/warnings (`#99 <https://github.com/NVIDIA/cuopt/pull/99>`_)
130-
- Add CTK 12.9 fatbin flags to maintain existing binary sizes (`#58 <https://github.com/NVIDIA/cuopt/pull/58>`_)
131-
132-
Bug Fixes (25.08)
133-
-----------------
134-
135-
- Fixed a segfault on bnatt500 due to small mu leading to inf/nan (`#254 <https://github.com/NVIDIA/cuopt/pull/254>`_)
136-
- Fixed a bug in basis repair. Recover from numerical issues in primal update (`#249 <https://github.com/NVIDIA/cuopt/pull/249>`_)
137-
- Unset NDEBUG in cmake in assert mode (`#248 <https://github.com/NVIDIA/cuopt/pull/248>`_)
138-
- Manual cuda graph creation in load balanced bounds presolve (`#242 <https://github.com/NVIDIA/cuopt/pull/242>`_)
139-
- Fixed bug on initial solution size in the check and cuda set device order (`#226 <https://github.com/NVIDIA/cuopt/pull/226>`_)
140-
- Disable cuda graph in batched PDLP (`#225 <https://github.com/NVIDIA/cuopt/pull/225>`_)
141-
- Fix logging levels format with timestamps (`#201 <https://github.com/NVIDIA/cuopt/pull/201>`_)
142-
- Fix bug in scaling of dual slacks and sign of dual variables for >= constraints (`#191 <https://github.com/NVIDIA/cuopt/pull/191>`_)
143-
- Fix inversion crossover bug with PDP and prize collection (`#179 <https://github.com/NVIDIA/cuopt/pull/179>`_)
144-
- Fix a bug in extract_best_per_route kernel (`#156 <https://github.com/NVIDIA/cuopt/pull/156>`_)
145-
- Fix several bugs appeared in unit testing of JuMP interface (`#149 <https://github.com/NVIDIA/cuopt/pull/149>`_)
146-
- Fix incorrect reported solving time (`#131 <https://github.com/NVIDIA/cuopt/pull/131>`_)
147-
- Fix max offset (`#113 <https://github.com/NVIDIA/cuopt/pull/113>`_)
148-
- Fix batch graph capture issue caused by pinned memory allocator (`#110 <https://github.com/NVIDIA/cuopt/pull/110>`_)
149-
- Fix bug in optimization_problem_solution_t::copy_from (`#109 <https://github.com/NVIDIA/cuopt/pull/109>`_)
150-
- Fix issue when problem has an empty problem in PDLP (`#107 <https://github.com/NVIDIA/cuopt/pull/107>`_)
151-
- Fix crash on models with variables but no constraints (`#105 <https://github.com/NVIDIA/cuopt/pull/105>`_)
152-
- Fix inversion of constraint bounds in conditional bounds presolve (`#75 <https://github.com/NVIDIA/cuopt/pull/75>`_)
153-
- Fix data initialization in create depot node for max travel time feature (`#74 <https://github.com/NVIDIA/cuopt/pull/74>`_)
154-
155-
Documentation (25.08)
156-
---------------------
157-
158-
- Added more pre-commit checks to ensure coding standards (`#213 <https://github.com/NVIDIA/cuopt/pull/213>`_)
159-
- Mention GAMS and GAMSPy in third-party modeling languages page in documentation (`#206 <https://github.com/NVIDIA/cuopt/pull/206>`_)
160-
- Enable doc build workflow and build script for PR and Nightly (`#203 <https://github.com/NVIDIA/cuopt/pull/203>`_)
161-
- Fix the link to Python docs in README (`#118 <https://github.com/NVIDIA/cuopt/pull/118>`_)
162-
- Add link checker for doc build and test (`#229 <https://github.com/NVIDIA/cuopt/pull/229>`_)
163-
164-
====================
165-
Release Notes 25.05
166-
====================
167-
168-
New Features (25.05)
169-
--------------------
83+
## Release Notes 25.08
84+
85+
### New Features (25.08)
86+
87+
- Added Python API for LP and MILP ([#223](https://github.com/NVIDIA/cuopt/pull/223))
88+
89+
### Breaking Changes (25.08)
90+
91+
- Fixed versioning for nightly and release package ([#175](https://github.com/NVIDIA/cuopt/pull/175))
92+
93+
### Improvements (25.08)
94+
95+
- New heuristic improvements ([#178](https://github.com/NVIDIA/cuopt/pull/178))
96+
- Add helm chart for cuOpt service ([#224](https://github.com/NVIDIA/cuopt/pull/224))
97+
- Add nightly container support ([#180](https://github.com/NVIDIA/cuopt/pull/180))
98+
- Adding deb package support as a beta feature ([#190](https://github.com/NVIDIA/cuopt/pull/190))
99+
- Use cusparsespmv_preprocess() now that Raft implements it ([#120](https://github.com/NVIDIA/cuopt/pull/120))
100+
- Create a bash script to run MPS files in parallel ([#87](https://github.com/NVIDIA/cuopt/pull/87))
101+
- Several fixes needed to compile cuOpt with LLVM ([#121](https://github.com/NVIDIA/cuopt/pull/121))
102+
- Small fixes for corner cases ([#130](https://github.com/NVIDIA/cuopt/pull/130))
103+
- Small improvements on how paths are handled in tests ([#129](https://github.com/NVIDIA/cuopt/pull/129))
104+
- Update cxxopts to v3.3.1 ([#128](https://github.com/NVIDIA/cuopt/pull/128))
105+
- Bump actions/checkout in nightly.yaml to v4 ([#230](https://github.com/NVIDIA/cuopt/pull/230))
106+
- Remove CUDA 11 specific changes from repo ([#222](https://github.com/NVIDIA/cuopt/pull/222))
107+
- Heuristic improvements with solution hash, MAB and simplex root solution ([#216](https://github.com/NVIDIA/cuopt/pull/216))
108+
- Various typos in comments and strings, note on result dir ([#200](https://github.com/NVIDIA/cuopt/pull/200))
109+
- Split very large tests into smaller individual test cases ([#152](https://github.com/NVIDIA/cuopt/pull/152))
110+
- Fix compile error when using clang with C++20 ([#145](https://github.com/NVIDIA/cuopt/pull/145))
111+
- Relax pinnings on several dependencies, remove nvidia channel ([#125](https://github.com/NVIDIA/cuopt/pull/125))
112+
- Fix compile error when building with clang ([#119](https://github.com/NVIDIA/cuopt/pull/119))
113+
- cuOpt service add healthcheck for / ([#114](https://github.com/NVIDIA/cuopt/pull/114))
114+
- refactor(shellcheck): fix all remaining shellcheck errors/warnings ([#99](https://github.com/NVIDIA/cuopt/pull/99))
115+
- Add CTK 12.9 fatbin flags to maintain existing binary sizes ([#58](https://github.com/NVIDIA/cuopt/pull/58))
116+
117+
### Bug Fixes (25.08)
118+
119+
- Fixed a segfault on bnatt500 due to small mu leading to inf/nan ([#254](https://github.com/NVIDIA/cuopt/pull/254))
120+
- Fixed a bug in basis repair. Recover from numerical issues in primal update ([#249](https://github.com/NVIDIA/cuopt/pull/249))
121+
- Unset NDEBUG in cmake in assert mode ([#248](https://github.com/NVIDIA/cuopt/pull/248))
122+
- Manual cuda graph creation in load balanced bounds presolve ([#242](https://github.com/NVIDIA/cuopt/pull/242))
123+
- Fixed bug on initial solution size in the check and cuda set device order ([#226](https://github.com/NVIDIA/cuopt/pull/226))
124+
- Disable cuda graph in batched PDLP ([#225](https://github.com/NVIDIA/cuopt/pull/225))
125+
- Fix logging levels format with timestamps ([#201](https://github.com/NVIDIA/cuopt/pull/201))
126+
- Fix bug in scaling of dual slacks and sign of dual variables for >= constraints ([#191](https://github.com/NVIDIA/cuopt/pull/191))
127+
- Fix inversion crossover bug with PDP and prize collection ([#179](https://github.com/NVIDIA/cuopt/pull/179))
128+
- Fix a bug in extract_best_per_route kernel ([#156](https://github.com/NVIDIA/cuopt/pull/156))
129+
- Fix several bugs appeared in unit testing of JuMP interface ([#149](https://github.com/NVIDIA/cuopt/pull/149))
130+
- Fix incorrect reported solving time ([#131](https://github.com/NVIDIA/cuopt/pull/131))
131+
- Fix max offset ([#113](https://github.com/NVIDIA/cuopt/pull/113))
132+
- Fix batch graph capture issue caused by pinned memory allocator ([#110](https://github.com/NVIDIA/cuopt/pull/110))
133+
- Fix bug in optimization_problem_solution_t::copy_from ([#109](https://github.com/NVIDIA/cuopt/pull/109))
134+
- Fix issue when problem has an empty problem in PDLP ([#107](https://github.com/NVIDIA/cuopt/pull/107))
135+
- Fix crash on models with variables but no constraints ([#105](https://github.com/NVIDIA/cuopt/pull/105))
136+
- Fix inversion of constraint bounds in conditional bounds presolve ([#75](https://github.com/NVIDIA/cuopt/pull/75))
137+
- Fix data initialization in create depot node for max travel time feature ([#74](https://github.com/NVIDIA/cuopt/pull/74))
138+
139+
### Documentation (25.08)
140+
141+
- Added more pre-commit checks to ensure coding standards ([#213](https://github.com/NVIDIA/cuopt/pull/213))
142+
- Mention GAMS and GAMSPy in third-party modeling languages page in documentation ([#206](https://github.com/NVIDIA/cuopt/pull/206))
143+
- Enable doc build workflow and build script for PR and Nightly ([#203](https://github.com/NVIDIA/cuopt/pull/203))
144+
- Fix the link to Python docs in README ([#118](https://github.com/NVIDIA/cuopt/pull/118))
145+
- Add link checker for doc build and test ([#229](https://github.com/NVIDIA/cuopt/pull/229))
146+
147+
## Release Notes 25.05
148+
149+
### New Features (25.05)
170150

171151
- Added concurrent mode that runs PDLP and Dual Simplex together
172152
- Added crossover from PDLP to Dual Simplex
173153
- Added a C API for LP and MILP
174154
- PDLP: Faster iterations and new more robust default PDLPSolverMode Stable2
175155
- Added support for writing out mps file containing user problem. Useful for debugging
176156

177-
Breaking Changes (25.05)
178-
------------------------
157+
### Breaking Changes (25.05)
179158

180159
- NoTermination is now a NumericalError
181160
- Split cuOpt as libcuopt and cuopt wheel
182161

183-
Improvements (25.05)
184-
--------------------
162+
### Improvements (25.05)
185163

186164
- Hook up MILP Gap parameters and add info about number of nodes explored and simplex iterations
187165
- FJ bug fixes, tests and improvements
@@ -194,8 +172,7 @@ Improvements (25.05)
194172
- Logger file handling and bug fixes on MILP
195173
- Add shellcheck to pre-commit and fix warnings
196174

197-
Bug Fixes (25.05)
198-
-----------------
175+
### Bug Fixes (25.05)
199176

200177
- In the solution, ``termination_status`` should be cast to correct enum.
201178
- Fixed a bug using vehicle IDs in construct feasible solution algorithm.
@@ -218,6 +195,6 @@ Bug Fixes (25.05)
218195
- Fix obj constant on max. Fix undefined memory access at root
219196
- Allow long client version in service version check, this fixes the issue in case version is of the format 25.05.00.dev0
220197

221-
Documentation (25.05)
222-
---------------------
223-
- Restructure documementation to accomdate new APIs
198+
### Documentation (25.05)
199+
200+
- Restructure documentation to accommodate new APIs

RELEASE_NOTES.md

Lines changed: 0 additions & 1 deletion
This file was deleted.

benchmarks/linear_programming/utils/get_datasets.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -693,7 +693,7 @@ def extract(file, dir, type):
693693
raise Exception(f"Unknown file extension found for extraction {file}")
694694
# download emps and compile
695695
# Disable emps for now
696-
if type == "netlib":
696+
if type == "netlib" and False:
697697
url = MittelmannInstances["emps"]
698698
file = os.path.join(dir, "emps.c")
699699
download(url, file)

ci/build_wheel_libcuopt.sh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,6 @@ EXCLUDE_ARGS=(
7979
--exclude "librapids_logger.so"
8080
--exclude "libmps_parser.so"
8181
--exclude "librmm.so"
82-
--exclude "libpapilo-core.a"
8382
)
8483

8584
ci/build_wheel.sh libcuopt ${package_dir}

conda/recipes/libcuopt/recipe.yaml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,6 @@ outputs:
131131
script:
132132
content: |
133133
cmake --install cpp/build
134-
# Remove papilo _deps directory from cmake files
135-
rm -rf "${PREFIX}/lib/cmake/papilo/_deps"
136134
dynamic_linking:
137135
overlinking_behavior: "error"
138136
prefix_detection:

cpp/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,7 @@ FetchContent_Declare(
191191
#we can switch to the main branch.
192192
GIT_TAG "741a2b9c8155b249d6df574d758b4d97d4417520"
193193
GIT_PROGRESS TRUE
194+
EXCLUDE_FROM_ALL
194195
SYSTEM
195196
)
196197

cpp/src/dual_simplex/barrier.cu

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3575,6 +3575,9 @@ lp_status_t barrier_solver_t<i_t, f_t>::solve(f_t start_time,
35753575
} catch (const raft::cuda_error& e) {
35763576
settings.log.debug("Error in barrier_solver_t: %s\n", e.what());
35773577
return lp_status_t::NUMERICAL_ISSUES;
3578+
} catch (const rmm::out_of_memory& e) {
3579+
settings.log.debug("Out of memory in barrier_solver_t: %s\n", e.what());
3580+
return lp_status_t::NUMERICAL_ISSUES;
35783581
}
35793582
}
35803583

cpp/src/linear_programming/solve.cu

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
#include <mip/presolve/third_party_presolve.hpp>
2929
#include <mip/presolve/trivial_presolve.cuh>
3030
#include <mip/solver.cuh>
31+
#include <mip/utilities/sort_csr.cuh>
3132

3233
#include <cuopt/linear_programming/pdlp/pdlp_hyper_params.cuh>
3334
#include <cuopt/linear_programming/pdlp/solver_settings.hpp>
@@ -444,7 +445,7 @@ optimization_problem_solution_t<i_t, f_t> run_barrier(
444445
{
445446
// Convert data structures to dual simplex format and back
446447
dual_simplex::user_problem_t<i_t, f_t> dual_simplex_problem =
447-
cuopt_problem_to_simplex_problem<i_t, f_t>(problem);
448+
cuopt_problem_to_simplex_problem<i_t, f_t>(problem.handle_ptr, problem);
448449
auto sol_dual_simplex = run_barrier(dual_simplex_problem, settings, timer);
449450
return convert_dual_simplex_sol(problem,
450451
std::get<0>(sol_dual_simplex),
@@ -515,7 +516,7 @@ optimization_problem_solution_t<i_t, f_t> run_dual_simplex(
515516
{
516517
// Convert data structures to dual simplex format and back
517518
dual_simplex::user_problem_t<i_t, f_t> dual_simplex_problem =
518-
cuopt_problem_to_simplex_problem<i_t, f_t>(problem);
519+
cuopt_problem_to_simplex_problem<i_t, f_t>(problem.handle_ptr, problem);
519520
auto sol_dual_simplex = run_dual_simplex(dual_simplex_problem, settings, timer);
520521
return convert_dual_simplex_sol(problem,
521522
std::get<0>(sol_dual_simplex),
@@ -671,16 +672,14 @@ optimization_problem_solution_t<i_t, f_t> run_concurrent(
671672
// Initialize the dual simplex structures before we run PDLP.
672673
// Otherwise, CUDA API calls to the problem stream may occur in both threads and throw graph
673674
// capture off
674-
auto barrier_handle = raft::handle_t(*op_problem.get_handle_ptr());
675-
detail::problem_t<i_t, f_t> d_barrier_problem(problem);
675+
auto barrier_handle = raft::handle_t(*op_problem.get_handle_ptr());
676676
rmm::cuda_stream_view barrier_stream = rmm::cuda_stream_per_thread;
677-
d_barrier_problem.handle_ptr = &barrier_handle;
678677
raft::resource::set_cuda_stream(barrier_handle, barrier_stream);
679678
// Make sure allocations are done on the original stream
680679
problem.handle_ptr->sync_stream();
681680

682681
dual_simplex::user_problem_t<i_t, f_t> dual_simplex_problem =
683-
cuopt_problem_to_simplex_problem<i_t, f_t>(d_barrier_problem);
682+
cuopt_problem_to_simplex_problem<i_t, f_t>(&barrier_handle, problem);
684683
// Create a thread for dual simplex
685684
std::unique_ptr<
686685
std::tuple<dual_simplex::lp_solution_t<i_t, f_t>, dual_simplex::lp_status_t, f_t, f_t, f_t>>
@@ -837,24 +836,24 @@ optimization_problem_solution_t<i_t, f_t> solve_lp(optimization_problem_t<i_t, f
837836
if (!run_presolve) { CUOPT_LOG_INFO("Third-party presolve is disabled, skipping"); }
838837

839838
if (run_presolve) {
839+
detail::sort_csr(op_problem);
840840
// allocate no more than 10% of the time limit to presolve.
841841
// Note that this is not the presolve time, but the time limit for presolve.
842842
// But no less than 1 second, to avoid early timeout triggering known crashes
843843
const double presolve_time_limit =
844844
std::max(1.0, std::min(0.1 * lp_timer.remaining_time(), 60.0));
845-
presolver = std::make_unique<detail::third_party_presolve_t<i_t, f_t>>();
846-
auto [reduced_problem, feasible] =
847-
presolver->apply(op_problem,
848-
cuopt::linear_programming::problem_category_t::LP,
849-
settings.dual_postsolve,
850-
settings.tolerances.absolute_primal_tolerance,
851-
settings.tolerances.relative_primal_tolerance,
852-
presolve_time_limit);
853-
if (!feasible) {
845+
presolver = std::make_unique<detail::third_party_presolve_t<i_t, f_t>>();
846+
auto result = presolver->apply(op_problem,
847+
cuopt::linear_programming::problem_category_t::LP,
848+
settings.dual_postsolve,
849+
settings.tolerances.absolute_primal_tolerance,
850+
settings.tolerances.relative_primal_tolerance,
851+
presolve_time_limit);
852+
if (!result.has_value()) {
854853
return optimization_problem_solution_t<i_t, f_t>(
855854
pdlp_termination_status_t::PrimalInfeasible, op_problem.get_handle_ptr()->get_stream());
856855
}
857-
problem = detail::problem_t<i_t, f_t>(reduced_problem);
856+
problem = detail::problem_t<i_t, f_t>(result->reduced_problem);
858857
presolve_time = lp_timer.elapsed_time();
859858
CUOPT_LOG_INFO("Papilo presolve time: %f", presolve_time);
860859
}

0 commit comments

Comments
 (0)