1#ifndef CEGAR_REFINEMENT_HIERARCHY_H
2#define CEGAR_REFINEMENT_HIERARCHY_H
4#include "downward/cartesian_abstractions/types.h"
15namespace cartesian_abstractions {
30class RefinementHierarchy {
31 std::shared_ptr<PlanningTask> task;
32 std::vector<Node> nodes;
34 NodeID add_node(
int state_id);
35 NodeID get_node_id(
const State& state)
const;
38 explicit RefinementHierarchy(
const std::shared_ptr<PlanningTask>& task);
46 std::pair<NodeID, NodeID> split(
49 const std::vector<int>& values,
53 int get_abstract_state_id(
const State& state)
const;
75 bool information_is_valid()
const;
78 explicit Node(
int state_id);
80 bool is_split()
const;
82 void split(
int var,
int value, NodeID left_child, NodeID right_child);
90 NodeID get_child(
int value)
const
93 if (value == this->value)
return right_child;
97 int get_state_id()
const
103 friend std::ostream& operator<<(std::ostream& os,
const Node& node);