AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
blocksworld.h
1#ifndef TESTS_TASKS_BLOCKSWORLD_H
2#define TESTS_TASKS_BLOCKSWORLD_H
3
4#include "probfd/probabilistic_task.h"
5
6#include <vector>
7
8class State;
9
10namespace tests {
11
12class BlocksworldTask : public probfd::ProbabilisticTask {
13 const int blocks;
14
15 const int pick_up_begin;
16 const int pick_table_begin;
17 const int put_tower_block_begin;
18 const int put_tower_down_begin;
19 const int put_on_block_begin;
20 const int put_table_begin;
21
22 struct VariableInfo {
23 std::string name;
24 std::vector<std::string> fact_names;
25 };
26
27 struct EffectInfo {
28 probfd::value_t probability;
29 std::vector<FactPair> effects;
30 };
31
32 struct OperatorInfo {
33 std::string name;
34 probfd::value_t cost;
35 std::vector<FactPair> preconditions;
36 std::vector<EffectInfo> outcomes;
37 };
38
39 std::vector<VariableInfo> variables;
40 std::vector<OperatorInfo> operators;
41
42 std::vector<int> initial_state;
43 std::vector<FactPair> goal_state;
44
45public:
46 BlocksworldTask(
47 int num_blocks,
48 const std::vector<std::vector<int>>& initial,
49 const std::vector<std::vector<int>>& goal);
50
51 int get_num_variables() const override;
52
53 std::string get_variable_name(int var) const override;
54
55 int get_variable_domain_size(int var) const override;
56
57 int get_variable_axiom_layer(int var) const override;
58
59 int get_variable_default_axiom_value(int var) const override;
60
61 std::string get_fact_name(const FactPair& fact) const override;
62
63 bool are_facts_mutex(const FactPair&, const FactPair&) const override;
64
65 int get_num_axioms() const override;
66
67 std::string get_axiom_name(int) const override;
68
69 int get_num_axiom_preconditions(int) const override;
70
71 FactPair get_axiom_precondition(int, int) const override;
72
73 int get_num_axiom_effects(int) const override;
74
75 int get_num_axiom_effect_conditions(int, int) const override;
76
77 FactPair get_axiom_effect_condition(int, int, int) const override;
78
79 FactPair get_axiom_effect(int, int) const override;
80
81 std::string get_operator_name(int index) const override;
82
83 int get_num_operators() const override;
84
85 int get_num_operator_preconditions(int index) const override;
86
87 FactPair
88 get_operator_precondition(int index, int fact_index) const override;
89
90 int get_num_goals() const override;
91
92 FactPair get_goal_fact(int index) const override;
93
94 std::vector<int> get_initial_state_values() const override;
95
96 void convert_ancestor_state_values(std::vector<int>&, const PlanningTask*)
97 const override;
98
99 int convert_operator_index(int, const PlanningTask*) const override;
100
101 probfd::value_t get_operator_cost(int index) const override;
102
103 int get_num_operator_outcomes(int index) const override;
104
106 get_operator_outcome_probability(int index, int outcome_index)
107 const override;
108
109 int get_operator_outcome_id(int index, int outcome_index) const override;
110
111 int get_num_operator_outcome_effects(int index, int outcome_index)
112 const override;
113
114 FactPair
115 get_operator_outcome_effect(int index, int outcome_index, int eff_index)
116 const override;
117
118 int get_num_operator_outcome_effect_conditions(
119 int op_index,
120 int outcome_index,
121 int eff_index) const override;
122
123 FactPair get_operator_outcome_effect_condition(
124 int op_index,
125 int outcome_index,
126 int eff_index,
127 int cond_index) const override;
128
129 probfd::value_t get_non_goal_termination_cost() const override;
130
131 int get_clear_var(int block) const;
132 int get_location_var(int block) const;
133 int get_hand_var() const;
134
135 FactPair get_fact_is_block_clear(int block, bool is_clear) const;
136 FactPair get_fact_block_on_block(int block1, int block2) const;
137 FactPair get_fact_block_on_table(int block) const;
138 FactPair get_fact_block_in_hand(int block) const;
139 FactPair get_fact_is_hand_empty(bool is_empty) const;
140
141 int get_operator_pick_up_tower_index(int b1, int b2, int b3) const;
142 int get_operator_pick_up_block_on_block_index(int b1, int b2) const;
143 int get_operator_pick_up_block_from_table_index(int b) const;
144
145 int get_operator_put_tower_on_block_index(int b1, int b2, int b3) const;
146 int get_operator_put_tower_on_table_index(int b1, int b2) const;
147 int get_operator_put_block_on_block_index(int b1, int b2) const;
148 int get_operator_put_block_on_table_index(int b) const;
149
150 State get_state(const std::vector<FactPair>& facts);
151};
152
153} // namespace tests
154
155#endif
Represents a probabilistic planning task with axioms and conditional effects.
Definition probabilistic_task.h:19
double value_t
Typedef for the state value type.
Definition aliases.h:7