10 #ifndef TRANSITIONSYSTEM_H_
11 #define TRANSITIONSYSTEM_H_
22 template<
class state_t,
class action_t>
43 virtual bool isApplicable(
const state_t &state,
const action_t &action)
const;
52 virtual bool isChildState(
const state_t &parent,
const state_t &child)
const;
63 virtual double getActionCost(
const state_t &state,
const action_t &action)
const = 0;
73 virtual void applyAction(state_t &state,
const action_t &action)
const = 0;
81 virtual void getActions(
const state_t &state, std::vector<action_t> &actions)
const = 0;
91 virtual void getSuccessors(
const state_t &state, std::vector<state_t> &children)
const;
102 virtual bool isInvertible(
const state_t &state,
const action_t &action)
const;
113 virtual action_t
getInverse(
const state_t &state,
const action_t &action)
const;
130 virtual bool isDummyAction(
const action_t &action)
const = 0;
153 template<
class state_t,
class action_t>
158 template<
class state_t,
class action_t>
163 template<
class state_t,
class action_t>
166 if(action == getDummyAction())
169 std::vector<action_t> actions;
171 getActions(state, actions);
173 for(
unsigned i = 0; i < actions.size(); i++) {
174 if(action == actions[i])
181 template<
class state_t,
class action_t>
184 std::vector<state_t> children;
186 getSuccessors(parent, children);
188 for(
unsigned i = 0; i < children.size(); i++) {
189 if(child == children[i])
196 template<
class state_t,
class action_t>
199 std::vector<action_t> actions;
201 getActions(state, actions);
203 for(
unsigned i = 0; i < actions.size(); i++) {
204 state_t state_copy(state);
205 applyAction(state_copy, actions[i]);
207 children.push_back(state_copy);
211 template<
class state_t,
class action_t>
216 template<
class state_t,
class action_t>
218 return getDummyAction();
222 template<
class state_t,
class action_t>
224 const std::vector<action_t> &actions)
const
226 for(
unsigned i = 0; i < actions.size(); i++) {
227 if(!isApplicable(state, actions[i]))
229 applyGivenAction(state, actions[i]);
235 template<
class state_t,
class action_t>
237 const std::vector<action_t> &actions)
const
239 state_t state_copy(state);
241 if(!applyActionSequence(state, actions))
virtual void getSuccessors(const state_t &state, std::vector< state_t > &children) const
Definition: transition_system.h:197
virtual bool isInvertible(const state_t &state, const action_t &action) const
Definition: transition_system.h:212
virtual void applyAction(state_t &state, const action_t &action) const =0
virtual bool isChildState(const state_t &parent, const state_t &child) const
Definition: transition_system.h:182
TransitionSystem()
Definition: transition_system.h:154
bool isApplicableSequence(const state_t &state, const std::vector< action_t > &actions) const
Definition: transition_system.h:236
virtual void getActions(const state_t &state, std::vector< action_t > &actions) const =0
virtual action_t getDummyAction() const =0
virtual double getActionCost(const state_t &state, const action_t &action) const =0
virtual bool isApplicable(const state_t &state, const action_t &action) const
Definition: transition_system.h:164
virtual bool isDummyAction(const action_t &action) const =0
virtual action_t getInverse(const state_t &state, const action_t &action) const
Definition: transition_system.h:217
Definition: transition_system.h:23
virtual ~TransitionSystem()
Definition: transition_system.h:159
bool applyActionSequence(state_t &state, const std::vector< action_t > &actions) const
Definition: transition_system.h:223