|
PBeFS
Parallel Best-First Search
|
Header file for MPIBranchAndBound, the distributed Branch-and-Bound (B&B) with one MPI process per worker: each process has a queue of open nodes and sends the children to their owners, as DistributedBranchAndBound does with threads [see ParallelBranchAndBound.h] and HDAStarMPI with the states of A* [see HDAStarMPI.h]. More...
#include <cstdint>#include <cstring>#include <random>#include <span>#include <type_traits>#include <vector>#include <mpi.h>#include "ADS/distributed/MPIMailbox.h"#include "PBeFS/bnb/ParallelBranchAndBound.h"Go to the source code of this file.
Classes | |
| class | MPIBranchAndBoundSearch< P > |
| the distributed B&B with one MPI process per worker More... | |
Namespaces | |
| namespace | PBeFS_di_unipi_it |
| namespace for the Parallel Best-First Search library | |
Concepts | |
| concept | PBeFS_di_unipi_it::MPIBranchAndBound |
| a B&B problem whose nodes and values can travel between processes | |
Header file for MPIBranchAndBound, the distributed Branch-and-Bound (B&B) with one MPI process per worker: each process has a queue of open nodes and sends the children to their owners, as DistributedBranchAndBound does with threads [see ParallelBranchAndBound.h] and HDAStarMPI with the states of A* [see HDAStarMPI.h].
The problem, the options and the Solution are those of BranchAndBound.h and ParallelBranchAndBound.h, and the design is discussed in docs/branch-and-bound.md.
The search is the following, with the notation of the page "Parallel branch-and-bound" of the documentation, the procedures of the sequential search [see BranchAndBound.h] and DIVE of the parallel ones [see ParallelBranchAndBound.h], on the process \( i \) of \( p \), with its queue \( Q_i \), whose least bound is written βmin(Q_i), and the incumbent \( z \) known to it:
When no node of \( Q_i \) can improve \( z \) (lines 8 and 18) the nodes of \( Q_i \) become leaves (pruned), and after a stop the nodes left in \( Q_i \) are leaves (open), which bound the optimum. The end is detected by the four-counter method of Mattern in the mailbox of ADS, which by line 18 a process joins only when it has nothing to evaluate and nothing to send; every process gets the same incumbent, value and bound, and keeps the leaves that it owns.