|
PBeFS
Parallel Best-First Search
|
| PBeFS | |
| astar | |
| structures | |
| ads | |
| ConcurrentClosed.h | Header file for the class template ConcurrentClosed of the set of data structures of ADS [see Structures.h]: the nodes are kept in the ConcurrentFlatTable of ADS as a set of pointers compared by their states, a word of 8 bytes for each, which a lookup reads and an insertion fills by a compare-and-swap with no lock |
| ExplicitAdjacency.h | Header file for the class template ExplicitAdjacency of the set of data structures of ADS [see Structures.h], the arcs of a weighted graph, on the GraphBuilder of ADS, frozen into its ArrayGraph before the first visit; ExplicitGraph.h includes it in place of its own |
| GridAdjacency.h | Header file for the class template GridAdjacency of the set of data structures of ADS [see Structures.h], the moves from a cell of a GridMap and their costs, on the GridGraph of ADS, whose adjacency is computed from a copy of the costs of the cells and never stored, a move paying the cost of the cell it leaves; Grid.h includes it in place of its own |
| NodePool.h | Header file for the class template NodePool of the set of data structures of ADS [see Structures.h], the arena the nodes of A* are allocated from, on the Arena of ADS, on huge pages; Node.h includes it in place of its own |
| NodeTable.h | Header file for the class template NodeTable of the set of data structures of ADS [see Structures.h], the closed list of A*, on the PointerTable of ADS, on huge pages; NodeTable.h includes it in place of its own |
| OpenList.h | Header file for the 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.h | Header file for the class template AStar, the sequential A* search of Hart, Nilsson and Raphael (1968) |
| ConcurrentClosed.h | Header file for the 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] |
| DDDAStar.h | Header file for the class template DDDAStar, the A* search with delayed duplicate detection, whose OPEN and CLOSED lists are files on the disk: the External A* of Edelkamp, Jabbar and Schrödl (2004), with the hash-based delayed duplicate detection of Korf (2008) in place of the external sorts |
| Distribution.h | Header file for the 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] |
| Domain.h | Header file for the 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 |
| ExplicitGraph.h | Header file for the class template ExplicitAdjacency, the arcs of a weighted graph given one by one, and for the class template ExplicitGraph, which implements the Domain concept [see Domain.h] for such a graph, with a heuristic given node by node, such as the map of Romania of Russell and Norvig |
| FarmAStar.h | Header file for the class template FarmAStar, a centralized parallel A* written as a farm with feedback on an executor of ADS: a master holds OPEN and CLOSED, and the workers expand the nodes it sends them |
| Grid.h | Header file for the class GridMap, a map of cells with a cost of traversal, for the class template GridAdjacency, the free cells next to a cell of a GridMap, and for the class template Grid, which implements the Domain concept [see Domain.h] for pathfinding on a GridMap with 4 or 8 moves |
| HDAStar.h | Header file for the class template HDAStar, Hash Distributed A* on a shared-memory machine, whose workers run on an executor of ADS and exchange nodes through the mailbox of ADS on its channels |
| HDAStarMPI.h | Header file for the class template HDAStarMPI, Hash Distributed A* on a distributed-memory machine, with one MPI process per worker |
| IDAStar.h | Header file for the class template IDAStar, the iterative-deepening A* of Korf (1985), which finds an optimal path with a memory linear in its length: a depth-first search bounded by \( f = g + h \), repeated with the bound raised each time to the least \( f \) that exceeded it |
| MissionariesCannibals.h | Header file for the class MissionariesCannibals, which implements the Domain concept [see Domain.h] for the missionaries and cannibals problem of exercise 3.9 of Russell and Norvig, "Artificial Intelligence: A Modern Approach" (3rd edition, 2010), with m missionaries, c cannibals and a boat of b seats |
| MQAStar.h | Header file for the class template MQAStar, MultiQueue A*: the workers share one CLOSED list, as in SPAStar, and an OPEN list that is a relaxed priority queue, the MultiQueue of Rihani, Sanders and Dementiev, in place of a priority queue under one lock |
| Node.h | Header file for the class template Node, a node of the search graph, for the class template NodePool, the arena the nodes are allocated from, taken from the set of data structures chosen [see Structures.h], and for the infinite cost and the path to a goal |
| NodeTable.h | Header file for the 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] |
| NQueens.h | Header file for the class NQueens, which implements the Domain concept [see Domain.h] for the n-queens problem in the incremental formulation of section 3.2.1 of Russell and Norvig, "Artificial Intelligence: A Modern Approach" (3rd edition, 2010) |
| OpenList.h | Header file for the 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 |
| PASE.h | Header file for the class template PASE, Parallel A* for Slow Expansions of Phillips, Likhachev and Koenig (ICAPS 2014) |
| PatternDatabase.h | Header file for the pattern databases of the sliding-tile puzzles, i.e., the heuristics that store the exact distances of an abstraction of the puzzle |
| Romania.h | Header file for the class Romania, the road map of Romania of figure 3.2 of Russell and Norvig, "Artificial Intelligence: A Modern Approach" (3rd edition, 2010), as an ExplicitGraph [see ExplicitGraph.h] |
| SafePBNF.h | Header file for the class template SafePBNF, the livelock-free Parallel Best-NBlock-First search of Burns, Lemons, Ruml and Zhou (JAIR 2010) |
| SequenceScore.h | Header file for the class template SequenceScore, which implements the Domain concept [see Domain.h] for the sliding-tile puzzle with the sequence score heuristic of Nilsson, an inadmissible heuristic |
| SlidingTile.h | Header file for the class template SlidingTile, which implements the Domain concept [see Domain.h] for the sliding-tile puzzles with the Manhattan distance heuristic, and for the class Word128, the unsigned integer of 128 bits in which the boards of more than 16 cells are packed |
| SlowDomain.h | Header file for the class template SlowDomain, a Domain [see Domain.h] whose expansions are made artificially slow, to compare the searches when the expansion dominates their cost |
| Solution.h | Header file for the outcome of a search: the class template Solution, the statistics SearchStats collected on the way, and the SearchOptions shared by all the searches |
| SPAStar.h | Header file for the class template SPAStar, Simple Parallel A*: all the workers share one OPEN and one CLOSED list |
| Structures.h | Header file for the 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 |
| TravelingSalesman.h | Header file for the class TravelingSalesman, which implements the Domain concept [see Domain.h] for the traveling salesperson problem with the minimum spanning tree heuristic of exercise 3.30 of Russell and Norvig, "Artificial Intelligence: A Modern Approach" (3rd edition, 2010) |
| VacuumWorld.h | Header file for the class VacuumWorld, which implements the Domain concept [see Domain.h] for the vacuum world of section 3.2.1 of Russell and Norvig, "Artificial Intelligence: A Modern Approach" (3rd edition, 2010), on a row of n cells instead of 2 |
| WaterJugs.h | Header file for the class WaterJugs, which implements the Domain concept [see Domain.h] for the water jugs problem of exercise 3.6(d) of Russell and Norvig, "Artificial Intelligence: A Modern Approach" (3rd edition, 2010), which is the PourProblem of aima-python (github.com/aimacode/aima-python) |
| bnb | |
| BranchAndBound.h | Header file for the 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 |
| BranchAndBoundScheme.h | Header file for the 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 |
| DeterministicBranchAndBound.h | Header file for DeterministicBranchAndBound, the parallel Branch-and-Bound (B&B) by synchronous rounds, whose outcome does not depend on the timing of the workers |
| FarmBranchAndBound.h | Header file for FarmBranchAndBound, the master-worker Branch-and-Bound (B&B) on a farm with feedback on an executor of ADS: the master holds the queue of the open nodes, and the workers evaluate and branch the nodes it sends |
| Knapsack.h | Header file for the 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 |
| MPIBranchAndBound.h | 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] |
| MultiQueueBranchAndBound.h | Header file for MultiQueueBranchAndBound, the parallel Branch-and-Bound (B&B) whose workers share the open nodes in the MultiQueue of ADS, a relaxed priority queue of \( 2 p \) sequential queues each under its own lock, as the workers of MQAStar do |
| ParallelBranchAndBound.h | Header file for the 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 |
| SelfSplitBranchAndBound.h | Header file for SelfSplitBranchAndBound, the parallel Branch-and-Bound (B&B) whose workers share nothing but the nodes of a first sampling of the tree, as in the SelfSplit of Fischetti, Monaci and Salvagnin (2014) |
| StealingBranchAndBound.h | Header file for StealingBranchAndBound, the parallel Branch-and-Bound (B&B) whose workers keep the children they generate in a queue of their own and take about half of the queue of another worker only when theirs is empty, i.e., by work stealing |
| core | |
| SearchUtils.h | Header file for the 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.h | Header file that includes the graph searches of PBeFS save the one that needs MPI, HDAStarMPI.h |
| bnb.h | Header file that includes the 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 |
| core.h | Header file that includes the 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] |
| PBeFS.h | Header file that includes 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] |
| theory |