Skip to content

Conversation

@rgsl888prabhu
Copy link
Collaborator

Forward merge from 25.05 to 25.08, for #20

chris-maes and others added 15 commits May 19, 2025 21:44
These errors were caused by all LPs in the batch sharing the same concurrent halt variable. This meant that the first LP to solve, forced all other LPs to halt. So it was possible that both PDLP and Dual Simplex solves returned with a ConcurrentLimit termination status. This should never happen normally.

For now, we fix this by disabling the Concurrent method in batch mode. We set the method to PDLP, if Concurrent was chosen, and tell the user to choose PDLP or Dual Simplex to avoid this warning in the future.

Authors:
  - Chris Maes (https://github.com/chris-maes)

Approvers:
  - Hugo Linsenmaier (https://github.com/hlinsen)

URL: NVIDIA/cuopt#17
There was a bug in pre_process_assignment function. During initial solve() we are doing preprocess and then trivial_presolve. That means, the free var replacements are added first then the variable eliminations are done. For that reason the user solution preprocessing should follow the same order.

The bug of set_solution is called multiple times in the tests if fixed: we should to pop the back solution after solution is being set, otherwise it will always be set.

The bug of he assignment resize is fixed: it should be called before the gather, if not the resize will enlarge it and it will have junk values, causing mismatch in objective costs and sometimes infeasible solutions.

This also changes a slight issue where we assign 2x for y and x for z when x is positive, for large initial values this might cause numerical issues, that's why we now assign x for y and 0 for z.

This PR also fixes the bug of empty solutions not being handled correctly after a presolve (previously we handled it only for trivial presolve).

Authors:
  - Akif ÇÖRDÜK (https://github.com/akifcorduk)

Approvers:
  - Hugo Linsenmaier (https://github.com/hlinsen)

URL: NVIDIA/cuopt#18
This PR removes the following build flags: 

1. cpp-mgtests:  This is unused
2. no-fetch-rapids:  This is broken in the latest version of rapids, this needs to be fixed to improve build times 
3. skip_l1_tests:   This is unused
4. d:  The development build flag is unused

Authors:
  - Rajesh Gandham (https://github.com/rg20)

Approvers:
  - Trevor McKay (https://github.com/tmckayus)

URL: NVIDIA/cuopt#15
This fixes a bug where the objective was not correctly set when an LP was determined to be dual infeasible / unbounded.

Authors:
  - Chris Maes (https://github.com/chris-maes)

Approvers:
  - Hugo Linsenmaier (https://github.com/hlinsen)
  - Rajesh Gandham (https://github.com/rg20)
  - Nicolas Blin (https://github.com/Kh4ster)

URL: NVIDIA/cuopt#19
…it (#23)

Also adds the --relaxation flag to cuopt_cli to solve the LP relaxation of a MIP

Authors:
  - Chris Maes (https://github.com/chris-maes)

Approvers:
  - Nicolas Blin (https://github.com/Kh4ster)

URL: NVIDIA/cuopt#23
This PR adds two things: 

1. Introduces a time limit for computing related variables. This function can take a lot of time for very large problems (in this case 20+ M variables).  Ideally, we need to speed up this with a better algo and fine tune for larger problems
2. Catch `std::bad_alloc` exceptions in solve function. Currently, we only catch `cuopt::logic_error`

Authors:
  - Rajesh Gandham (https://github.com/rg20)

Approvers:
  - Hugo Linsenmaier (https://github.com/hlinsen)

URL: NVIDIA/cuopt#22
This PR fixes occasional crashes seen in the regression tests caused by accesses to a global `lp_state_t` object across consecutive runs, becoming stale in later runs.

The object has been moved to `mip_solver_context_t`.

Authors:
  - Alice Boucher (https://github.com/aliceb-nv)

Approvers:
  - Rajesh Gandham (https://github.com/rg20)

URL: NVIDIA/cuopt#24
Since C does not have a boolean type, we need to allow `cuOptGetIntParameter` and `cuOptSetIntParameter` to work for boolean parameters as well.

On irish-electricity we had a bug where we were stopping PDLP early, due to a numerical error inside dual simplex. In concurrent mode we should only stop the other solver when we have reached a definitive conclusion on the problem.

Fix a bug in the Python docstrings found by Flora.

Also log whenever we change settings. And set the log pattern to `%v` outside the solve as well.

Authors:
  - Chris Maes (https://github.com/chris-maes)

Approvers:
  - Trevor McKay (https://github.com/tmckayus)
  - Rajesh Gandham (https://github.com/rg20)

URL: NVIDIA/cuopt#25
This PR fixes two issues:

1. Solution file generated by PDLP presented several JSON issues, was still mentioning ms for the solve time and was not handling the potential missing fields from Dual Simplex. To handle the last and so that user can know, a bool was added to know which solver solved the LP problem
2. The default value for binary time limit was an int resulting in a bad any cast in case it was not set

Authors:
  - Nicolas Blin (https://github.com/Kh4ster)
  - https://github.com/Iroy30

Approvers:
  - Alice Boucher (https://github.com/aliceb-nv)
  - https://github.com/Iroy30

URL: NVIDIA/cuopt#21
…rary fix add B&B solution directly (#27)

This PR fixes bugs in

- Preprocess in set callback function, the checks were done on the original assignment before preprocess, thus rejecting almost all set_solution calls.
- Line segment returning worse solutions because of bug.
- A side effect of LS returning worse solutions is that B&B added solutions are not added to the population as LS makes them worse.

Authors:
  - Akif ÇÖRDÜK (https://github.com/akifcorduk)

Approvers:
  - Alice Boucher (https://github.com/aliceb-nv)
  - Hugo Linsenmaier (https://github.com/hlinsen)

URL: NVIDIA/cuopt#27
…ns (#29)

Fixes an issue reported on the following MPS file, where `_dummy` variable does not appear in the constraints. We remove empty columns (and thus `_dummy`) in presolve for dual simplex. But do not take this into account when constructing the solution. 

Further work, is needed to develop an actual LP presolve. 

```
*SENSE:Minimize
NAME          test_export_dict_LP_no_obj
ROWS
 N  OBJ
 G  c1
 E  c2
 L  c3
 G  c4
COLUMNS
    __dummy   OBJ        1.000000000000e+00
    w         c4         1.000000000000e+00
    x         c1         1.000000000000e+00
    x         c2         1.000000000000e+00
    y         c1         1.000000000000e+00
    y         c3        -1.000000000000e+00
    z         c2         1.000000000000e+00
    z         c3         1.000000000000e+00
RHS
    RHS       c1         5.000000000000e+00
    RHS       c2         1.000000000000e+01
    RHS       c3         7.000000000000e+00
    RHS       c4         0.000000000000e+00
BOUNDS
 FX BND       __dummy    0.000000000000e+00
 FX BND       w          0.000000000000e+00
 UP BND       x          4.000000000000e+00
 LO BND       y         -1.000000000000e+00
 UP BND       y          1.000000000000e+00
```

Fixes #13  which was caused by an issue in column scaling when the norm of a column is zero.

Authors:
  - Chris Maes (https://github.com/chris-maes)

Approvers:
  - Rajesh Gandham (https://github.com/rg20)
  - Nicolas Blin (https://github.com/Kh4ster)

URL: NVIDIA/cuopt#29
The non-trivial presolve did not report optimality if the problem was fully reduced. Fixed by this PR

Closes rapidsai/cuopt#2507

Authors:
  - Alice Boucher (https://github.com/aliceb-nv)

Approvers:
  - Chris Maes (https://github.com/chris-maes)
  - Akif ÇÖRDÜK (https://github.com/akifcorduk)

URL: NVIDIA/cuopt#26
We are using 3.2 version of cpp-argparser from conda.  This PR updates the version to 3.2 for wheel builds as well.

Authors:
  - Rajesh Gandham (https://github.com/rg20)

Approvers:
  - Ramakrishnap (https://github.com/rgsl888prabhu)

URL: NVIDIA/cuopt#31
Should fix the interment CI issue we were seeing in batch mode

It was possible for another CPU thread to call cudaMemcpyToSymbol while another was trying to capture on its stream. Solved by switching to the async API and use stream so that the call doesn't end up on the default stream.

Authors:
  - Nicolas Blin (https://github.com/Kh4ster)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Akif ÇÖRDÜK (https://github.com/akifcorduk)
  - Ramakrishnap (https://github.com/rgsl888prabhu)

URL: NVIDIA/cuopt#34
Rapids is moving away from cuda11 support soon and we don't have particular request to support on cuda11. So removing support for cuda 11.

This PR removes cuda 11 related dependencies, documentation and ci testing.

Authors:
  - Ramakrishnap (https://github.com/rgsl888prabhu)

Approvers:
  - Rajesh Gandham (https://github.com/rg20)
  - Trevor McKay (https://github.com/tmckayus)

URL: NVIDIA/cuopt#32
@rgsl888prabhu rgsl888prabhu requested review from a team as code owners May 23, 2025 16:42
@rgsl888prabhu rgsl888prabhu requested review from akifcorduk, kaatish and tmckayus and removed request for a team May 23, 2025 16:42
@rgsl888prabhu rgsl888prabhu added non-breaking Introduces a non-breaking change improvement Improves an existing functionality labels May 23, 2025
@AyodeAwe AyodeAwe merged commit 369417e into NVIDIA:branch-25.08 May 23, 2025
52 of 58 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

improvement Improves an existing functionality non-breaking Introduces a non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants