|
PBeFS
Parallel Best-First Search
|
| PBeFS.h | All of PBeFS, the library of Parallel Best-First Search, save the parts that need an external library: its core [see core.h], the graph searches of A* [see astar.h] and the tree searches of Branch-and-Bound [see bnb.h] |
| core | The helpers and the parameters of the parallel searches, which do not depend on the kind of search |
| Headers of the layer | |
| core.h | Core of PBeFS, i.e., what does not depend on the kind of search: the helpers and the parameters of the parallel searches [see SearchUtils.h] |
| Helpers | |
| core/SearchUtils.h | Small helpers shared by the searches: a stopwatch, the placement of the workers on the CPUs and their run on an executor, a prefetch, and the random numbers of the workers; the mixing of the bits of a word, the backoff of the waiting workers, the placement on the CPUs and the allocator of huge pages are those of ADS |
| astar | The graph searches of A*, sequential and parallel, with their domains, work distributions and data structures |
| Headers of the layer | |
| astar.h | Graph searches of PBeFS save the one that needs MPI, HDAStarMPI.h |
| Searches | |
| astar/AStar.h | Sequential A* over a Domain, with the OPEN list Open |
| astar/IDAStar.h | The iterative-deepening A* search of a Domain |
| astar/DDDAStar.h | The A* search of a Domain with delayed duplicate detection on the disk |
| astar/HDAStar.h | Hash Distributed A* on a shared-memory machine |
| astar/SPAStar.h | Simple Parallel A*: one OPEN and one CLOSED list shared by the workers |
| astar/MQAStar.h | MultiQueue A*: one relaxed OPEN list and one CLOSED list shared by the workers |
| astar/SafePBNF.h | Safe Parallel Best-NBlock-First search |
| astar/PASE.h | Parallel A* for Slow Expansions |
| astar/FarmAStar.h | A master-worker parallel A* on a farm with feedback |
| astar/HDAStarMPI.h | Hash Distributed A* with one MPI process per worker |
| Work distributions | |
| astar/Distribution.h | Work distribution functions of hash-based parallel A*: each one maps a state to its owner among p workers [see section 6 of Fukunaga et al., 2017, and Jinnai and Fukunaga, JAIR 2017] |
| Domains | |
| astar/Domain.h | Concepts a search problem has to satisfy in order to be searched by the algorithms of the library, and for the few type helpers built upon them |
| astar/SlidingTile.h | The sliding-tile puzzle on a board of at most 25 cells |
| astar/PatternDatabase.h | Pattern databases of the sliding-tile puzzles, i.e., the heuristics that store the exact distances of an abstraction of the puzzle |
| astar/Grid.h | Pathfinding on a GridMap with 4 (Moves == 4) or 8 (Moves == 8) moves |
| astar/ExplicitGraph.h | A weighted graph given explicitly, searched from a source to a target |
| astar/SlowDomain.h | A Domain whose expansions cost a given amount of extra work |
| astar/SequenceScore.h | The sliding-tile puzzle with the sequence score heuristic of Nilsson |
| astar/Romania.h | A trip on the road map of Romania |
| astar/NQueens.h | The n-queens problem, with at most 32 queens |
| astar/VacuumWorld.h | The vacuum world on a row of at most 32 cells |
| astar/MissionariesCannibals.h | The missionaries and cannibals problem |
| astar/WaterJugs.h | The water jugs problem, with up to 4 jugs of at most 65535 units |
| astar/TravelingSalesman.h | The traveling salesperson problem on at most 32 cities |
| Data structures | |
| astar/Node.h | A node of the search graph |
| astar/NodeTable.h | Class template NodeTable, the closed list of the searches: a map from the generated states to their canonical Node, taken from the set of data structures chosen [see Structures.h] |
| astar/structures/ads/NodeTable.h | The closed list, on the PointerTable of ADS, on huge pages |
| astar/structures/ads/ConcurrentClosed.h | The closed list shared by the workers, a lock-free set of the nodes |
| astar/ConcurrentClosed.h | Class template ConcurrentClosed, the closed list that the workers of SPAStar and MQAStar share, taken from the set of data structures chosen [see Structures.h] |
| astar/structures/ads/OpenList.h | Priority queues of the OPEN list of the set of data structures of ADS [see Structures.h], HeapOpenList and BucketOpenList, on the DaryHeap and the BucketQueue of ADS; OpenList.h includes it in place of its own, with the same order of the entries but for the ties of f and g |
| astar/OpenList.h | Priority queues of the OPEN list, taken from the set of data structures chosen [see Structures.h]: the class templates HeapOpenList, a heap for any cost type, and BucketOpenList, a two-level bucket queue for integer costs, and their entries |
| astar/Structures.h | Choice of the set of data structures of A*: the arena of the nodes (NodePool), the closed list (NodeTable), the OPEN lists (HeapOpenList and BucketOpenList) and the adjacency of the explicit graphs and of the grids |
| Results | |
| astar/Solution.h | A path from the initial state to a goal, and its cost |
| Helpers | |
| astar/structures/ads/ExplicitAdjacency.h | The arcs of a weighted graph, on the GraphBuilder and ArrayGraph of ADS |
| astar/structures/ads/GridAdjacency.h | The moves from a cell of a GridMap and their costs, on the GridGraph of ADS |
| astar/structures/ads/NodePool.h | The arena of the nodes, on the Arena of ADS, on huge pages |
| Documentation | The pages on the theory and on the design of the layer |
| Best-first search and A* | |
| Parallel A* | |
| Pattern databases | |
| bnb | The tree searches of branch-and-bound, sequential and parallel, and their choice by scheme |
| Headers of the layer | |
| bnb.h | Tree searches of PBeFS, i.e., the best-first searches with an incumbent (Branch-and-Bound) of a problem satisfying the concept BranchAndBound, save the one that needs MPI, MPIBranchAndBound.h |
| Searches | |
| bnb/BranchAndBound.h | Best-first search with an incumbent, i.e., for Branch-and-Bound (B&B): the concept BranchAndBound of a problem, its options and its Solution, the queue of the open nodes, and the sequential search BranchAndBoundSearch |
| bnb/ParallelBranchAndBound.h | Parallel best-first searches with an incumbent, i.e., the parallel Branch-and-Bound (B&B) on an executor of ADS (the pool of C++ threads, OpenMP or FastFlow): SharedBranchAndBound, whose workers extract the nodes from one queue as the workers of SPA* do, and DistributedBranchAndBound, whose workers have a queue each and send the children to their owners as the workers of HDA* do |
| bnb/DeterministicBranchAndBound.h | The parallel B&B by synchronous rounds |
| bnb/StealingBranchAndBound.h | The parallel B&B by work stealing |
| bnb/MultiQueueBranchAndBound.h | The parallel B&B on the MultiQueue of ADS |
| bnb/SelfSplitBranchAndBound.h | The parallel B&B by a split of the tree after a sampling |
| bnb/FarmBranchAndBound.h | The master-worker B&B on a farm with feedback |
| bnb/MPIBranchAndBound.h | 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] |
| Schemes | |
| bnb/BranchAndBoundScheme.h | Choice of the Branch-and-Bound (B&B) by its scheme: BBScheme names the searches of the core of PBeFS, bb_scheme() reads it from its name (e.g., from a file of parameters), and parallel_branch_and_bound() runs the search of the scheme of the options on a runtime, so that a caller chooses the search by a value rather than by a type |
| Problems | |
| bnb/Knapsack.h | Struct template BasicKnapsack, a 0-1 knapsack problem that implements the BranchAndBound concept [see BranchAndBound.h] with values of a given type, and Knapsack, the one with values of type double, with the random instances of the classes of Pisinger and the dynamic program that gives their optimal value; the tests and the benchmark of the Branch-and-Bound share it |
| Documentation | The pages on the theory and on the design of the layer |
| Branch-and-bound as best-first search | |
| Parallel branch-and-bound | |
| Best-first search with an incumbent: design note |