summaryrefslogtreecommitdiffstats
path: root/src/test_cases/q4
diff options
context:
space:
mode:
Diffstat (limited to 'src/test_cases/q4')
-rw-r--r--src/test_cases/q4/0-expectimax1.solution3
-rw-r--r--src/test_cases/q4/0-expectimax1.test48
-rw-r--r--src/test_cases/q4/1-expectimax2.solution3
-rw-r--r--src/test_cases/q4/1-expectimax2.test48
-rw-r--r--src/test_cases/q4/2-one-ghost-3level.solution3
-rw-r--r--src/test_cases/q4/2-one-ghost-3level.test52
-rw-r--r--src/test_cases/q4/3-one-ghost-4level.solution3
-rw-r--r--src/test_cases/q4/3-one-ghost-4level.test79
-rw-r--r--src/test_cases/q4/4-two-ghosts-3level.solution3
-rw-r--r--src/test_cases/q4/4-two-ghosts-3level.test52
-rw-r--r--src/test_cases/q4/5-two-ghosts-4level.solution3
-rw-r--r--src/test_cases/q4/5-two-ghosts-4level.test79
-rw-r--r--src/test_cases/q4/6-1a-check-depth-one-ghost.solution3
-rw-r--r--src/test_cases/q4/6-1a-check-depth-one-ghost.test83
-rw-r--r--src/test_cases/q4/6-1b-check-depth-one-ghost.solution3
-rw-r--r--src/test_cases/q4/6-1b-check-depth-one-ghost.test83
-rw-r--r--src/test_cases/q4/6-1c-check-depth-one-ghost.solution3
-rw-r--r--src/test_cases/q4/6-1c-check-depth-one-ghost.test83
-rw-r--r--src/test_cases/q4/6-2a-check-depth-two-ghosts.solution3
-rw-r--r--src/test_cases/q4/6-2a-check-depth-two-ghosts.test110
-rw-r--r--src/test_cases/q4/6-2b-check-depth-two-ghosts.solution3
-rw-r--r--src/test_cases/q4/6-2b-check-depth-two-ghosts.test110
-rw-r--r--src/test_cases/q4/6-2c-check-depth-two-ghosts.solution3
-rw-r--r--src/test_cases/q4/6-2c-check-depth-two-ghosts.test110
-rw-r--r--src/test_cases/q4/7-pacman-game.solution444
-rw-r--r--src/test_cases/q4/7-pacman-game.test19
-rw-r--r--src/test_cases/q4/CONFIG2
27 files changed, 1438 insertions, 0 deletions
diff --git a/src/test_cases/q4/0-expectimax1.solution b/src/test_cases/q4/0-expectimax1.solution
new file mode 100644
index 0000000..ff7dfe6
--- /dev/null
+++ b/src/test_cases/q4/0-expectimax1.solution
@@ -0,0 +1,3 @@
+# This is the solution file for test_cases/q4/0-expectimax1.test.
+action: "Left"
+generated: "A B C D E F G H I exp1 exp2 exp3 max"
diff --git a/src/test_cases/q4/0-expectimax1.test b/src/test_cases/q4/0-expectimax1.test
new file mode 100644
index 0000000..deee59a
--- /dev/null
+++ b/src/test_cases/q4/0-expectimax1.test
@@ -0,0 +1,48 @@
+class: "GraphGameTreeTest"
+alg: "ExpectimaxAgent"
+depth: "2"
+
+# Tree adapted from lecture 6 slides
+diagram: """
+ max
+ /-/ | \--\
+ / | \
+ / | \
+ exp1 exp2 exp3
+ /|\ /|\ /|\
+ / | \ / | \ / | \
+A B C D E F G H I
+3 12 8 2 4 6 14 5 2
+"""
+num_agents: "2"
+
+start_state: "max"
+win_states: "A B C D E F G H I"
+lose_states: ""
+
+successors: """
+max Left exp1
+max Center exp2
+max Right exp3
+exp1 Left A
+exp1 Center B
+exp1 Right C
+exp2 Left D
+exp2 Center E
+exp2 Right F
+exp3 Left G
+exp3 Center H
+exp3 Right I
+"""
+
+evaluation: """
+A 3.0
+B 12.0
+C 8.0
+D 2.0
+E 4.0
+F 6.0
+G 14.0
+H 5.0
+I 2.0
+"""
diff --git a/src/test_cases/q4/1-expectimax2.solution b/src/test_cases/q4/1-expectimax2.solution
new file mode 100644
index 0000000..30c8768
--- /dev/null
+++ b/src/test_cases/q4/1-expectimax2.solution
@@ -0,0 +1,3 @@
+# This is the solution file for test_cases/q4/1-expectimax2.test.
+action: "Left"
+generated: "A B C D E F G H I exp1 exp2 exp3 max"
diff --git a/src/test_cases/q4/1-expectimax2.test b/src/test_cases/q4/1-expectimax2.test
new file mode 100644
index 0000000..d220fe6
--- /dev/null
+++ b/src/test_cases/q4/1-expectimax2.test
@@ -0,0 +1,48 @@
+class: "GraphGameTreeTest"
+alg: "ExpectimaxAgent"
+depth: "2"
+
+# Tree from lecture 7 slides
+diagram: """
+ max
+ /-/ | \--\
+ / | \
+ / | \
+ exp1 exp2 exp3
+ /|\ /|\ /|\
+ / | \ / | \ / | \
+A B C D E F G H I
+3 12 9 2 4 6 15 6 0
+"""
+num_agents: "2"
+
+start_state: "max"
+win_states: "A B C D E F G H I"
+lose_states: ""
+
+successors: """
+max Left exp1
+max Center exp2
+max Right exp3
+exp1 Left A
+exp1 Center B
+exp1 Right C
+exp2 Left D
+exp2 Center E
+exp2 Right F
+exp3 Left G
+exp3 Center H
+exp3 Right I
+"""
+
+evaluation: """
+A 3.0
+B 12.0
+C 9.0
+D 2.0
+E 4.0
+F 6.0
+G 15.0
+H 6.0
+I 0.0
+"""
diff --git a/src/test_cases/q4/2-one-ghost-3level.solution b/src/test_cases/q4/2-one-ghost-3level.solution
new file mode 100644
index 0000000..bde5c83
--- /dev/null
+++ b/src/test_cases/q4/2-one-ghost-3level.solution
@@ -0,0 +1,3 @@
+# This is the solution file for test_cases/q4/2-one-ghost-3level.test.
+action: "Left"
+generated: "a b1 b2 c1 c2 c3 c4 d1 d2 d3 d4 d5 d6 d7 d8"
diff --git a/src/test_cases/q4/2-one-ghost-3level.test b/src/test_cases/q4/2-one-ghost-3level.test
new file mode 100644
index 0000000..5778a1d
--- /dev/null
+++ b/src/test_cases/q4/2-one-ghost-3level.test
@@ -0,0 +1,52 @@
+class: "GraphGameTreeTest"
+alg: "ExpectimaxAgent"
+depth: "3"
+
+diagram: """
+ /-----a------\
+ / \
+ / \
+ b1 b2
+ / \ / \
+ c1 c2 c3 c4
+ / \ / \ / \ / \
+ d1 d2 d3 d4 d5 d6 d7 d8
+ 3 9 10 6 4 7 0 5
+
+a - max
+b - exp
+c - max
+"""
+num_agents: "2"
+
+start_state: "a"
+win_states: "d1 d2 d3 d4 d5 d6 d7 d8"
+lose_states: ""
+
+successors: """
+a Left b1
+a Right b2
+b1 Left c1
+b1 Right c2
+b2 Left c3
+b2 Right c4
+c1 Left d1
+c1 Right d2
+c2 Left d3
+c2 Right d4
+c3 Left d5
+c3 Right d6
+c4 Left d7
+c4 Right d8
+"""
+
+evaluation: """
+d1 3.0
+d2 9.0
+d3 10.0
+d4 6.0
+d5 4.0
+d6 7.0
+d7 0.0
+d8 5.0
+"""
diff --git a/src/test_cases/q4/3-one-ghost-4level.solution b/src/test_cases/q4/3-one-ghost-4level.solution
new file mode 100644
index 0000000..4ba2b47
--- /dev/null
+++ b/src/test_cases/q4/3-one-ghost-4level.solution
@@ -0,0 +1,3 @@
+# This is the solution file for test_cases/q4/3-one-ghost-4level.test.
+action: "Right"
+generated: "A B C D E F G H I J K L M N O P a b1 b2 c1 c2 c3 c4 d1 d2 d3 d4 d5 d6 d7 d8"
diff --git a/src/test_cases/q4/3-one-ghost-4level.test b/src/test_cases/q4/3-one-ghost-4level.test
new file mode 100644
index 0000000..6490a48
--- /dev/null
+++ b/src/test_cases/q4/3-one-ghost-4level.test
@@ -0,0 +1,79 @@
+class: "GraphGameTreeTest"
+alg: "ExpectimaxAgent"
+depth: "4"
+
+diagram: """
+ /-----a------\
+ / \
+ / \
+ b1 b2
+ / \ / \
+ c1 c2 c3 c4
+ / \ / \ / \ / \
+ d1 d2 d3 d4 d5 d6 d7 d8
+/ \ / \ / \ / \ / \ / \ / \ / \
+A B C D E F G H I J K L M N O P
+3 13 5 9 10 11 6 8 1 0 4 7 12 15 2 14
+
+a - max
+b - exp
+c - max
+d - exp
+"""
+num_agents: "2"
+
+start_state: "a"
+win_states: "A B C D E F G H I J K L M N O P"
+lose_states: ""
+
+successors: """
+a Left b1
+a Right b2
+b1 Left c1
+b1 Right c2
+b2 Left c3
+b2 Right c4
+c1 Left d1
+c1 Right d2
+c2 Left d3
+c2 Right d4
+c3 Left d5
+c3 Right d6
+c4 Left d7
+c4 Right d8
+d1 Left A
+d1 Right B
+d2 Left C
+d2 Right D
+d3 Left E
+d3 Right F
+d4 Left G
+d4 Right H
+d5 Left I
+d5 Right J
+d6 Left K
+d6 Right L
+d7 Left M
+d7 Right N
+d8 Left O
+d8 Right P
+"""
+
+evaluation: """
+A 3.0
+B 13.0
+C 5.0
+D 9.0
+E 10.0
+F 11.0
+G 6.0
+H 8.0
+I 1.0
+J 0.0
+K 4.0
+L 7.0
+M 12.0
+N 15.0
+O 2.0
+P 14.0
+"""
diff --git a/src/test_cases/q4/4-two-ghosts-3level.solution b/src/test_cases/q4/4-two-ghosts-3level.solution
new file mode 100644
index 0000000..6dbd664
--- /dev/null
+++ b/src/test_cases/q4/4-two-ghosts-3level.solution
@@ -0,0 +1,3 @@
+# This is the solution file for test_cases/q4/4-two-ghosts-3level.test.
+action: "Left"
+generated: "a b1 b2 c1 c2 c3 c4 d1 d2 d3 d4 d5 d6 d7 d8"
diff --git a/src/test_cases/q4/4-two-ghosts-3level.test b/src/test_cases/q4/4-two-ghosts-3level.test
new file mode 100644
index 0000000..d39bf1c
--- /dev/null
+++ b/src/test_cases/q4/4-two-ghosts-3level.test
@@ -0,0 +1,52 @@
+class: "GraphGameTreeTest"
+alg: "ExpectimaxAgent"
+depth: "3"
+
+diagram: """
+ /-----a------\
+ / \
+ / \
+ b1 b2
+ / \ / \
+ c1 c2 c3 c4
+ / \ / \ / \ / \
+ d1 d2 d3 d4 d5 d6 d7 d8
+ 3 9 10 6 4 7 0 5
+
+a - max
+b - exp
+c - exp
+"""
+num_agents: "3"
+
+start_state: "a"
+win_states: "d1 d2 d3 d4 d5 d6 d7 d8"
+lose_states: ""
+
+successors: """
+a Left b1
+a Right b2
+b1 Left c1
+b1 Right c2
+b2 Left c3
+b2 Right c4
+c1 Left d1
+c1 Right d2
+c2 Left d3
+c2 Right d4
+c3 Left d5
+c3 Right d6
+c4 Left d7
+c4 Right d8
+"""
+
+evaluation: """
+d1 3.0
+d2 9.0
+d3 10.0
+d4 6.0
+d5 4.0
+d6 7.0
+d7 0.0
+d8 5.0
+"""
diff --git a/src/test_cases/q4/5-two-ghosts-4level.solution b/src/test_cases/q4/5-two-ghosts-4level.solution
new file mode 100644
index 0000000..caccbea
--- /dev/null
+++ b/src/test_cases/q4/5-two-ghosts-4level.solution
@@ -0,0 +1,3 @@
+# This is the solution file for test_cases/q4/5-two-ghosts-4level.test.
+action: "Left"
+generated: "A B C D E F G H I J K L M N O P a b1 b2 c1 c2 c3 c4 d1 d2 d3 d4 d5 d6 d7 d8"
diff --git a/src/test_cases/q4/5-two-ghosts-4level.test b/src/test_cases/q4/5-two-ghosts-4level.test
new file mode 100644
index 0000000..b2d2733
--- /dev/null
+++ b/src/test_cases/q4/5-two-ghosts-4level.test
@@ -0,0 +1,79 @@
+class: "GraphGameTreeTest"
+alg: "ExpectimaxAgent"
+depth: "4"
+
+diagram: """
+ /-----a------\
+ / \
+ / \
+ b1 b2
+ / \ / \
+ c1 c2 c3 c4
+ / \ / \ / \ / \
+ d1 d2 d3 d4 d5 d6 d7 d8
+/ \ / \ / \ / \ / \ / \ / \ / \
+A B C D E F G H I J K L M N O P
+3 13 5 9 10 11 6 8 1 0 4 7 12 15 2 14
+
+a - max
+b - exp
+c - exp
+d - max
+"""
+num_agents: "3"
+
+start_state: "a"
+win_states: "A B C D E F G H I J K L M N O P"
+lose_states: ""
+
+successors: """
+a Left b1
+a Right b2
+b1 Left c1
+b1 Right c2
+b2 Left c3
+b2 Right c4
+c1 Left d1
+c1 Right d2
+c2 Left d3
+c2 Right d4
+c3 Left d5
+c3 Right d6
+c4 Left d7
+c4 Right d8
+d1 Left A
+d1 Right B
+d2 Left C
+d2 Right D
+d3 Left E
+d3 Right F
+d4 Left G
+d4 Right H
+d5 Left I
+d5 Right J
+d6 Left K
+d6 Right L
+d7 Left M
+d7 Right N
+d8 Left O
+d8 Right P
+"""
+
+evaluation: """
+A 3.0
+B 13.0
+C 5.0
+D 9.0
+E 10.0
+F 11.0
+G 6.0
+H 8.0
+I 1.0
+J 0.0
+K 4.0
+L 7.0
+M 12.0
+N 15.0
+O 2.0
+P 14.0
+"""
diff --git a/src/test_cases/q4/6-1a-check-depth-one-ghost.solution b/src/test_cases/q4/6-1a-check-depth-one-ghost.solution
new file mode 100644
index 0000000..22aebdc
--- /dev/null
+++ b/src/test_cases/q4/6-1a-check-depth-one-ghost.solution
@@ -0,0 +1,3 @@
+# This is the solution file for test_cases/q4/6-1a-check-depth-one-ghost.test.
+action: "Left"
+generated: "a b1 b2 b3 c1 c2 c3"
diff --git a/src/test_cases/q4/6-1a-check-depth-one-ghost.test b/src/test_cases/q4/6-1a-check-depth-one-ghost.test
new file mode 100644
index 0000000..4d36ea5
--- /dev/null
+++ b/src/test_cases/q4/6-1a-check-depth-one-ghost.test
@@ -0,0 +1,83 @@
+class: "GraphGameTreeTest"
+alg: "ExpectimaxAgent"
+depth: "1"
+
+diagram: """
+ a
+ /-/ | \--\
+ / | \
+ 0 b1 0 b2 b3 8
+ | | |
+ 10 c1 0 c2 c3 8
+ | | |
+ 0 d1 0 d2 d3 8
+ | | |
+ 0 e1 10 e2 e3 8
+ | | |
+ 0 f1 0 f2 f3 8
+ | | |
+ g1 g2 g3
+ 0 0 8
+
+a - max
+b - min
+c - max
+d - min
+e - max
+f - min
+
+At depth 1, the evaluation function is called at level c,
+so Left should be returned. If your algorithm is returning a
+different action, check how you implemented your depth.
+"""
+
+num_agents: "2"
+
+start_state: "a"
+win_states: "g1 g2 g3"
+lose_states: ""
+
+successors: """
+a Left b1
+a Center b2
+a Right b3
+b1 Center c1
+b2 Center c2
+b3 Center c3
+c1 Center d1
+c2 Center d2
+c3 Center d3
+d1 Center e1
+d2 Center e2
+d3 Center e3
+e1 Center f1
+e2 Center f2
+e3 Center f3
+f1 Center g1
+f2 Center g2
+f3 Center g3
+"""
+
+
+evaluation: """
+b1 0.0
+b2 0.0
+b3 8.0
+c1 10.0
+c2 0.0
+c3 8.0
+d1 0.0
+d2 0.0
+d3 8.0
+e1 0.0
+e2 10.0
+e3 8.0
+f1 0.0
+f2 0.0
+f3 8.0
+g1 0.0
+g2 0.0
+g3 8.0
+"""
+
+
diff --git a/src/test_cases/q4/6-1b-check-depth-one-ghost.solution b/src/test_cases/q4/6-1b-check-depth-one-ghost.solution
new file mode 100644
index 0000000..e34e3d3
--- /dev/null
+++ b/src/test_cases/q4/6-1b-check-depth-one-ghost.solution
@@ -0,0 +1,3 @@
+# This is the solution file for test_cases/q4/6-1b-check-depth-one-ghost.test.
+action: "Center"
+generated: "a b1 b2 b3 c1 c2 c3 d1 d2 d3 e1 e2 e3"
diff --git a/src/test_cases/q4/6-1b-check-depth-one-ghost.test b/src/test_cases/q4/6-1b-check-depth-one-ghost.test
new file mode 100644
index 0000000..a63d167
--- /dev/null
+++ b/src/test_cases/q4/6-1b-check-depth-one-ghost.test
@@ -0,0 +1,83 @@
+class: "GraphGameTreeTest"
+alg: "ExpectimaxAgent"
+depth: "2"
+
+diagram: """
+ a
+ /-/ | \--\
+ / | \
+ 0 b1 0 b2 b3 8
+ | | |
+ 10 c1 0 c2 c3 8
+ | | |
+ 0 d1 0 d2 d3 8
+ | | |
+ 0 e1 10 e2 e3 8
+ | | |
+ 0 f1 0 f2 f3 8
+ | | |
+ g1 g2 g3
+ 0 0 8
+
+a - max
+b - min
+c - max
+d - min
+e - max
+f - min
+
+At depth 2, the evaluation function is called at level e,
+so Center should be returned. If your algorithm is returning a
+different action, check how you implemented your depth.
+"""
+
+num_agents: "2"
+
+start_state: "a"
+win_states: "g1 g2 g3"
+lose_states: ""
+
+successors: """
+a Left b1
+a Center b2
+a Right b3
+b1 Center c1
+b2 Center c2
+b3 Center c3
+c1 Center d1
+c2 Center d2
+c3 Center d3
+d1 Center e1
+d2 Center e2
+d3 Center e3
+e1 Center f1
+e2 Center f2
+e3 Center f3
+f1 Center g1
+f2 Center g2
+f3 Center g3
+"""
+
+
+evaluation: """
+b1 0.0
+b2 0.0
+b3 8.0
+c1 10.0
+c2 0.0
+c3 8.0
+d1 0.0
+d2 0.0
+d3 8.0
+e1 0.0
+e2 10.0
+e3 8.0
+f1 0.0
+f2 0.0
+f3 8.0
+g1 0.0
+g2 0.0
+g3 8.0
+"""
+
+
diff --git a/src/test_cases/q4/6-1c-check-depth-one-ghost.solution b/src/test_cases/q4/6-1c-check-depth-one-ghost.solution
new file mode 100644
index 0000000..cd33b5a
--- /dev/null
+++ b/src/test_cases/q4/6-1c-check-depth-one-ghost.solution
@@ -0,0 +1,3 @@
+# This is the solution file for test_cases/q4/6-1c-check-depth-one-ghost.test.
+action: "Right"
+generated: "a b1 b2 b3 c1 c2 c3 d1 d2 d3 e1 e2 e3 f1 f2 f3 g1 g2 g3"
diff --git a/src/test_cases/q4/6-1c-check-depth-one-ghost.test b/src/test_cases/q4/6-1c-check-depth-one-ghost.test
new file mode 100644
index 0000000..84e78f0
--- /dev/null
+++ b/src/test_cases/q4/6-1c-check-depth-one-ghost.test
@@ -0,0 +1,83 @@
+class: "GraphGameTreeTest"
+alg: "ExpectimaxAgent"
+depth: "3"
+
+diagram: """
+ a
+ /-/ | \--\
+ / | \
+ 0 b1 0 b2 b3 8
+ | | |
+ 10 c1 0 c2 c3 8
+ | | |
+ 0 d1 0 d2 d3 8
+ | | |
+ 0 e1 10 e2 e3 8
+ | | |
+ 0 f1 0 f2 f3 8
+ | | |
+ g1 g2 g3
+ 0 0 8
+
+a - max
+b - min
+c - max
+d - min
+e - max
+f - min
+
+At depth 3, the evaluation function is called at level g,
+so Right should be returned. If your algorithm is returning a
+different action, check how you implemented your depth.
+"""
+
+num_agents: "2"
+
+start_state: "a"
+win_states: "g1 g2 g3"
+lose_states: ""
+
+successors: """
+a Left b1
+a Center b2
+a Right b3
+b1 Center c1
+b2 Center c2
+b3 Center c3
+c1 Center d1
+c2 Center d2
+c3 Center d3
+d1 Center e1
+d2 Center e2
+d3 Center e3
+e1 Center f1
+e2 Center f2
+e3 Center f3
+f1 Center g1
+f2 Center g2
+f3 Center g3
+"""
+
+
+evaluation: """
+b1 0.0
+b2 0.0
+b3 8.0
+c1 10.0
+c2 0.0
+c3 8.0
+d1 0.0
+d2 0.0
+d3 8.0
+e1 0.0
+e2 10.0
+e3 8.0
+f1 0.0
+f2 0.0
+f3 8.0
+g1 0.0
+g2 0.0
+g3 8.0
+"""
+
+
diff --git a/src/test_cases/q4/6-2a-check-depth-two-ghosts.solution b/src/test_cases/q4/6-2a-check-depth-two-ghosts.solution
new file mode 100644
index 0000000..0e9c9e9
--- /dev/null
+++ b/src/test_cases/q4/6-2a-check-depth-two-ghosts.solution
@@ -0,0 +1,3 @@
+# This is the solution file for test_cases/q4/6-2a-check-depth-two-ghosts.test.
+action: "Left"
+generated: "a b1 b2 b3 c1 c2 c3 d1 d2 d3"
diff --git a/src/test_cases/q4/6-2a-check-depth-two-ghosts.test b/src/test_cases/q4/6-2a-check-depth-two-ghosts.test
new file mode 100644
index 0000000..36ecd4e
--- /dev/null
+++ b/src/test_cases/q4/6-2a-check-depth-two-ghosts.test
@@ -0,0 +1,110 @@
+class: "GraphGameTreeTest"
+alg: "ExpectimaxAgent"
+depth: "1"
+
+diagram: """
+ a
+ /-/ | \--\
+ / | \
+ 0 b1 0 b2 b3 8
+ | | |
+ 0 c1 0 c2 c3 8
+ | | |
+ 10 d1 0 d2 d3 8
+ | | |
+ 0 e1 0 e2 e3 8
+ | | |
+ 0 f1 0 f2 f3 8
+ | | |
+ 0 g1 10 g2 g3 8
+ | | |
+ 0 h1 0 h2 h3 8
+ | | |
+ 0 i1 0 i2 i3 8
+ | | |
+ j1 j2 j3
+ 0 0 8
+
+a - max
+b - min
+c - min
+d - max
+e - min
+f - min
+g - max
+h - min
+i - min
+
+At depth 1, the evaluation function is called at level d,
+so Left should be returned. If your algorithm is returning a
+different action, check how you implemented your depth.
+"""
+
+num_agents: "3"
+
+start_state: "a"
+win_states: "j1 j2 j3"
+lose_states: ""
+
+successors: """
+a Left b1
+a Center b2
+a Right b3
+b1 Center c1
+b2 Center c2
+b3 Center c3
+c1 Center d1
+c2 Center d2
+c3 Center d3
+d1 Center e1
+d2 Center e2
+d3 Center e3
+e1 Center f1
+e2 Center f2
+e3 Center f3
+f1 Center g1
+f2 Center g2
+f3 Center g3
+g1 Center h1
+g2 Center h2
+g3 Center h3
+h1 Center i1
+h2 Center i2
+h3 Center i3
+i1 Center j1
+i2 Center j2
+i3 Center j3
+"""
+
+
+evaluation: """
+b1 0.0
+b2 0.0
+b3 8.0
+c1 0.0
+c2 0.0
+c3 8.0
+d1 10.0
+d2 0.0
+d3 8.0
+e1 0.0
+e2 0.0
+e3 8.0
+f1 0.0
+f2 0.0
+f3 8.0
+g1 0.0
+g2 10.0
+g3 8.0
+h1 0.0
+h2 0.0
+h3 8.0
+i1 0.0
+i2 0.0
+i3 8.0
+j1 0.0
+j2 0.0
+j3 8.0
+"""
+
+
diff --git a/src/test_cases/q4/6-2b-check-depth-two-ghosts.solution b/src/test_cases/q4/6-2b-check-depth-two-ghosts.solution
new file mode 100644
index 0000000..3fcde21
--- /dev/null
+++ b/src/test_cases/q4/6-2b-check-depth-two-ghosts.solution
@@ -0,0 +1,3 @@
+# This is the solution file for test_cases/q4/6-2b-check-depth-two-ghosts.test.
+action: "Center"
+generated: "a b1 b2 b3 c1 c2 c3 d1 d2 d3 e1 e2 e3 f1 f2 f3 g1 g2 g3"
diff --git a/src/test_cases/q4/6-2b-check-depth-two-ghosts.test b/src/test_cases/q4/6-2b-check-depth-two-ghosts.test
new file mode 100644
index 0000000..d1b85b7
--- /dev/null
+++ b/src/test_cases/q4/6-2b-check-depth-two-ghosts.test
@@ -0,0 +1,110 @@
+class: "GraphGameTreeTest"
+alg: "ExpectimaxAgent"
+depth: "2"
+
+diagram: """
+ a
+ /-/ | \--\
+ / | \
+ 0 b1 0 b2 b3 8
+ | | |
+ 0 c1 0 c2 c3 8
+ | | |
+ 10 d1 0 d2 d3 8
+ | | |
+ 0 e1 0 e2 e3 8
+ | | |
+ 0 f1 0 f2 f3 8
+ | | |
+ 0 g1 10 g2 g3 8
+ | | |
+ 0 h1 0 h2 h3 8
+ | | |
+ 0 i1 0 i2 i3 8
+ | | |
+ j1 j2 j3
+ 0 0 8
+
+a - max
+b - min
+c - min
+d - max
+e - min
+f - min
+g - max
+h - min
+i - min
+
+At depth 2, the evaluation function is called at level g,
+so Center should be returned. If your algorithm is returning
+a different action, check how you implemented your depth.
+"""
+
+num_agents: "3"
+
+start_state: "a"
+win_states: "j1 j2 j3"
+lose_states: ""
+
+successors: """
+a Left b1
+a Center b2
+a Right b3
+b1 Center c1
+b2 Center c2
+b3 Center c3
+c1 Center d1
+c2 Center d2
+c3 Center d3
+d1 Center e1
+d2 Center e2
+d3 Center e3
+e1 Center f1
+e2 Center f2
+e3 Center f3
+f1 Center g1
+f2 Center g2
+f3 Center g3
+g1 Center h1
+g2 Center h2
+g3 Center h3
+h1 Center i1
+h2 Center i2
+h3 Center i3
+i1 Center j1
+i2 Center j2
+i3 Center j3
+"""
+
+
+evaluation: """
+b1 0.0
+b2 0.0
+b3 8.0
+c1 0.0
+c2 0.0
+c3 8.0
+d1 10.0
+d2 0.0
+d3 8.0
+e1 0.0
+e2 0.0
+e3 8.0
+f1 0.0
+f2 0.0
+f3 8.0
+g1 0.0
+g2 10.0
+g3 8.0
+h1 0.0
+h2 0.0
+h3 8.0
+i1 0.0
+i2 0.0
+i3 8.0
+j1 0.0
+j2 0.0
+j3 8.0
+"""
+
+
diff --git a/src/test_cases/q4/6-2c-check-depth-two-ghosts.solution b/src/test_cases/q4/6-2c-check-depth-two-ghosts.solution
new file mode 100644
index 0000000..bad1cf9
--- /dev/null
+++ b/src/test_cases/q4/6-2c-check-depth-two-ghosts.solution
@@ -0,0 +1,3 @@
+# This is the solution file for test_cases/q4/6-2c-check-depth-two-ghosts.test.
+action: "Right"
+generated: "a b1 b2 b3 c1 c2 c3 d1 d2 d3 e1 e2 e3 f1 f2 f3 g1 g2 g3 h1 h2 h3 i1 i2 i3 j1 j2 j3"
diff --git a/src/test_cases/q4/6-2c-check-depth-two-ghosts.test b/src/test_cases/q4/6-2c-check-depth-two-ghosts.test
new file mode 100644
index 0000000..6c4c9ea
--- /dev/null
+++ b/src/test_cases/q4/6-2c-check-depth-two-ghosts.test
@@ -0,0 +1,110 @@
+class: "GraphGameTreeTest"
+alg: "ExpectimaxAgent"
+depth: "3"
+
+diagram: """
+ a
+ /-/ | \--\
+ / | \
+ 0 b1 0 b2 b3 8
+ | | |
+ 0 c1 0 c2 c3 8
+ | | |
+ 10 d1 0 d2 d3 8
+ | | |
+ 0 e1 0 e2 e3 8
+ | | |
+ 0 f1 0 f2 f3 8
+ | | |
+ 0 g1 10 g2 g3 8
+ | | |
+ 0 h1 0 h2 h3 8
+ | | |
+ 0 i1 0 i2 i3 8
+ | | |
+ j1 j2 j3
+ 0 0 8
+
+a - max
+b - min
+c - min
+d - max
+e - min
+f - min
+g - max
+h - min
+i - min
+
+At depth 3, the evaluation function is called at level j,
+so Right should be returned. If your algorithm is returning
+a different action, check how you implemented your depth.
+"""
+
+num_agents: "3"
+
+start_state: "a"
+win_states: "j1 j2 j3"
+lose_states: ""
+
+successors: """
+a Left b1
+a Center b2
+a Right b3
+b1 Center c1
+b2 Center c2
+b3 Center c3
+c1 Center d1
+c2 Center d2
+c3 Center d3
+d1 Center e1
+d2 Center e2
+d3 Center e3
+e1 Center f1
+e2 Center f2
+e3 Center f3
+f1 Center g1
+f2 Center g2
+f3 Center g3
+g1 Center h1
+g2 Center h2
+g3 Center h3
+h1 Center i1
+h2 Center i2
+h3 Center i3
+i1 Center j1
+i2 Center j2
+i3 Center j3
+"""
+
+
+evaluation: """
+b1 0.0
+b2 0.0
+b3 8.0
+c1 0.0
+c2 0.0
+c3 8.0
+d1 10.0
+d2 0.0
+d3 8.0
+e1 0.0
+e2 0.0
+e3 8.0
+f1 0.0
+f2 0.0
+f3 8.0
+g1 0.0
+g2 10.0
+g3 8.0
+h1 0.0
+h2 0.0
+h3 8.0
+i1 0.0
+i2 0.0
+i3 8.0
+j1 0.0
+j2 0.0
+j3 8.0
+"""
+
+
diff --git a/src/test_cases/q4/7-pacman-game.solution b/src/test_cases/q4/7-pacman-game.solution
new file mode 100644
index 0000000..ecc544b
--- /dev/null
+++ b/src/test_cases/q4/7-pacman-game.solution
@@ -0,0 +1,444 @@
+optimalActions: """
+[[["West", "East"], 59], [["West", "East"], 35]]
+[[["West"], 190], [["West"], 127]]
+[[["West"], 190], [["West"], 135]]
+[[["West", "North"], 120], [["West", "North"], 82]]
+[[["West"], 77], [["West"], 57]]
+[[["West", "North"], 143], [["West", "North"], 97]]
+[[["West"], 155], [["West"], 110]]
+[[["West"], 40], [["West"], 27]]
+[[["North"], 64], [["North"], 43]]
+[[["North"], 85], [["North"], 57]]
+[[["North"], 106], [["North"], 71]]
+[[["North"], 97], [["North"], 65]]
+[[["East"], 154], [["East"], 103]]
+[[["Stop"], 130], [["West"], 85]]
+[[["West"], 30], [["West"], 17]]
+[[["South"], 15], [["South"], 9]]
+[[["South"], 15], [["South"], 9]]
+[[["South"], 15], [["South"], 9]]
+[[["South"], 15], [["South"], 9]]
+[[["East"], 15], [["East"], 9]]
+[[["East"], 15], [["East"], 9]]
+[[["East"], 18], [["East"], 12]]
+[[["North"], 29], [["North"], 18]]
+[[["North"], 50], [["North"], 31]]
+[[["West"], 55], [["West"], 36]]
+[[["East"], 29], [["East"], 16]]
+[[["North"], 89], [["North"], 61]]
+[[["East", "North"], 161], [["East", "North"], 121]]
+[[["East", "North"], 221], [["East", "North"], 166]]
+[[["North", "South"], 105], [["North", "South"], 77]]
+[[["West"], 69], [["West"], 51]]
+[[["West"], 94], [["West"], 69]]
+[[["West", "Stop"], 57], [["West"], 42]]
+[[["West", "Stop", "East"], 69], [["West", "East"], 49]]
+[[["West", "Stop", "East"], 61], [["West", "East"], 41]]
+[[["Stop", "East", "South"], 55], [["East", "South"], 37]]
+[[["Stop", "East", "South"], 28], [["East", "South"], 19]]
+[[["Stop", "East", "South"], 34], [["East", "South"], 23]]
+[[["Stop", "East", "South"], 55], [["East", "South"], 37]]
+[[["Stop", "East", "South"], 55], [["East", "South"], 37]]
+[[["Stop", "East", "South"], 61], [["East", "South"], 41]]
+[[["Stop", "East", "South"], 85], [["East", "South"], 57]]
+[[["Stop", "East", "South"], 64], [["East", "South"], 43]]
+[[["Stop", "East", "South"], 61], [["East", "South"], 41]]
+[[["Stop", "East", "South"], 61], [["East", "South"], 41]]
+[[["Stop", "East", "South"], 85], [["East", "South"], 57]]
+[[["Stop", "East", "South"], 102], [["East", "South"], 67]]
+[[["Stop", "South"], 23], [["South"], 13]]
+[[["South"], 15], [["South"], 9]]
+[[["South"], 15], [["South"], 9]]
+[[["South"], 15], [["South"], 9]]
+[[["South"], 15], [["South"], 9]]
+[[["East"], 15], [["East"], 9]]
+[[["East"], 15], [["East"], 9]]
+[[["East"], 18], [["East"], 12]]
+[[["East", "North"], 29], [["East", "North"], 18]]
+[[["East"], 38], [["East"], 22]]
+[[["North"], 29], [["North"], 18]]
+[[["North"], 38], [["North"], 22]]
+[[["East"], 33], [["East"], 22]]
+[[["East"], 37], [["East"], 18]]
+[[["East"], 18], [["East"], 12]]
+[[["East"], 37], [["East"], 26]]
+[[["East"], 69], [["East"], 41]]
+[[["East"], 56], [["East"], 26]]
+[[["East"], 44], [["East"], 29]]
+[[["North", "South"], 83], [["North", "South"], 52]]
+[[["East", "North"], 121], [["East", "North"], 74]]
+[[["East", "North"], 97], [["East", "North"], 73]]
+[[["North", "South"], 173], [["North", "South"], 130]]
+[[["West", "East"], 90], [["West", "East"], 66]]
+[[["West", "Stop", "East"], 161], [["West", "East"], 118]]
+[[["Stop", "East", "South"], 58], [["East", "South"], 43]]
+[[["Stop", "East"], 120], [["East"], 85]]
+[[["East"], 78], [["East"], 45]]
+[[["West"], 77], [["West"], 42]]
+[[["South"], 83], [["South"], 48]]
+[[["South"], 49], [["South"], 37]]
+[[["South"], 185], [["South"], 104]]
+[[["South"], 68], [["South"], 41]]
+[[["West"], 30], [["West"], 18]]
+[[["West"], 56], [["West"], 29]]
+[[["West"], 14], [["West"], 10]]
+[[["West"], 20], [["West"], 14]]
+[[["West"], 13], [["West"], 9]]
+[[["West"], 13], [["West"], 9]]
+[[["West"], 16], [["West"], 12]]
+[[["West", "North"], 30], [["West", "North"], 20]]
+[[["West"], 38], [["West"], 23]]
+[[["West", "Stop", "East", "North"], 70], [["West", "East", "North"], 46]]
+[[["West", "Stop", "East"], 128], [["West", "East"], 89]]
+[[["West", "Stop", "East"], 31], [["West", "East"], 20]]
+[[["Stop", "East", "North"], 69], [["East", "North"], 45]]
+[[["Stop", "North"], 58], [["North"], 31]]
+[[["North"], 34], [["North"], 19]]
+[[["North"], 30], [["North"], 17]]
+[[["North"], 19], [["North"], 11]]
+[[["North"], 34], [["North"], 19]]
+[[["East"], 30], [["East"], 17]]
+[[["East"], 19], [["East"], 11]]
+[[["East"], 44], [["East"], 29]]
+[[["East", "South"], 87], [["East", "South"], 60]]
+[[["East", "South"], 108], [["East", "South"], 62]]
+[[["South"], 120], [["South"], 61]]
+[[["North", "South"], 209], [["North", "South"], 132]]
+[[["West"], 108], [["West"], 60]]
+[[["West", "Stop", "East", "South"], 83], [["West", "East", "South"], 61]]
+[[["West", "Stop", "East", "South"], 90], [["West", "East", "South"], 66]]
+[[["West", "Stop", "East"], 134], [["West", "East"], 95]]
+[[["West", "Stop", "East"], 82], [["West", "East"], 55]]
+[[["Stop", "East", "South"], 142], [["East", "South"], 95]]
+[[["Stop", "East", "South"], 98], [["East", "South"], 65]]
+[[["Stop", "East", "South"], 128], [["East", "South"], 86]]
+[[["Stop", "East", "South"], 82], [["East", "South"], 55]]
+[[["Stop", "East", "South"], 85], [["East", "South"], 57]]
+[[["Stop", "East", "South"], 190], [["East", "South"], 127]]
+[[["Stop", "East", "South"], 158], [["East", "South"], 103]]
+[[["Stop", "South"], 50], [["South"], 27]]
+[[["South"], 30], [["South"], 17]]
+[[["South"], 15], [["South"], 9]]
+[[["South"], 15], [["South"], 9]]
+[[["South"], 15], [["South"], 9]]
+[[["East"], 15], [["East"], 9]]
+[[["East"], 15], [["East"], 9]]
+[[["East"], 18], [["East"], 12]]
+[[["East", "North"], 29], [["East", "North"], 18]]
+[[["East"], 37], [["East"], 22]]
+[[["East", "North"], 41], [["East", "North"], 24]]
+[[["East"], 59], [["East"], 29]]
+[[["East"], 19], [["East"], 11]]
+[[["East"], 26], [["East"], 15]]
+[[["East"], 15], [["East"], 9]]
+[[["East"], 15], [["East"], 9]]
+[[["East"], 18], [["East"], 12]]
+[[["East"], 29], [["East"], 18]]
+[[["East"], 37], [["East"], 22]]
+[[["East", "North"], 41], [["East", "North"], 24]]
+[[["East"], 59], [["East"], 29]]
+[[["East"], 19], [["East"], 11]]
+[[["North"], 26], [["North"], 15]]
+[[["North"], 19], [["North"], 11]]
+[[["North"], 30], [["North"], 17]]
+[[["North"], 34], [["North"], 19]]
+[[["West"], 34], [["West"], 19]]
+[[["West"], 25], [["West"], 13]]
+[[["West", "Stop", "East"], 7], [["West", "East"], 3]]
+"""
+altDepthActions: """
+[["West", "East"], ["West", "East"], ["West", "East"], ["West", "East"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West", "North"], ["West", "North"], ["West", "North"], ["West", "North"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West", "North"], ["West", "North"], ["West", "North"], ["West", "North"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["West", "Stop"], ["West"], ["Stop"], ["West"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["North"], ["North"], ["West"], ["West"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["East", "North"], ["East", "North"], ["East", "North"], ["East", "North"]]
+[["East", "North"], ["East", "North"], ["East"], ["East"]]
+[["North", "South"], ["North", "South"], ["North"], ["North"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West"], ["West"], ["West", "Stop"], ["West"]]
+[["West"], ["West"], ["West", "Stop", "East", "South"], ["West", "East", "South"]]
+[["West", "Stop", "East"], ["West", "East"], ["West", "Stop", "East"], ["West", "East"]]
+[["West", "Stop", "East"], ["West", "East"], ["West", "Stop", "East"], ["West", "East"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "South"], ["South"], ["Stop", "South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East", "North"], ["East", "North"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["North", "South"], ["North", "South"], ["South"], ["South"]]
+[["East", "North"], ["East", "North"], ["East", "North"], ["East", "North"]]
+[["East", "North"], ["East", "North"], ["East", "North"], ["East", "North"]]
+[["North", "South"], ["North", "South"], ["North"], ["North"]]
+[["West", "East"], ["West", "East"], ["East"], ["East"]]
+[["West"], ["West"], ["East"], ["East"]]
+[["Stop", "East", "South"], ["East", "South"], ["East"], ["East"]]
+[["Stop", "East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["West", "East"], ["West", "East"], ["West"], ["West"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West", "North"], ["West", "North"], ["West", "North"], ["West", "North"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West", "Stop", "East", "North"], ["West", "East", "North"], ["West", "Stop", "East", "North"], ["West", "East", "North"]]
+[["West", "Stop", "East"], ["West", "East"], ["West", "Stop", "East"], ["West", "East"]]
+[["West", "Stop", "East"], ["West", "East"], ["West", "Stop", "East"], ["West", "East"]]
+[["Stop", "East", "North"], ["East", "North"], ["Stop", "East", "North"], ["East", "North"]]
+[["Stop", "North"], ["North"], ["Stop", "North"], ["North"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East", "South"], ["East", "South"], ["East", "South"], ["East", "South"]]
+[["East", "South"], ["East", "South"], ["East", "South"], ["East", "South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["North", "South"], ["North", "South"], ["North", "South"], ["North", "South"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West", "Stop", "East", "South"], ["West", "East", "South"], ["West", "Stop", "East", "South"], ["West", "East", "South"]]
+[["West", "Stop", "East", "South"], ["West", "East", "South"], ["West", "Stop", "East", "South"], ["West", "East", "South"]]
+[["West", "Stop", "East"], ["West", "East"], ["West", "Stop", "East"], ["West", "East"]]
+[["West", "Stop", "East"], ["West", "East"], ["West", "Stop", "East"], ["West", "East"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"], ["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "South"], ["South"], ["Stop", "South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["South"], ["South"], ["South"], ["South"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East", "North"], ["East", "North"], ["East", "North"], ["East", "North"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East", "North"], ["East", "North"], ["East", "North"], ["East", "North"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East", "North"], ["East", "North"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["East"], ["East"], ["East"], ["East"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["North"], ["North"], ["North"], ["North"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West"], ["West"], ["West"], ["West"]]
+[["West", "Stop", "East"], ["West", "East"], ["West", "Stop", "East"], ["West", "East"]]
+"""
+partialPlyBugActions: """
+[["West", "East"], ["West", "East"]]
+[["West"], ["West"]]
+[["West"], ["West"]]
+[["West", "North"], ["West", "North"]]
+[["West"], ["West"]]
+[["West", "North"], ["West", "North"]]
+[["West"], ["West"]]
+[["West"], ["West"]]
+[["North"], ["North"]]
+[["North"], ["North"]]
+[["North"], ["North"]]
+[["North"], ["North"]]
+[["East"], ["East"]]
+[["Stop"], ["West"]]
+[["West"], ["West"]]
+[["South"], ["South"]]
+[["South"], ["South"]]
+[["South"], ["South"]]
+[["South"], ["South"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["North"], ["North"]]
+[["North"], ["North"]]
+[["West"], ["West"]]
+[["East"], ["East"]]
+[["North"], ["North"]]
+[["East", "North"], ["East", "North"]]
+[["East", "North"], ["East", "North"]]
+[["North", "South"], ["North", "South"]]
+[["West"], ["West"]]
+[["West"], ["West"]]
+[["West", "Stop"], ["West"]]
+[["West", "Stop", "East"], ["West", "East"]]
+[["West", "Stop", "East"], ["West", "East"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "South"], ["South"]]
+[["South"], ["South"]]
+[["South"], ["South"]]
+[["South"], ["South"]]
+[["South"], ["South"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East", "North"], ["East", "North"]]
+[["East"], ["East"]]
+[["North"], ["North"]]
+[["North"], ["North"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["North", "South"], ["North", "South"]]
+[["East", "North"], ["East", "North"]]
+[["East", "North"], ["East", "North"]]
+[["North", "South"], ["North", "South"]]
+[["West", "East"], ["West", "East"]]
+[["West", "Stop", "East"], ["West", "East"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East"], ["East"]]
+[["East"], ["East"]]
+[["West"], ["West"]]
+[["South"], ["South"]]
+[["South"], ["South"]]
+[["South"], ["South"]]
+[["South"], ["South"]]
+[["West"], ["West"]]
+[["West"], ["West"]]
+[["West"], ["West"]]
+[["West"], ["West"]]
+[["West"], ["West"]]
+[["West"], ["West"]]
+[["West"], ["West"]]
+[["West", "North"], ["West", "North"]]
+[["West"], ["West"]]
+[["West", "Stop", "East", "North"], ["West", "East", "North"]]
+[["West", "Stop", "East"], ["West", "East"]]
+[["West", "Stop", "East"], ["West", "East"]]
+[["Stop", "East", "North"], ["East", "North"]]
+[["Stop", "North"], ["North"]]
+[["North"], ["North"]]
+[["North"], ["North"]]
+[["North"], ["North"]]
+[["North"], ["North"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East", "South"], ["East", "South"]]
+[["East", "South"], ["East", "South"]]
+[["South"], ["South"]]
+[["North", "South"], ["North", "South"]]
+[["West"], ["West"]]
+[["West", "Stop", "East", "South"], ["West", "East", "South"]]
+[["West", "Stop", "East", "South"], ["West", "East", "South"]]
+[["West", "Stop", "East"], ["West", "East"]]
+[["West", "Stop", "East"], ["West", "East"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "East", "South"], ["East", "South"]]
+[["Stop", "South"], ["South"]]
+[["South"], ["South"]]
+[["South"], ["South"]]
+[["South"], ["South"]]
+[["South"], ["South"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East", "North"], ["East", "North"]]
+[["East"], ["East"]]
+[["East", "North"], ["East", "North"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["East", "North"], ["East", "North"]]
+[["East"], ["East"]]
+[["East"], ["East"]]
+[["North"], ["North"]]
+[["North"], ["North"]]
+[["North"], ["North"]]
+[["North"], ["North"]]
+[["West"], ["West"]]
+[["West"], ["West"]]
+[["West", "Stop", "East"], ["West", "East"]]
+"""
diff --git a/src/test_cases/q4/7-pacman-game.test b/src/test_cases/q4/7-pacman-game.test
new file mode 100644
index 0000000..435cf2f
--- /dev/null
+++ b/src/test_cases/q4/7-pacman-game.test
@@ -0,0 +1,19 @@
+class: "PacmanGameTreeTest"
+alg: "ExpectimaxAgent"
+seed: "0"
+depth: "2"
+max_points: "4"
+
+# The following specifies the layout to be used
+layoutName: "smallClassic"
+layout: """
+%%%%%%%%%%%%%%%%%%%%
+%......%G G%......%
+%.%%...%% %%...%%.%
+%.%o.%........%.o%.%
+%.%%.%.%%%%%%.%.%%.%
+%........P.........%
+%%%%%%%%%%%%%%%%%%%%
+"""
+
+
diff --git a/src/test_cases/q4/CONFIG b/src/test_cases/q4/CONFIG
new file mode 100644
index 0000000..a5adc3f
--- /dev/null
+++ b/src/test_cases/q4/CONFIG
@@ -0,0 +1,2 @@
+max_points: "5"
+class: "PassAllTestsQuestion"