1#ifndef PRUNING_STUBBORN_SETS_H
2#define PRUNING_STUBBORN_SETS_H
4#include "downward/pruning_method.h"
6#include "downward/task_proxy.h"
8namespace stubborn_sets {
9inline FactPair find_unsatisfied_condition(
10 const std::vector<FactPair>& conditions,
13class StubbornSets :
public PruningMethod {
14 void compute_sorted_operators(
const TaskProxy& task_proxy);
15 void compute_achievers(
const TaskProxy& task_proxy);
17 prune(
const State& state, std::vector<OperatorID>& op_ids)
override;
25 std::vector<std::vector<FactPair>> sorted_op_preconditions;
26 std::vector<std::vector<FactPair>> sorted_op_effects;
27 std::vector<FactPair> sorted_goals;
31 std::vector<std::vector<std::vector<int>>> achievers;
35 std::vector<bool> stubborn;
54 FactPair find_unsatisfied_precondition(
int op_no,
const State& state)
const
56 return find_unsatisfied_condition(
57 sorted_op_preconditions[op_no],
61 virtual void compute_stubborn_set(
const State& state) = 0;
64 explicit StubbornSets(utils::Verbosity verbosity);
65 virtual void initialize(
const std::shared_ptr<AbstractTask>& task)
override;
69inline FactPair find_unsatisfied_condition(
70 const std::vector<FactPair>& conditions,
73 for (
const FactPair& condition : conditions) {
74 if (state[condition.var].get_value() != condition.value)
77 return FactPair::no_fact;