AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
domain_abstracted_task.h
1#ifndef TASKS_DOMAIN_ABSTRACTED_TASK_H
2#define TASKS_DOMAIN_ABSTRACTED_TASK_H
3
4#include "downward/tasks/delegating_task.h"
5
6#include "downward/utils/collections.h"
7
8#include <cassert>
9#include <string>
10#include <utility>
11#include <vector>
12
13namespace extra_tasks {
14/*
15 Task transformation for performing domain abstraction.
16
17 We recommend using the factory function in
18 domain_abstracted_task_factory.h for creating DomainAbstractedTasks.
19*/
20class DomainAbstractedTask : public tasks::DelegatingTask {
21 const std::vector<int> domain_size;
22 const std::vector<int> initial_state_values;
23 const std::vector<FactPair> goals;
24 const std::vector<std::vector<std::string>> fact_names;
25 const std::vector<std::vector<int>> value_map;
26
27 int get_abstract_value(const FactPair& fact) const
28 {
29 assert(utils::in_bounds(fact.var, value_map));
30 assert(utils::in_bounds(fact.value, value_map[fact.var]));
31 return value_map[fact.var][fact.value];
32 }
33
34 FactPair get_abstract_fact(const FactPair& fact) const
35 {
36 return FactPair(fact.var, get_abstract_value(fact));
37 }
38
39public:
40 DomainAbstractedTask(
41 const std::shared_ptr<AbstractTask>& parent,
42 std::vector<int>&& domain_size,
43 std::vector<int>&& initial_state_values,
44 std::vector<FactPair>&& goals,
45 std::vector<std::vector<std::string>>&& fact_names,
46 std::vector<std::vector<int>>&& value_map);
47
48 virtual int get_variable_domain_size(int var) const override;
49 virtual std::string get_fact_name(const FactPair& fact) const override;
50 virtual bool are_facts_mutex(const FactPair& fact1, const FactPair& fact2)
51 const override;
52
53 virtual FactPair
54 get_axiom_precondition(int op_index, int fact_index) const override;
55 virtual FactPair
56 get_axiom_effect(int op_index, int eff_index) const override;
57
58 virtual FactPair
59 get_operator_precondition(int op_index, int fact_index) const override;
60 virtual FactPair
61 get_operator_effect(int op_index, int eff_index) const override;
62
63 virtual FactPair get_goal_fact(int index) const override;
64
65 virtual std::vector<int> get_initial_state_values() const override;
66 virtual void
67 convert_state_values_from_parent(std::vector<int>& values) const override;
68};
69} // namespace extra_tasks
70
71#endif