AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
astar_trace_generator.h
1#ifndef PROBFD_CARTESIAN_ASTAR_TRACE_GENERATOR_H
2#define PROBFD_CARTESIAN_ASTAR_TRACE_GENERATOR_H
3
4#include "probfd/cartesian_abstractions/trace_generator.h"
5#include "probfd/cartesian_abstractions/types.h"
6
7#include "probfd/value_type.h"
8
9#include "downward/algorithms/priority_queues.h"
10
11#include <memory>
12#include <vector>
13
14// Forward Declarations
15namespace utils {
16class CountdownTimer;
17}
18
19namespace probfd::cartesian_abstractions {
20class CartesianAbstraction;
21class CartesianHeuristic;
22} // namespace probfd::cartesian_abstractions
23
24namespace probfd::cartesian_abstractions {
25/*
26 Find an optimal trace in the determinization using A*.
27*/
28class AStarTraceGenerator : public TraceGenerator {
29 class AbstractSearchInfo;
30
31 // Keep data structures around to avoid reallocating them.
32 priority_queues::HeapQueue<value_t, int> open_queue_;
33 std::vector<AbstractSearchInfo> search_info_;
34
35 std::unique_ptr<Trace>
36 extract_solution(int init_id, int goal_id, utils::CountdownTimer& timer)
37 const;
38
39 void update_heuristic(
40 CartesianAbstraction& abstraction,
41 CartesianHeuristic& heuristic,
42 const Trace& solution) const;
43
44public:
45 AStarTraceGenerator();
46
47 std::unique_ptr<Trace> find_trace(
48 CartesianAbstraction& abstraction,
49 int init_id,
50 CartesianHeuristic& heuristic,
51 utils::CountdownTimer& timer) override;
52
53 void notify_split() override;
54};
55
56} // namespace probfd::cartesian_abstractions
57
58#endif // PROBFD_CARTESIAN_ASTAR_TRACE_GENERATOR_H