Exploring monotone priority queues for Dijkstra optimization

Abstract

The Shortest Path Problem (SPP) is one of the most significant problems in combinatorial optimization. Beyond the vast number of direct applications, the SPP frequently serves as a subroutine in solving other optimization problems. This paper presents a comprehensive review of monotone priority queues, a class of data structures that play a crucial role in solving the SPP efficiently. Monotone priority queues are characterized by the property that their minimum key does not decrease over time, making them particularly effective for label-setting algorithms like Dijkstra’s. Some key data structures within this category are explored, emphasizing those derived directly from Dial’s algorithm, including variations of multi-level bucket structures and radix heaps. Theoretical complexities and practical considerations of these structures are discussed, with insights into their development and refinement provided through a historical timeline.

Locations

  • RAIRO - Operations Research
  • arXiv (Cornell University)

Ask a Question About This Paper

Summary

This paper presents a comprehensive overview of monotone priority queues and their pivotal role in optimizing Dijkstra’s shortest path algorithm. Its significance lies in detailing how exploiting specific properties of the shortest path problem, particularly the non-decreasing nature of extracted keys and the assumption of non-negative integer edge weights, leads to highly efficient priority queue implementations. These specialized data structures often outperform general-purpose priority queues in this domain.

The central innovation explored is the concept of a monotone priority queue, defined as one where the minimum key extracted never decreases over time. This property is inherently met by label-setting algorithms like Dijkstra’s, making these tailored priority queues highly effective.

Key innovations discussed include:

  1. Dial’s 1-Level Bucket Structure: This foundational innovation implicitly uses a monotone priority queue. It organizes elements into an array of “buckets,” where each bucket B[i] holds vertices whose current shortest path distance from the source is i. The algorithm simply extracts from the lowest-indexed non-empty bucket. This simple design, exploiting the integer nature and non-decreasing property of distances, provides a base complexity of O(m + nC), where m is the number of edges, n the number of vertices, and C is the maximum arc weight.

  2. Multi-Level Bucket Structures: To improve upon Dial’s algorithm, specifically to reduce the cost of scanning many empty buckets during extract-min operations, multi-level structures were developed.

    • 2-Level Buckets (Denardo & Fox): This innovation introduced a hierarchy, typically with a top level of √C + 1 buckets, each containing √C + 1 bottom-level buckets. This reduces the search for the next minimum element from O(C) to O(√C), yielding a Dijkstra complexity of O(m + n√C).
    • k-Level Buckets: Generalizing the 2-level approach, this structure further reduces the dependence on C to O(C^(1/k)) for k levels, leading to complexities like O(km + n(k + C^(1/k))). Modern implementations often use bit manipulation and the RAM model to achieve even better theoretical bounds, sometimes reaching O(m + nC) for practical purposes by cleverly packing information.
  3. Hot Queues (Cherkassky et al.): This innovation combines the benefits of bucket structures with a general-purpose heap (like a Fibonacci heap or Thorup’s heap). The idea is to direct elements to the heap if the active bucket in the multi-level structure contains few elements, thereby avoiding expensive “expansions” or reorganizations that occur when a small bucket needs to be distributed into a lower level. This hybrid approach aims for strong amortized theoretical bounds while maintaining practical efficiency.

  4. Radix Heaps (Ahuja et al.): Distinct from simple bucket structures, radix heaps exploit the property that successive extracted minimum keys are non-decreasing. They employ buckets with exponentially increasing widths (e.g., powers of 2). This allows for efficient insertion and decrease-key operations by mapping keys to appropriate variable-width buckets. Two-level radix heaps further improved performance, bringing Dijkstra’s complexity to O(m + n log(C)/log log(C)). Integrating these with Fibonacci heaps further refined the search for non-empty inner buckets.

  5. Theoretical Limits and RAM Model Optimizations (Thorup): Landmark work by Thorup demonstrated that with the assumption of the Random Access Machine (RAM) model and integer keys, Dijkstra’s algorithm can achieve nearly linear time. This involves sophisticated bit manipulation and insights into the equivalence between sorting and monotone priority queues, pushing the theoretical boundaries for these specialized data structures to O(m log log(n)) or even O(m + n log log(C)) under certain conditions.

