89 using QSystem = quotients::QuotientSystem<State, Action>;
92 enum { NEW, ONSTACK, CLOSED };
94 static constexpr uint32_t UNDEF =
95 std::numeric_limits<uint32_t>::max() >> 2;
97 unsigned explored : 1 = 0;
98 unsigned expandable_goal : 1 = 0;
99 unsigned stackid : 30 = UNDEF;
102 bool onstack()
const;
103 auto get_status()
const;
106 struct ExpansionInfo {
112 bool nz_or_leaves_scc;
117 bool recurse =
false;
119 std::vector<Action> aops;
120 std::vector<std::vector<StateID>> successors;
125 std::vector<Action> aops,
126 std::vector<std::vector<StateID>> successors);
131 std::vector<Action> aops,
132 std::vector<std::vector<StateID>> successors,
136 bool next_action(std::nullptr_t);
139 bool next_action(
MDPType& mdp);
141 bool next_successor();
143 StateID get_current_successor();
144 Action& get_current_action();
149 const bool expand_goals_;
151 storage::PerStateStorage<StateInfo> state_infos_;
152 std::deque<ExpansionInfo> expansion_queue_;
153 std::vector<StackInfo> stack_;
171 double max_time = std::numeric_limits<double>::infinity());
173 void print_statistics(std::ostream& out)
const;
182 StateInfo& state_info,
187 bool push(
StateID state_id, StateInfo& info);
189 void find_and_decompose_sccs(
192 utils::CountdownTimer& timer,
198 utils::CountdownTimer& timer,
201 template <
bool RootIteration>
206 utils::CountdownTimer& timer);
208 void decompose(QSystem& sys,
unsigned start, utils::CountdownTimer& timer);