1#ifndef TASK_UTILS_TASK_PROPERTIES_H
2#define TASK_UTILS_TASK_PROPERTIES_H
4#include "downward/per_task_information.h"
5#include "downward/task_proxy.h"
7#include "downward/algorithms/int_packer.h"
9namespace task_properties {
10inline bool is_applicable(
const AxiomOrOperatorProxy& op,
const State& state)
12 for (FactProxy precondition : op.get_preconditions()) {
13 if (state[precondition.get_variable()] != precondition)
return false;
18inline bool is_applicable(
const PartialOperatorProxy& op,
const State& state)
20 for (FactProxy precondition : op.get_preconditions()) {
21 if (state[precondition.get_variable()] != precondition)
return false;
26inline bool is_goal_state(
const PlanningTaskProxy& task,
const State& state)
28 for (FactProxy goal : task.get_goals()) {
29 if (state[goal.get_variable()] != goal)
return false;
39extern bool is_unit_cost(
const TaskProxy& task);
42extern bool has_axioms(
const PlanningTaskProxy& task);
48extern void verify_no_axioms(
const PlanningTaskProxy& task);
51extern bool has_conditional_effects(
const TaskProxy& task);
58extern void verify_no_conditional_effects(
const TaskProxy& task);
60extern std::vector<int> get_operator_costs(
const TaskProxy& task_proxy);
61extern double get_average_operator_cost(
const TaskProxy& task_proxy);
62extern int get_min_operator_cost(
const TaskProxy& task_proxy);
68extern int get_num_facts(
const PlanningTaskProxy& task_proxy);
75extern int get_num_total_effects(
const TaskProxy& task_proxy);
77template <
class FactProxyCollection>
78std::vector<FactPair> get_fact_pairs(
const FactProxyCollection& facts)
80 std::vector<FactPair> fact_pairs;
81 fact_pairs.reserve(facts.size());
82 for (FactProxy fact : facts) {
83 fact_pairs.push_back(fact.get_pair());
88extern void print_variable_statistics(
const PlanningTaskProxy& task_proxy);
89extern void dump_pddl(
const State& state);
90extern void dump_fdr(
const State& state);
91extern void dump_goals(
const GoalsProxy& goals);
92extern void dump_task(
const TaskProxy& task_proxy);
94extern PerTaskInformation<int_packer::IntPacker> g_state_packers;