|
PBeFS
Parallel Best-First Search
|
the options of a B&B with values of type V More...
#include <PBeFS/bnb/BranchAndBound.h>
Public Attributes | |
| Selection | selection = Selection::best_first |
| the order of the nodes | |
| V | abs_gap = V( 0 ) |
| the absolute tolerance on the gap | |
| double | rel_gap = 0 |
| the relative tolerance on the gap | |
| double | plunge_gap = 0.5 |
| how far from the best bound a dive goes | |
| std::optional< V > | incumbent |
| a known feasible value, if any | |
| std::function< V(void) > | shared_incumbent |
| a value that the search reads at each extraction and prunes by when it is better than its incumbent, e.g., the incumbent of other searches running at the same time; the Solution has only the feasible values that the search itself finds (or incumbent), so that it is infeasible when none of them is better than the values read, and its bound is still that of the subtrees searched | |
| std::size_t | node_limit = 0 |
| evaluated nodes (0 = no limit) | |
| double | time_limit = 0 |
| seconds (0 = no limit) | |
| bool | keep_frontier = false |
| keep the leaves of the tree explored | |
| std::function< void(V) > | on_incumbent |
| called with every new incumbent value (in a parallel search, by the worker that finds it, under a lock) | |
the options of a B&B with values of type V
A node is pruned when its bound cannot improve the incumbent \( z \) by more than the tolerance \( \max \{ \tau_a , \tau_r |z| \} \), \( \tau_a \) being abs_gap and \( \tau_r \) rel_gap, and the search ends when no open node can. With Selection::plunging, the best child of the node just branched is extracted next (a dive) if its bound is at most \( \underline{\beta} + \gamma ( z - \underline{\beta} ) \), \( \gamma \) being plunge_gap and \( \underline{\beta} \) the least open bound, and always while there is no incumbent. With keep_frontier, the Solution holds the leaves of the tree explored [see BBSolution], from which a later search can start again [see BranchAndBoundSearch::solve()].
| V abs_gap = V( 0 ) |
the absolute tolerance on the gap
| std::optional< V > incumbent |
a known feasible value, if any
| bool keep_frontier = false |
keep the leaves of the tree explored
| std::size_t node_limit = 0 |
evaluated nodes (0 = no limit)
| std::function< void( V ) > on_incumbent |
called with every new incumbent value (in a parallel search, by the worker that finds it, under a lock)
| double plunge_gap = 0.5 |
how far from the best bound a dive goes
| double rel_gap = 0 |
the relative tolerance on the gap
| Selection selection = Selection::best_first |
the order of the nodes
| std::function< V( void ) > shared_incumbent |
a value that the search reads at each extraction and prunes by when it is better than its incumbent, e.g., the incumbent of other searches running at the same time; the Solution has only the feasible values that the search itself finds (or incumbent), so that it is infeasible when none of them is better than the values read, and its bound is still that of the subtrees searched
| double time_limit = 0 |
seconds (0 = no limit)