1#ifndef PROBFD_CARTESIAN_PROBABILISTIC_TRANSITION_SYSTEM_H
2#define PROBFD_CARTESIAN_PROBABILISTIC_TRANSITION_SYSTEM_H
4#include "probfd/cartesian_abstractions/probabilistic_transition.h"
5#include "probfd/cartesian_abstractions/types.h"
7#include "probfd/value_type.h"
21class ProbabilisticOperatorsProxy;
24namespace probfd::cartesian_abstractions {
28namespace probfd::cartesian_abstractions {
30class ProbabilisticTransitionSystem {
32 const std::vector<std::vector<FactPair>> preconditions_by_operator_;
33 const std::vector<std::vector<std::vector<FactPair>>>
34 postconditions_by_operator_and_outcome_;
35 const std::vector<std::vector<value_t>>
36 probabilities_by_operator_and_outcome_;
39 std::vector<std::vector<ProbabilisticTransition*>> outgoing_;
40 std::vector<std::vector<ProbabilisticTransition*>> incoming_;
43 std::deque<ProbabilisticTransition> transitions_;
46 std::deque<std::vector<int>> loops_;
48 size_t num_loops_ = 0;
51 void enlarge_vectors_by_one();
54 void construct_trivial_abstraction(
const ProbabilisticOperatorsProxy& ops);
57 int get_precondition_value(
int op_id,
int var)
const;
60 int get_postcondition_value(
int op_id, std::size_t eff_id,
int var)
const;
63 size_t get_num_operator_outcomes(
int op_id)
const;
65 void add_transition(
int src_id,
int op_id, std::vector<int> target_ids);
66 void add_loop(
int src_id,
int op_id);
68 void rewire_incoming_transitions(
69 const AbstractStates& states,
70 const AbstractState& v1,
71 const AbstractState& v2,
73 void rewire_outgoing_transitions(
74 const AbstractStates& states,
75 const AbstractState& v1,
76 const AbstractState& v2,
80 rewire_loops(
const AbstractState& v1,
const AbstractState& v2,
int var);
83 explicit ProbabilisticTransitionSystem(
84 const ProbabilisticOperatorsProxy& ops);
86 ~ProbabilisticTransitionSystem();
90 const AbstractStates& states,
91 const AbstractState& v1,
92 const AbstractState& v2,
96 value_t get_probability(
int op_index,
int eff_index)
const;
99 const std::vector<std::vector<ProbabilisticTransition*>>&
100 get_incoming_transitions()
const;
103 const std::vector<std::vector<ProbabilisticTransition*>>&
104 get_outgoing_transitions()
const;
107 const std::deque<std::vector<int>>& get_loops()
const;
110 const std::deque<ProbabilisticTransition>& get_transitions()
const;
113 int get_num_states()
const;
116 int get_num_operators()
const;
119 int get_num_non_loops()
const;
122 int get_num_loops()
const;
124 void print_statistics(utils::LogProxy& log)
const;
The top-level namespace of probabilistic Fast Downward.
Definition command_line.h:8
double value_t
Typedef for the state value type.
Definition aliases.h:7