1#ifndef PROBFD_TASK_UTILS_PROBABILISTIC_SUCCESSOR_GENERATOR_INTERNALS_H
2#define PROBFD_TASK_UTILS_PROBABILISTIC_SUCCESSOR_GENERATOR_INTERNALS_H
4#include "downward/operator_id.h"
7#include <unordered_map>
18namespace probfd::successor_generator {
20class ProbabilisticGeneratorBase {
22 virtual ~ProbabilisticGeneratorBase() =
default;
24 virtual void generate_applicable_ops(
25 const std::vector<int>& state,
26 std::vector<OperatorID>& applicable_ops)
const = 0;
28 virtual void generate_transitions(
30 std::vector<Transition<OperatorID>>& transitions,
31 TaskStateSpace& task_state_space)
const = 0;
34class ProbabilisticGeneratorForkBinary :
public ProbabilisticGeneratorBase {
35 std::unique_ptr<ProbabilisticGeneratorBase> generator_1_;
36 std::unique_ptr<ProbabilisticGeneratorBase> generator_2_;
39 ProbabilisticGeneratorForkBinary(
40 std::unique_ptr<ProbabilisticGeneratorBase> generator1,
41 std::unique_ptr<ProbabilisticGeneratorBase> generator2);
43 void generate_applicable_ops(
44 const std::vector<int>& state,
45 std::vector<OperatorID>& applicable_ops)
const override;
47 void generate_transitions(
49 std::vector<Transition<OperatorID>>& transitions,
50 TaskStateSpace& task_state_space)
const override;
53class ProbabilisticGeneratorForkMulti :
public ProbabilisticGeneratorBase {
54 std::vector<std::unique_ptr<ProbabilisticGeneratorBase>> children_;
57 explicit ProbabilisticGeneratorForkMulti(
58 std::vector<std::unique_ptr<ProbabilisticGeneratorBase>> children);
60 void generate_applicable_ops(
61 const std::vector<int>& state,
62 std::vector<OperatorID>& applicable_ops)
const override;
64 void generate_transitions(
66 std::vector<Transition<OperatorID>>& transitions,
67 TaskStateSpace& task_state_space)
const override;
70class ProbabilisticGeneratorSwitchVector :
public ProbabilisticGeneratorBase {
72 std::vector<std::unique_ptr<ProbabilisticGeneratorBase>>
76 ProbabilisticGeneratorSwitchVector(
78 std::vector<std::unique_ptr<ProbabilisticGeneratorBase>>&&
81 void generate_applicable_ops(
82 const std::vector<int>& state,
83 std::vector<OperatorID>& applicable_ops)
const override;
85 void generate_transitions(
87 std::vector<Transition<OperatorID>>& transitions,
88 TaskStateSpace& task_state_space)
const override;
91class ProbabilisticGeneratorSwitchHash :
public ProbabilisticGeneratorBase {
93 std::unordered_map<int, std::unique_ptr<ProbabilisticGeneratorBase>>
97 ProbabilisticGeneratorSwitchHash(
99 std::unordered_map<
int, std::unique_ptr<ProbabilisticGeneratorBase>>&&
100 generator_for_value);
102 void generate_applicable_ops(
103 const std::vector<int>& state,
104 std::vector<OperatorID>& applicable_ops)
const override;
106 void generate_transitions(
108 std::vector<Transition<OperatorID>>& transitions,
109 TaskStateSpace& task_state_space)
const override;
112class ProbabilisticGeneratorSwitchSingle :
public ProbabilisticGeneratorBase {
115 std::unique_ptr<ProbabilisticGeneratorBase> generator_for_value_;
118 ProbabilisticGeneratorSwitchSingle(
121 std::unique_ptr<ProbabilisticGeneratorBase> generator_for_value);
123 void generate_applicable_ops(
124 const std::vector<int>& state,
125 std::vector<OperatorID>& applicable_ops)
const override;
127 void generate_transitions(
129 std::vector<Transition<OperatorID>>& transitions,
130 TaskStateSpace& task_state_space)
const override;
133class ProbabilisticGeneratorLeafVector :
public ProbabilisticGeneratorBase {
134 std::vector<OperatorID> applicable_operators_;
137 explicit ProbabilisticGeneratorLeafVector(
138 std::vector<OperatorID>&& applicable_operators);
140 void generate_applicable_ops(
141 const std::vector<int>& state,
142 std::vector<OperatorID>& applicable_ops)
const override;
144 void generate_transitions(
146 std::vector<Transition<OperatorID>>& transitions,
147 TaskStateSpace& task_state_space)
const override;
150class ProbabilisticGeneratorLeafSingle :
public ProbabilisticGeneratorBase {
151 OperatorID applicable_operator_;
154 explicit ProbabilisticGeneratorLeafSingle(OperatorID applicable_operator);
156 void generate_applicable_ops(
157 const std::vector<int>& state,
158 std::vector<OperatorID>& applicable_ops)
const override;
160 void generate_transitions(
162 std::vector<Transition<OperatorID>>& transitions,
163 TaskStateSpace& task_state_space)
const override;
The top-level namespace of probabilistic Fast Downward.
Definition command_line.h:8