AI 24/25 Project Software
Documentation for the AI 24/25 course programming project software
Loading...
Searching...
No Matches
split_selector.h
1#ifndef CEGAR_SPLIT_SELECTOR_H
2#define CEGAR_SPLIT_SELECTOR_H
3
4#include "downward/task_proxy.h"
5
6#include <memory>
7#include <vector>
8
9namespace additive_heuristic {
10class AdditiveHeuristic;
11}
12
13namespace utils {
14class RandomNumberGenerator;
15}
16
17namespace cartesian_abstractions {
18class AbstractState;
19
20// Strategies for selecting a split in case there are multiple possibilities.
21enum class PickSplit {
22 RANDOM,
23 // Number of values that land in the state whose h-value is probably raised.
24 MIN_UNWANTED,
25 MAX_UNWANTED,
26 // Refinement: - (remaining_values / original_domain_size)
27 MIN_REFINED,
28 MAX_REFINED,
29 // Compare the h^add(s_0) values of the facts.
30 MIN_HADD,
31 MAX_HADD
32};
33
34struct Split {
35 const int var_id;
36 const std::vector<int> values;
37
38 Split(int var_id, std::vector<int>&& values)
39 : var_id(var_id)
40 , values(std::move(values))
41 {
42 }
43};
44
45/*
46 Select split in case there are multiple possible splits.
47*/
48class SplitSelector {
49 const std::shared_ptr<AbstractTask> task;
50 const TaskProxy task_proxy;
51 std::unique_ptr<additive_heuristic::AdditiveHeuristic> additive_heuristic;
52
53 const PickSplit pick;
54
55 int get_num_unwanted_values(const AbstractState& state, const Split& split)
56 const;
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;
61
62 double rate_split(const AbstractState& state, const Split& split) const;
63
64public:
65 SplitSelector(const std::shared_ptr<AbstractTask>& task, PickSplit pick);
66 ~SplitSelector();
67
68 const Split& pick_split(
69 const AbstractState& state,
70 const std::vector<Split>& splits,
71 utils::RandomNumberGenerator& rng) const;
72};
73} // namespace cartesian_abstractions
74
75#endif
STL namespace.