1#ifndef TASKS_DOMAIN_ABSTRACTED_TASK_H
2#define TASKS_DOMAIN_ABSTRACTED_TASK_H
4#include "downward/tasks/delegating_task.h"
6#include "downward/utils/collections.h"
13namespace extra_tasks {
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;
27 int get_abstract_value(
const FactPair& fact)
const
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];
34 FactPair get_abstract_fact(
const FactPair& fact)
const
36 return FactPair(fact.var, get_abstract_value(fact));
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);
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)
54 get_axiom_precondition(
int op_index,
int fact_index)
const override;
56 get_axiom_effect(
int op_index,
int eff_index)
const override;
59 get_operator_precondition(
int op_index,
int fact_index)
const override;
61 get_operator_effect(
int op_index,
int eff_index)
const override;
63 virtual FactPair get_goal_fact(
int index)
const override;
65 virtual std::vector<int> get_initial_state_values()
const override;
67 convert_state_values_from_parent(std::vector<int>& values)
const override;