Assignment Search Framework
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Pages
tile_puzzle_transitions.h
Go to the documentation of this file.
1 /*
2  * tile_puzzle_transitions.h
3  *
4  * LICENSE HERE
5  *
6  * Created on: 2016-08-16
7  * Author: Rick Valenzano
8  */
9 
10 #ifndef TILEPUZZLETRANSITIONS_H_
11 #define TILEPUZZLETRANSITIONS_H_
12 
13 #include <iostream>
14 #include "../../generic_defs/transition_system.h"
15 #include "tile_puzzle_state.h"
16 
25 enum class BlankSlide
26 {
27  left, up, down, right, dummy
28 };
29 
41 enum class TileCostType
42 {
44 };
45 
54 class TilePuzzleTransitions: public TransitionSystem<TilePuzzleState, BlankSlide>
55 {
56 public:
64  TilePuzzleTransitions(unsigned rows, unsigned cols, TileCostType cost = TileCostType::unit);
65 
76  TilePuzzleTransitions(unsigned rows, unsigned cols, const std::vector<double> &tile_costs);
77 
81  virtual ~TilePuzzleTransitions();
82 
83  // Overloaded methods.
84  virtual bool isApplicable(const TilePuzzleState &state, const BlankSlide &action) const;
85  virtual double getActionCost(const TilePuzzleState &state, const BlankSlide &action) const;
86  virtual void applyAction(TilePuzzleState &state, const BlankSlide &action) const;
87  virtual void getActions(const TilePuzzleState &state, std::vector<BlankSlide> &actions) const;
88  virtual bool isInvertible(const TilePuzzleState &state, const BlankSlide &action) const;
89  virtual BlankSlide getInverse(const TilePuzzleState &state, const BlankSlide &action) const;
90  BlankSlide getDummyAction() const;
91  bool isDummyAction(const BlankSlide &action) const;
92 
98  void setStandardTileCostType(const TileCostType cost_type);
99 
108  void setCustomTileCostType(const std::vector<double> &tile_costs);
109 
117  void setProperties(unsigned rows, unsigned cols, TileCostType cost_type = TileCostType::unit);
118 
126  void setProperties(unsigned rows, unsigned cols, const std::vector<double> &tile_costs);
127 
134  double getTileMoveCost(unsigned tile) const;
135 
136 protected:
145  void setActionList(unsigned rows, unsigned cols);
146 
154  bool isApplicableInLocation(const BlankSlide &action, unsigned blank_loc) const;
155 
165  unsigned getMovingTile(const TilePuzzleState &state, const BlankSlide &action) const;
166 
167  unsigned num_rows;
168  unsigned num_cols;
169 
170  std::vector<std::vector<BlankSlide> > loc_actions;
171  std::vector<BlankSlide> ops_in_order;
172  std::vector<double> tile_move_cost;
173 };
174 
182 std::ostream& operator <<(std::ostream & out, const BlankSlide &dir);
183 
184 #endif /* TILEPUZZLETRANSITIONS_H_ */
std::vector< BlankSlide > ops_in_order
An ordering of all the possible actions.
Definition: tile_puzzle_transitions.h:171
void setStandardTileCostType(const TileCostType cost_type)
Definition: tile_puzzle_transitions.cpp:83
void setCustomTileCostType(const std::vector< double > &tile_costs)
Definition: tile_puzzle_transitions.cpp:96
virtual ~TilePuzzleTransitions()
Definition: tile_puzzle_transitions.cpp:24
unsigned num_cols
Number of columns in the puzzle.
Definition: tile_puzzle_transitions.h:168
void setProperties(unsigned rows, unsigned cols, TileCostType cost_type=TileCostType::unit)
Definition: tile_puzzle_transitions.cpp:130
std::ostream & operator<<(std::ostream &out, const BlankSlide &dir)
Definition: tile_puzzle_transitions.cpp:170
BlankSlide getDummyAction() const
Definition: tile_puzzle_transitions.cpp:147
void setActionList(unsigned rows, unsigned cols)
Definition: tile_puzzle_transitions.cpp:104
double getTileMoveCost(unsigned tile) const
Definition: tile_puzzle_transitions.cpp:142
bool isDummyAction(const BlankSlide &action) const
Definition: tile_puzzle_transitions.cpp:152
virtual BlankSlide getInverse(const TilePuzzleState &state, const BlankSlide &action) const
Definition: tile_puzzle_transitions.cpp:192
bool isApplicableInLocation(const BlankSlide &action, unsigned blank_loc) const
Definition: tile_puzzle_transitions.cpp:65
Definition: tile_puzzle_transitions.h:54
std::vector< std::vector< BlankSlide > > loc_actions
Caches the actions applicable for each blank location.
Definition: tile_puzzle_transitions.h:170
virtual double getActionCost(const TilePuzzleState &state, const BlankSlide &action) const
Definition: tile_puzzle_transitions.cpp:35
unsigned num_rows
Number of rows in the puzzle.
Definition: tile_puzzle_transitions.h:167
unsigned getMovingTile(const TilePuzzleState &state, const BlankSlide &action) const
Definition: tile_puzzle_transitions.cpp:157
std::vector< double > tile_move_cost
Caches the cost of moving each tile.
Definition: tile_puzzle_transitions.h:172
virtual void applyAction(TilePuzzleState &state, const BlankSlide &action) const
Definition: tile_puzzle_transitions.cpp:40
Definition: tile_puzzle_state.h:23
virtual void getActions(const TilePuzzleState &state, std::vector< BlankSlide > &actions) const
Definition: tile_puzzle_transitions.cpp:59
Definition: transition_system.h:23
virtual bool isInvertible(const TilePuzzleState &state, const BlankSlide &action) const
Definition: tile_puzzle_transitions.cpp:185
virtual bool isApplicable(const TilePuzzleState &state, const BlankSlide &action) const
Definition: tile_puzzle_transitions.cpp:28
TilePuzzleTransitions(unsigned rows, unsigned cols, TileCostType cost=TileCostType::unit)
Definition: tile_puzzle_transitions.cpp:14