The main prior ingredients that these innovations build upon are:

  • Dijkstra’s Algorithm: The fundamental shortest path algorithm itself, which forms the problem context and the target for optimization.
  • Basic Priority Queue Operations: The standard insert, delete, extract-min, and crucially, decrease-key operations, which are fundamental to Dijkstra’s label-setting process.
  • Comparison-Based Priority Queues: Standard data structures like binary heaps (providing O(log n) per operation) and more advanced Fibonacci heaps (achieving O(1) amortized for insert/decrease-key and O(log n) amortized for extract-min), which served as baselines for performance comparison and were sometimes integrated into hybrid structures (like hot queues).
  • Integer Edge Weights and Bounded Maximum Weight (C): A critical assumption for the efficiency of all bucket-based and radix-based priority queues. The ability to use key values directly as array indices or to divide the key range into a fixed number of buckets is contingent on keys being non-negative integers with a known maximum C.
  • The RAM Model: This computational model, which assumes constant-time access to memory locations and basic arithmetic/bitwise operations, is essential for achieving the advanced theoretical bounds seen in radix heaps and Thorup’s work.
  • Moore’s Algorithm: An early predecessor to Dial’s work, providing an initial framework for shortest path calculation that implicitly used some form of bucket organization.
This paper presents a comprehensive overview of monotone priority queues, focusing on their evolution and application in shortest path algorithms. Monotone priority queues are characterized by the property that their … This paper presents a comprehensive overview of monotone priority queues, focusing on their evolution and application in shortest path algorithms. Monotone priority queues are characterized by the property that their minimum key does not decrease over time, making them particularly effective for label-setting algorithms like Dijkstra's. Some key data structures within this category are explored, emphasizing those derived directly from Dial's algorithm, including variations of multi-level bucket structures and radix heaps. Theoretical complexities and practical considerations of these structures are discussed, with insights into their development and refinement provided through a historical timeline.
We introduce the Targeted Multiobjective Dijkstra Algorithm (T‐MDA), a label setting algorithm for the One‐to‐One Multiobjective Shortest Path (MOSP) Problem. It is based on the recently published Multiobjective Dijkstra Algorithm … We introduce the Targeted Multiobjective Dijkstra Algorithm (T‐MDA), a label setting algorithm for the One‐to‐One Multiobjective Shortest Path (MOSP) Problem. It is based on the recently published Multiobjective Dijkstra Algorithm (MDA) and equips it with A*‐like techniques. For any explored subpath, a label setting MOSP algorithm decides whether the subpath can be discarded or must be stored as part of the output. A major design choice is how to store subpaths from the moment they are first explored until the mentioned final decision can be made. The T‐MDA combines the polynomially bounded size of the priority queue used in the MDA and a lazy management of paths that are not in the queue. The running time bounds from the MDA remain valid. In practice, the T‐MDA outperforms known algorithms from the literature and the increased memory consumption is negligible. In this paper, we benchmark the T‐MDA against an improved version of the state of the art One‐to‐One MOSP algorithm from the literature on a standard testbed.
In this paper, we introduce the Targeted Multiobjective Dijkstra Algorithm (T-MDA), a label setting algorithm for the One-to-One Multiobjective Shortest Path (MOSP) Problem. The T-MDA is based on the recently … In this paper, we introduce the Targeted Multiobjective Dijkstra Algorithm (T-MDA), a label setting algorithm for the One-to-One Multiobjective Shortest Path (MOSP) Problem. The T-MDA is based on the recently published Multiobjective Dijkstra Algorithm (MDA) and equips it with A*-like techniques. The resulting speedup is comparable to the speedup that the original A* algorithm achieves for Dijkstra's algorithm. Unlike other methods from the literature, which rely on special properties of the biobjective case, the T-MDA works for any dimension. To the best of our knowledge, it gives rise to the first efficient implementation that can deal with large scale instances with more than two objectives. A version tuned for the biobjective case, the T-BDA, outperforms state-of-the-art methods on almost every instance of a standard benchmark testbed that is not solvable in fractions of a second.
The classic problem of constrained pathfinding is a well-studied, yet challenging, topic in AI with a broad range of applications in various areas such as communication and transportation. The Weight … The classic problem of constrained pathfinding is a well-studied, yet challenging, topic in AI with a broad range of applications in various areas such as communication and transportation. The Weight Constrained Shortest Path Problem (WCSPP), the base form of constrained pathfinding with only one side constraint, aims to plan a cost-optimum path with limited weight/resource usage. Given the bi-criteria nature of the problem (i.e., dealing with the cost and weight of paths), methods addressing the WCSPP have some common properties with bi-objective search. This paper leverages the recent state-of-the-art techniques in both constrained pathfinding and bi-objective search and presents two new solution approaches to the WCSPP on the basis of A* search, both capable of solving hard WCSPP instances on very large graphs. We empirically evaluate the performance of our algorithms on a set of large and realistic problem instances and show their advantages over the state-of-the-art algorithms in both time and space metrics. This paper also investigates the importance of priority queues in constrained search with A*. We show with extensive experiments on both realistic and randomised graphs how bucket-based queues without tie-breaking can effectively improve the algorithmic performance of exhaustive A*-based bi-criteria searches.
Using Dijkstra's algorithm to compute the shortest paths in a graph from a single source node to all other nodes is common practice in industry and academia. Although the original … Using Dijkstra's algorithm to compute the shortest paths in a graph from a single source node to all other nodes is common practice in industry and academia. Although the original description of the algorithm advises using a Fibonacci Heap as its internal queue, it has been noted that in practice, a binary (or $d$-ary) heap implementation is significantly faster. This paper introduces an even faster queue design for the algorithm. Our experimental results currently put our prototype implementation at about twice as fast as the Boost implementation of the algorithm on both real-world and generated large graphs. Furthermore, this preliminary implementation was written in only a few weeks, by a single programmer. The fact that such an early prototype compares favorably against Boost, a well-known open source library developed by expert programmers, gives us reason to believe our design for the queue is indeed better suited to the problem at hand, and the favorable time measurements are not a product of any specific implementation technique we employed.
Using Dijkstra's algorithm to compute the shortest paths in a graph from a single source node to all other nodes is common practice in industry and academia. Although the original … Using Dijkstra's algorithm to compute the shortest paths in a graph from a single source node to all other nodes is common practice in industry and academia. Although the original description of the algorithm advises using a Fibonacci Heap as its internal queue, it has been noted that in practice, a binary (or $d$-ary) heap implementation is significantly faster. This paper introduces an even faster queue design for the algorithm. Our experimental results currently put our prototype implementation at about twice as fast as the Boost implementation of the algorithm on both real-world and generated large graphs. Furthermore, this preliminary implementation was written in only a few weeks, by a single programmer. The fact that such an early prototype compares favorably against Boost, a well-known open source library developed by expert programmers, gives us reason to believe our design for the queue is indeed better suited to the problem at hand, and the favorable time measurements are not a product of any specific implementation technique we employed.
We introduce the Multiobjective Dijkstra A* (MDA*) algorithm, a label setting algorithm for the One-to-One Multiobjective Shortest Path Problem that guides the search toward the target node. For the design … We introduce the Multiobjective Dijkstra A* (MDA*) algorithm, a label setting algorithm for the One-to-One Multiobjective Shortest Path Problem that guides the search toward the target node. For the design of our new algorithm, we combine the recently published Biobjective and Multiobjective Dijkstra algorithms (B/MDA) with the ideas used to design the classical A* algorithm for Shortest Path problems. Thus, our algorithm requires a monotone node heuristic as part of its input. For any node, the heuristic underestimates the costs of a path from this node to the target node of the search. Paths in the priority queue are then sorted according to the sum of their costs and the value of the heuristic at their final node. The direct implication is that paths that are closer to the target are processed earlier. Together with some pruning techniques, the number of iterations needed to solve the given One-to-One MOSP instances can be drastically reduced. In our computational experiments, we use different types of three dimensional instances to show that the MDA* algorithm clearly outperforms the MDA.
In this article, we study the Adjacent Quadratic Shortest Path Problem (AQSPP), which consists in finding the shortest path on a directed graph when its total weight component also includes … In this article, we study the Adjacent Quadratic Shortest Path Problem (AQSPP), which consists in finding the shortest path on a directed graph when its total weight component also includes the impact of consecutive arcs. We provide a formal description of the AQSPP and propose an extension of Dijkstra's algorithm (that we denote aqD) for solving AQSPPs in polynomial-time and provide a proof for its correctness under some mild assumptions. Furthermore, we introduce an adjacent quadratic A* algorithm (that we denote aqA*) with a backward search for cost-to-go estimation to speed up the search. We assess the performance of both algorithms by comparing their relative performance with benchmark algorithms from the scientific literature and carry out a thorough collection of sensitivity analysis of the methods on a set of problem characteristics using randomly generated graphs. Numerical results suggest that: (i) aqA* outperforms all other algorithms, with a performance being about 75 times faster than aqD and the fastest alternative; (ii) the proposed solution procedures do not lose efficiency when the magnitude of quadratic costs vary; (iii) aqA* and aqD are fastest on random graph instances, compared with benchmark algorithms from scientific literature. We conclude the numerical experiments by presenting a stress test of the AQSPP in the context of real grid graph instances, with sizes up to $16 \times 10^6$ nodes, $64 \times 10^6$ arcs, and $10^9$ quadratic arcs.
In this article, we study the Adjacent Quadratic Shortest Path Problem (AQSPP), which consists in finding the shortest path on a directed graph when its total weight component also includes … In this article, we study the Adjacent Quadratic Shortest Path Problem (AQSPP), which consists in finding the shortest path on a directed graph when its total weight component also includes the impact of consecutive arcs. We provide a formal description of the AQSPP and propose an extension of Dijkstra's algorithm (that we denote aqD) for solving AQSPPs in polynomial-time and provide a proof for its correctness under some mild assumptions. Furthermore, we introduce an adjacent quadratic A* algorithm (that we denote aqA*) with a backward search for cost-to-go estimation to speed up the search. We assess the performance of both algorithms by comparing their relative performance with benchmark algorithms from the scientific literature and carry out a thorough collection of sensitivity analysis of the methods on a set of problem characteristics using randomly generated graphs. Numerical results suggest that: (i) aqA* outperforms all other algorithms, with a performance being about 75 times faster than aqD and the fastest alternative; (ii) the proposed solution procedures do not lose efficiency when the magnitude of quadratic costs vary; (iii) aqA* and aqD are fastest on random graph instances, compared with benchmark algorithms from scientific literature. We conclude the numerical experiments by presenting a stress test of the AQSPP in the context of real grid graph instances, with sizes up to $16 \times 10^6$ nodes, $64 \times 10^6$ arcs, and $10^9$ quadratic arcs.
Abstract The classic problem of constrained pathfinding is a well‐studied, yet challenging, network optimization problem with a broad range of applications in various areas such as communication and transportation. The … Abstract The classic problem of constrained pathfinding is a well‐studied, yet challenging, network optimization problem with a broad range of applications in various areas such as communication and transportation. The weight constrained shortest path problem (WCSPP), the base form of constrained pathfinding with only one side constraint, aims to plan a cost‐optimum path with limited weight/resource usage. Given the bi‐criteria nature of the problem (i.e., dealing with the cost and weight of paths), methods addressing the WCSPP have some common properties with bi‐objective search. This article leverages the recent state‐of‐the‐art techniques in both constrained pathfinding and bi‐objective search and presents two new solution approaches to the WCSPP on the basis of A* search, both capable of solving hard WCSPP instances on very large graphs. We empirically evaluate the performance of our algorithms on a set of large and realistic problem instances and show their advantages over the state‐of‐the‐art algorithms in both time and space metrics. This article also investigates the importance of priority queues in constrained search with A*. We show with extensive experiments on both realistic and randomized graphs how bucket‐based queues without tie‐breaking can effectively improve the algorithmic performance of exhaustive A*‐based bi‐criteria searches.
A shortest-path algorithm finds a path containing the minimal cost between two vertices in a graph. A plethora of shortest-path algorithms is studied in the literature that span across multiple … A shortest-path algorithm finds a path containing the minimal cost between two vertices in a graph. A plethora of shortest-path algorithms is studied in the literature that span across multiple disciplines. This paper presents a survey of shortest-path algorithms based on a taxonomy that is introduced in the paper. One dimension of this taxonomy is the various flavors of the shortest-path problem. There is no one general algorithm that is capable of solving all variants of the shortest-path problem due to the space and time complexities associated with each algorithm. Other important dimensions of the taxonomy include whether the shortest-path algorithm operates over a static or a dynamic graph, whether the shortest-path algorithm produces exact or approximate answers, and whether the objective of the shortest-path algorithm is to achieve time-dependence or is to only be goal directed. This survey studies and classifies shortest-path algorithms according to the proposed taxonomy. The survey also presents the challenges and proposed solutions associated with each category in the taxonomy.
In the Multi-Agent Path Finding (MAPF) problem, a set of agents moving on a graph must reach their own respective destinations without inter-agent collisions. In practical MAPF applications such as … In the Multi-Agent Path Finding (MAPF) problem, a set of agents moving on a graph must reach their own respective destinations without inter-agent collisions. In practical MAPF applications such as navigation in automated warehouses, where occasionally there are hundreds or more agents, MAPF must be solved iteratively online on a lifelong basis. Such scenarios rule out simple adaptations of offline compute-intensive optimal approaches; and scalable sub-optimal algorithms are hence appealing for such settings. Ideal algorithms are scalable, applicable to iterative scenarios, and output plausible solutions in predictable computation time. For the aforementioned purpose, this study presents Priority Inheritance with Backtracking (PIBT), a novel sub-optimal algorithm to solve MAPF iteratively. PIBT relies on an adaptive prioritization scheme to focus on the adjacent movements of multiple agents; hence it can be applied to several domains. We prove that, regardless of their number, all agents are guaranteed to reach their destination within finite time when the environment is a graph such that all pairs of adjacent nodes belong to a simple cycle (e.g., biconnected). Experimental results covering various scenarios, including a demonstration with real robots, reveal the benefits of the proposed method. Even with hundreds of agents, PIBT yields acceptable solutions almost immediately and can solve large instances that other established MAPF methods cannot. In addition, PIBT outperforms an existing approach on an iterative scenario of conveying packages in an automated warehouse in both runtime and solution quality.
A shortest-path algorithm finds a path containing the minimal cost between two vertices in a graph. A plethora of shortest-path algorithms is studied in the literature that span across multiple … A shortest-path algorithm finds a path containing the minimal cost between two vertices in a graph. A plethora of shortest-path algorithms is studied in the literature that span across multiple disciplines. This paper presents a survey of shortest-path algorithms based on a taxonomy that is introduced in the paper. One dimension of this taxonomy is the various flavors of the shortest-path problem. There is no one general algorithm that is capable of solving all variants of the shortest-path problem due to the space and time complexities associated with each algorithm. Other important dimensions of the taxonomy include whether the shortest-path algorithm operates over a static or a dynamic graph, whether the shortest-path algorithm produces exact or approximate answers, and whether the objective of the shortest-path algorithm is to achieve time-dependence or is to only be goal directed. This survey studies and classifies shortest-path algorithms according to the proposed taxonomy. The survey also presents the challenges and proposed solutions associated with each category in the taxonomy.
The heap is a basic data structure used in a wide variety of applications, including shortest path and minimum spanning tree algorithms. In this paper we explore the design space … The heap is a basic data structure used in a wide variety of applications, including shortest path and minimum spanning tree algorithms. In this paper we explore the design space of comparison-based, amortized-efficient heap implementations. From a consideration of dynamic single-elimination tournaments, we obtain the binomial queue, a classical heap implementation, in a simple and natural way. We give four equivalent ways of representing heaps arising from tournaments, and we obtain two new variants of binomial queues, a one-tree version and a one-pass version. We extend the one-pass version to support key decrease operations, obtaining the {\em rank-pairing heap}, or {\em rp-heap}. Rank-pairing heaps combine the performance guarantees of Fibonacci heaps with simplicity approaching that of pairing heaps. Like pairing heaps, rank-pairing heaps consist of trees of arbitrary structure, but these trees are combined by rank, not by list position, and rank changes, but not structural changes, cascade during key decrease operations.
The heap is a basic data structure used in a wide variety of applications, including shortest path and minimum spanning tree algorithms. In this paper we explore the design space … The heap is a basic data structure used in a wide variety of applications, including shortest path and minimum spanning tree algorithms. In this paper we explore the design space of comparison-based, amortized-efficient heap implementations. From a consideration of dynamic single-elimination tournaments, we obtain the binomial queue, a classical heap implementation, in a simple and natural way. We give four equivalent ways of representing heaps arising from tournaments, and we obtain two new variants of binomial queues, a one-tree version and a one-pass version. We extend the one-pass version to support key decrease operations, obtaining the {\em rank-pairing heap}, or {\em rp-heap}. Rank-pairing heaps combine the performance guarantees of Fibonacci heaps with simplicity approaching that of pairing heaps. Like pairing heaps, rank-pairing heaps consist of trees of arbitrary structure, but these trees are combined by rank, not by list position, and rank changes, but not structural changes, cascade during key decrease operations.
18: Vorlesung | 00:00:07 Tiefensuche 00:00:27 Tiefensuchschema fur G = (V,E) 00:01:21 DFS-Baum 00:01:22 Fertigstellungszeit 00:01:26 DFS-Nummerierung 00:01:43 Topologische Sortierung 00:01:50 Topologische Sortieren mittels DFS 00:01:58 Kap. 10: Kurzeste Wege … 18: Vorlesung | 00:00:07 Tiefensuche 00:00:27 Tiefensuchschema fur G = (V,E) 00:01:21 DFS-Baum 00:01:22 Fertigstellungszeit 00:01:26 DFS-Nummerierung 00:01:43 Topologische Sortierung 00:01:50 Topologische Sortieren mittels DFS 00:01:58 Kap. 10: Kurzeste Wege 00:02:00 BFS – DFS 00:02:30 Anwendungen 00:02:42 Kantengewichte groser gleich Null 00:02:52 Dijkstras Algorithmus 00:02:57 Allgemeine Definitionen 00:03:07 Kante (u,v) relaxieren 00:03:53 Dijkstras Algorithmus: Pseudocode 00:05:04 Korrektheit 00:19:14 Implementierung? 00:20:34 Prioritatsliste 00:21:37 Implementierung BFS mit PQ statt FIFO 00:25:48 Beispiel 00:29:06 Dijkstra: Laufzeit 00:32:19 Laufzeit 00:38:41 Analyse im Mittel 00:39:30 Monotone ganzzahlige Prioritatslisten 00:40:41 Negative Kosten 00:41:51 Zuruck zu Basiskonzepten (Abschnitt 10.1 im Buch) 00:44:40 Mehr Basiskonzepte
We address the single source shortest path planning problem (SSSP) in the case of floating point edge weights. We show how any integer based Dijkstra solution that relies on a … We address the single source shortest path planning problem (SSSP) in the case of floating point edge weights. We show how any integer based Dijkstra solution that relies on a monotone integer priority queue to create a full ordering over path lengths in order to solve integer SSSP can be used as an oracle to solve floating point SSSP with positive edge weights (floating point P-SSSP). Floating point P-SSSP is of particular interest to the robotics community. This immediately yields a handful of faster runtimes for floating point P-SSSP; for example, ${O({m + n\log \log \frac{C}δ})}$, where $C$ is the largest weight and $δ$ is the minimum edge weight in the graph. It also ensures that many future advances for integer SSSP will be transferable to floating point P-SSSP.
We study prioritized planning for Multi-Agent Path Finding (MAPF). Existing prioritized MAPF algorithms depend on rule-of-thumb heuristics and random assignment to determine a fixed total priority ordering of all agents … We study prioritized planning for Multi-Agent Path Finding (MAPF). Existing prioritized MAPF algorithms depend on rule-of-thumb heuristics and random assignment to determine a fixed total priority ordering of all agents a priori. We instead explore the space of all possible partial priority orderings as part of a novel systematic and conflict-driven combinatorial search framework. In a variety of empirical comparisons, we demonstrate state-of-the-art solution qualities and success rates, often with similar runtimes to existing algorithms. We also develop new theoretical results that explore the limitations of prioritized planning, in terms of completeness and optimality, for the first time.
We study prioritized planning for Multi-Agent Path Finding (MAPF). Existing prioritized MAPF algorithms depend on rule-of-thumb heuristics and random assignment to determine a fixed total priority ordering of all agents … We study prioritized planning for Multi-Agent Path Finding (MAPF). Existing prioritized MAPF algorithms depend on rule-of-thumb heuristics and random assignment to determine a fixed total priority ordering of all agents a priori. We instead explore the space of all possible partial priority orderings as part of a novel systematic and conflict-driven combinatorial search framework. In a variety of empirical comparisons, we demonstrate state-of-the-art solution qualities and success rates, often with similar runtimes to existing algorithms. We also develop new theoretical results that explore the limitations of prioritized planning, in terms of completeness and optimality, for the first time.