1#ifndef CEGAR_ABSTRACT_SEARCH_H
2#define CEGAR_ABSTRACT_SEARCH_H
4#include "downward/cartesian_abstractions/transition.h"
5#include "downward/cartesian_abstractions/types.h"
7#include "downward/algorithms/priority_queues.h"
13namespace cartesian_abstractions {
14using Solution = std::deque<Transition>;
20 class AbstractSearchInfo {
23 Transition incoming_transition;
28 , incoming_transition(UNDEFINED, UNDEFINED)
35 g = std::numeric_limits<int>::max();
36 incoming_transition = Transition(UNDEFINED, UNDEFINED);
39 void decrease_g_value_to(
int new_g)
45 int get_g_value()
const {
return g; }
47 void increase_h_value_to(
int new_h)
53 int get_h_value()
const {
return h; }
55 void set_incoming_transition(
const Transition& transition)
57 incoming_transition = transition;
60 const Transition& get_incoming_transition()
const
63 incoming_transition.op_id != UNDEFINED &&
64 incoming_transition.target_id != UNDEFINED);
65 return incoming_transition;
69 const std::vector<int> operator_costs;
72 priority_queues::AdaptiveQueue<int> open_queue;
73 std::vector<AbstractSearchInfo> search_info;
75 void reset(
int num_states);
76 void set_h_value(
int state_id,
int h);
77 std::unique_ptr<Solution> extract_solution(
int init_id,
int goal_id)
const;
78 void update_goal_distances(
const Solution& solution);
80 const std::vector<Transitions>& transitions,
84 explicit AbstractSearch(
const std::vector<int>& operator_costs);
86 std::unique_ptr<Solution> find_solution(
87 const std::vector<Transitions>& transitions,
89 const Goals& goal_ids);
90 int get_h_value(
int state_id)
const;
91 void copy_h_value_to_children(
int v,
int v1,
int v2);
94std::vector<int> compute_distances(
95 const std::vector<Transitions>& transitions,
96 const std::vector<int>& costs,
97 const std::unordered_set<int>& start_ids);