AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
probabilistic_successor_generator_internals.h
1#ifndef PROBFD_TASK_UTILS_PROBABILISTIC_SUCCESSOR_GENERATOR_INTERNALS_H
2#define PROBFD_TASK_UTILS_PROBABILISTIC_SUCCESSOR_GENERATOR_INTERNALS_H
3
4#include "downward/operator_id.h"
5
6#include <memory>
7#include <unordered_map>
8#include <vector>
9
10class State;
11
12namespace probfd {
13class TaskStateSpace;
14template <typename>
15struct Transition;
16} // namespace probfd
17
18namespace probfd::successor_generator {
19
20class ProbabilisticGeneratorBase {
21public:
22 virtual ~ProbabilisticGeneratorBase() = default;
23
24 virtual void generate_applicable_ops(
25 const std::vector<int>& state,
26 std::vector<OperatorID>& applicable_ops) const = 0;
27
28 virtual void generate_transitions(
29 const State& state,
30 std::vector<Transition<OperatorID>>& transitions,
31 TaskStateSpace& task_state_space) const = 0;
32};
33
34class ProbabilisticGeneratorForkBinary : public ProbabilisticGeneratorBase {
35 std::unique_ptr<ProbabilisticGeneratorBase> generator_1_;
36 std::unique_ptr<ProbabilisticGeneratorBase> generator_2_;
37
38public:
39 ProbabilisticGeneratorForkBinary(
40 std::unique_ptr<ProbabilisticGeneratorBase> generator1,
41 std::unique_ptr<ProbabilisticGeneratorBase> generator2);
42
43 void generate_applicable_ops(
44 const std::vector<int>& state,
45 std::vector<OperatorID>& applicable_ops) const override;
46
47 void generate_transitions(
48 const State& state,
49 std::vector<Transition<OperatorID>>& transitions,
50 TaskStateSpace& task_state_space) const override;
51};
52
53class ProbabilisticGeneratorForkMulti : public ProbabilisticGeneratorBase {
54 std::vector<std::unique_ptr<ProbabilisticGeneratorBase>> children_;
55
56public:
57 explicit ProbabilisticGeneratorForkMulti(
58 std::vector<std::unique_ptr<ProbabilisticGeneratorBase>> children);
59
60 void generate_applicable_ops(
61 const std::vector<int>& state,
62 std::vector<OperatorID>& applicable_ops) const override;
63
64 void generate_transitions(
65 const State& state,
66 std::vector<Transition<OperatorID>>& transitions,
67 TaskStateSpace& task_state_space) const override;
68};
69
70class ProbabilisticGeneratorSwitchVector : public ProbabilisticGeneratorBase {
71 int switch_var_id_;
72 std::vector<std::unique_ptr<ProbabilisticGeneratorBase>>
73 generator_for_value_;
74
75public:
76 ProbabilisticGeneratorSwitchVector(
77 int switch_var_id,
78 std::vector<std::unique_ptr<ProbabilisticGeneratorBase>>&&
79 generator_for_value);
80
81 void generate_applicable_ops(
82 const std::vector<int>& state,
83 std::vector<OperatorID>& applicable_ops) const override;
84
85 void generate_transitions(
86 const State& state,
87 std::vector<Transition<OperatorID>>& transitions,
88 TaskStateSpace& task_state_space) const override;
89};
90
91class ProbabilisticGeneratorSwitchHash : public ProbabilisticGeneratorBase {
92 int switch_var_id_;
93 std::unordered_map<int, std::unique_ptr<ProbabilisticGeneratorBase>>
94 generator_for_value_;
95
96public:
97 ProbabilisticGeneratorSwitchHash(
98 int switch_var_id,
99 std::unordered_map<int, std::unique_ptr<ProbabilisticGeneratorBase>>&&
100 generator_for_value);
101
102 void generate_applicable_ops(
103 const std::vector<int>& state,
104 std::vector<OperatorID>& applicable_ops) const override;
105
106 void generate_transitions(
107 const State& state,
108 std::vector<Transition<OperatorID>>& transitions,
109 TaskStateSpace& task_state_space) const override;
110};
111
112class ProbabilisticGeneratorSwitchSingle : public ProbabilisticGeneratorBase {
113 int switch_var_id_;
114 int value_;
115 std::unique_ptr<ProbabilisticGeneratorBase> generator_for_value_;
116
117public:
118 ProbabilisticGeneratorSwitchSingle(
119 int switch_var_id,
120 int value,
121 std::unique_ptr<ProbabilisticGeneratorBase> generator_for_value);
122
123 void generate_applicable_ops(
124 const std::vector<int>& state,
125 std::vector<OperatorID>& applicable_ops) const override;
126
127 void generate_transitions(
128 const State& state,
129 std::vector<Transition<OperatorID>>& transitions,
130 TaskStateSpace& task_state_space) const override;
131};
132
133class ProbabilisticGeneratorLeafVector : public ProbabilisticGeneratorBase {
134 std::vector<OperatorID> applicable_operators_;
135
136public:
137 explicit ProbabilisticGeneratorLeafVector(
138 std::vector<OperatorID>&& applicable_operators);
139
140 void generate_applicable_ops(
141 const std::vector<int>& state,
142 std::vector<OperatorID>& applicable_ops) const override;
143
144 void generate_transitions(
145 const State& state,
146 std::vector<Transition<OperatorID>>& transitions,
147 TaskStateSpace& task_state_space) const override;
148};
149
150class ProbabilisticGeneratorLeafSingle : public ProbabilisticGeneratorBase {
151 OperatorID applicable_operator_;
152
153public:
154 explicit ProbabilisticGeneratorLeafSingle(OperatorID applicable_operator);
155
156 void generate_applicable_ops(
157 const std::vector<int>& state,
158 std::vector<OperatorID>& applicable_ops) const override;
159
160 void generate_transitions(
161 const State& state,
162 std::vector<Transition<OperatorID>>& transitions,
163 TaskStateSpace& task_state_space) const override;
164};
165
166} // namespace probfd::successor_generator
167
168#endif
The top-level namespace of probabilistic Fast Downward.
Definition command_line.h:8