1#ifndef CEGAR_SPLIT_SELECTOR_H
2#define CEGAR_SPLIT_SELECTOR_H
4#include "downward/task_proxy.h"
9namespace additive_heuristic {
10class AdditiveHeuristic;
14class RandomNumberGenerator;
17namespace cartesian_abstractions {
36 const std::vector<int> values;
38 Split(
int var_id, std::vector<int>&& values)
40 , values(
std::move(values))
49 const std::shared_ptr<AbstractTask> task;
50 const TaskProxy task_proxy;
51 std::unique_ptr<additive_heuristic::AdditiveHeuristic> additive_heuristic;
55 int get_num_unwanted_values(
const AbstractState& state,
const Split& split)
57 double get_refinedness(
const AbstractState& state,
int var_id)
const;
58 int get_hadd_value(
int var_id,
int value)
const;
59 int get_min_hadd_value(
int var_id,
const std::vector<int>& values)
const;
60 int get_max_hadd_value(
int var_id,
const std::vector<int>& values)
const;
62 double rate_split(
const AbstractState& state,
const Split& split)
const;
65 SplitSelector(
const std::shared_ptr<AbstractTask>& task, PickSplit pick);
68 const Split& pick_split(
69 const AbstractState& state,
70 const std::vector<Split>& splits,
71 utils::RandomNumberGenerator& rng)
const;