Randy Coulman
August 15, 2015
69

Shall We Play a Game?

From LoneStar Ruby 2015.

Teaching computers to play games has been a pursuit and passion for many programmers. Game playing has led to many advances in computing over the years, and the best computerized game players have gained a lot of attention from the general public (think Deep Blue and Watson).

Using the Ricochet Robots board game as an example, let's talk about what's involved in teaching a computer to play games. Along the way, we'll touch on graph search techniques, data representation, algorithms, heuristics, pruning, and optimization.

August 15, 2015

Transcript

get to
14. 1 2 3 1. Blue Right 2. Blue Down 3.

Blue Left Moves to get to
15. 1 2 3 4 1. Blue Right 2. Blue Down

3. Blue Left 4. Green Right Moves to get to
16. 1 2 3 4 5 1. Blue Right 2. Blue

Down 3. Blue Left 4. Green Right 5. Green Down Moves to get to
17. 1 2 3 4 5 6 1. Blue Right 2.

Blue Down 3. Blue Left 4. Green Right 5. Green Down 6. Green Left Moves to get to
18. 1 2 3 4 5 6 7 1. Blue Right

2. Blue Down 3. Blue Left 4. Green Right 5. Green Down 6. Green Left 7. Green Down Moves to get to
19. Characterizing the Problem Possible Board States (size of state space):

252 * 251 * 250 * 249 * 248 = 976,484,376,000
20. Characterizing the Problem Branching Factor: 9 - 20 possible moves

from each state

22. The Board • Board (Static: 16 x 16) • Walls

& Targets (changes each game)
23. The Board • Board (Static: 16 x 16) • Walls

& Targets (changes each game) • Goal (changes each turn)
24. The Board • Board (Static: 16 x 16) • Walls

& Targets (changes each game) • Goal (changes each turn) • Robot Positions (changes each move)

Ways Through

9

9 10

9 10 11

9 10 11 12
41. Depth-First Search 1 2 3 4 5 6 7 8

9 10 11 12 13
42. Depth-First Search 1 2 3 4 5 6 7 8

9 10 11 12 13 14
43. Depth-First Search 1 2 3 4 5 6 7 8

9 10 11 12 13 14 15
44. Depth-First Search 1 2 3 4 5 6 7 8

9 10 11 12 13 14 15 16
45. Depth-First Search 1 2 3 4 5 6 7 8

9 10 11 12 13 14 15 16

9

9 10

9 10 11

9 10 11 12
78. Breadth-First Search 1 2 3 4 5 6 7 8

9 10 11 12 13
79. Breadth-First Search 1 2 3 4 5 6 7 8

9 10 11 12 13 14
80. Breadth-First Search 1 2 3 4 5 6 7 8

9 10 11 12 13 14 15
81. Breadth-First Search 1 2 3 4 5 6 7 8

9 10 11 12 13 14 15 16
82. Breadth-First Search 1 2 5 3 7 8 4 9

10 11 6 12 13 14 15 16

87. Optimization Heuristics: Rules of Thumb Less certain; may work in

some circumstances, but not others
88. Heuristic: Move Active Robot First States Considered 0 350000 700000

1050000 1400000 Original Algorithm Active First
89. Do Less Things: Check for Solutions at Generation Time 1

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
90. Do Less Things: Check for Solutions at Generation Time 1

2 3 4 5 6 X X X X X X X X X 16
91. Do Less Things: Check for Solutions at Generation Time 0

800,000 1,600,000 2,400,000 3,200,000 Original Algorithm Check at Generation Total States Considered

93. Do Things Faster: Precompute stopping cells States / second 0

675 1350 2025 2700 Original Algorithm Pre-compute Stops
94. Do Less Things / Do Things Faster: Treat non-active robots

as equivalent
95. Do Less Things / Do Things Faster: Treat non-active robots

as equivalent 0 1,000,000 2,000,000 3,000,000 4,000,000 Original Algorithm Check at Generation Robot Equivalence Total States Considered
96. Do Less Things / Do Things Faster: Treat non-active robots

as equivalent States / second 0 750 1500 2250 3000 Original Algorithm Pre-compute Stops Robot Equiv.
97. Do Things Faster: Sorted Array vs Set States / second

0 800 1600 2400 3200 Original Algorithm Pre-compute Stops Robot Equiv. Arrays not Sets
98. Do Things Faster: Less Object Creation States / second 0

1250 2500 3750 5000 Original Algorithm Pre-compute Stops Robot Equiv. Arrays not Sets Less Objects
99. Do Things Faster: Use Object Identity Instead of Deep Equality

States / second 0 1750 3500 5250 7000 Original Algorithm Pre-compute Stops Robot Equiv. Arrays not Sets Less Objects Object Identity
100. Results So Far Solving time (seconds) 0 750 1500 2250

3000 Original Active First Check at Gen. Pre-compute Robot Equiv. Arrays not Sets Less Objects Robot Identity

left

113. A* Algorithm 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 0
114. A* Algorithm 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 0
115. A* Algorithm 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 0
116. A* Algorithm 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 0
117. A* Algorithm 1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 0

MRU robots

types

127. Acknowledgements • Trever Yarrish of Zeal for the awesome graphics

and visualizations • My fellow Zeals for ideas, feedback, and pairing on the solver • Michael Fogleman for some optimization ideas • Trevor Lalish-Menagh for introducing me to the game • Screen Captures from War Games. (Dir. John Badham. MGM/UA. 1983)