Commit 1e208da
authored
Parallel Branch-and-Bound (NVIDIA#412)
This PR implement a parallel branch-and-bound procedure, which is split into two phases. In the first phase, the algorithm will greedily expand the search tree until a certain depth and then add the bottom nodes to a global heap. The parallel expansion is implemented using `omp task`.
In the second phase, some threads will explore the tree using best first search with plunging, i.e., they take the first node from the global heap and then explore the entire branch that starts on this node. Any unexplored node are insert into the heap. The remaining threads will perform deep dives in order to find feasible solutions. The solver keep a small heap contains the most promising nodes to perform the dives, which is keep in sync with the global heap.
This PR also
- Replace the `std::thread`-based parallelization in the strong branching with OpenMP in order to use dynamic scheduling. This ensures that all threads have similar amount of work and improve parallel performance.
- Fixed invalid memory access when trying to access the status of a fathomed node.
- Replaced `std::mutex` with `omp atomic` whatever applicable.
- Added dedicated classes `dive_queue_t` and `search_tree_t` to store the diving heap and the search tree, respectively.
This is an extension of NVIDIA#305.
Closes NVIDIA#320.
Closes NVIDIA#417.
## Benchmark results (MIPLIB2017):
master branch (53d6e74)
```
Average Gap: 0.2174861712
```
This PR:
```
Average Gap: 0.1989485546
```
i.e., a `1.8%` improvement. In terms of the geomean of the gap ratio, this is equal to `1.62x`.
Authors:
- Nicolas L. Guidotti (https://github.com/nguidotti)
Approvers:
- Rajesh Gandham (https://github.com/rg20)
- Chris Maes (https://github.com/chris-maes)
URL: NVIDIA#4121 parent 3824f96 commit 1e208da
File tree
15 files changed
+1002
-598
lines changed- benchmarks/linear_programming/cuopt
- cpp/src
- dual_simplex
- math_optimization
- mip
- diversity
- recombiners
- local_search/rounding
- utilities
15 files changed
+1002
-598
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
36 | 36 | | |
37 | 37 | | |
38 | 38 | | |
| 39 | + | |
39 | 40 | | |
40 | 41 | | |
41 | 42 | | |
| |||
382 | 383 | | |
383 | 384 | | |
384 | 385 | | |
| 386 | + | |
| 387 | + | |
385 | 388 | | |
386 | 389 | | |
387 | 390 | | |
| |||
0 commit comments