PBeFS
Parallel Best-First Search
Loading...
Searching...
No Matches
BasicParallelBBOptions< V > Struct Template Reference

the options of the parallel B&B with values of type V More...

#include <PBeFS/bnb/ParallelBranchAndBound.h>

Inheritance diagram for BasicParallelBBOptions< V >:
BasicBBOptions< double > ParallelParams

Public Member Functions

 BasicParallelBBOptions (void)
Public Member Functions inherited from ParallelParams
void normalize (void) noexcept
 sets to 1 any parameter that is 0

Public Attributes

std::size_t round = 0
 the nodes evaluated at each round of the deterministic search, 0 for one per worker [see DeterministicBranchAndBound]
std::size_t split = 0
 the open nodes per worker at which the sampling of the SelfSplit search stops, 0 for 4 [see SelfSplitBranchAndBound]
bool split_dive = true
 true if the sampling of the SelfSplit search ends with a dive from its first open node to a leaf, whose incumbent the workers start from [see SelfSplitBranchAndBound]
bool split_shared = false
 true if the workers of the SelfSplit search share their incumbent, which prunes more but makes the nodes evaluated depend on the timing [see SelfSplitBranchAndBound]
Public Attributes inherited from BasicBBOptions< double >
Selection selection
 the order of the nodes
double abs_gap
 the absolute tolerance on the gap
double rel_gap
 the relative tolerance on the gap
double plunge_gap
 how far from the best bound a dive goes
std::optional< double > incumbent
 a known feasible value, if any
std::function< double(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
 evaluated nodes (0 = no limit)
double time_limit
 seconds (0 = no limit)
bool keep_frontier
 keep the leaves of the tree explored
std::function< void(double) > on_incumbent
 called with every new incumbent value (in a parallel search, by the worker that finds it, under a lock)
Public Attributes inherited from ParallelParams
unsigned threads = 1
 the number of workers
std::size_t batch = 64
 nodes packed in a message
unsigned flush_period = 64
 steps between flushes of outboxes
std::uint64_t seed = 1
 seed of the owners

Detailed Description

template<class V = double>
struct PBeFS_di_unipi_it::BasicParallelBBOptions< V >

the options of the parallel B&B with values of type V

Those of the sequential search, and the parameters of the parallel ones [see ParallelParams], with batches of 16 nodes flushed at every evaluation, since an evaluation is usually "expensive"; node_limit bounds the evaluations of all the workers together, batch is used by the searches that send nodes (the distributed, the farm and the MPI ones), flush_period by the distributed and the MPI ones, and seed gives the owners of the nodes when the problem gives no hash( n ), while round is used by the deterministic search only and split by the SelfSplit one.

Constructor & Destructor Documentation

◆ BasicParallelBBOptions()

template<class V = double>
BasicParallelBBOptions ( void )
inline

Member Data Documentation

◆ round

template<class V = double>
std::size_t round = 0

the nodes evaluated at each round of the deterministic search, 0 for one per worker [see DeterministicBranchAndBound]

◆ split

template<class V = double>
std::size_t split = 0

the open nodes per worker at which the sampling of the SelfSplit search stops, 0 for 4 [see SelfSplitBranchAndBound]

◆ split_dive

template<class V = double>
bool split_dive = true

true if the sampling of the SelfSplit search ends with a dive from its first open node to a leaf, whose incumbent the workers start from [see SelfSplitBranchAndBound]

◆ split_shared

template<class V = double>
bool split_shared = false

true if the workers of the SelfSplit search share their incumbent, which prunes more but makes the nodes evaluated depend on the timing [see SelfSplitBranchAndBound]


The documentation for this struct was generated from the following file: