diff options
author | Toby Vincent <tobyv13@gmail.com> | 2021-09-30 13:41:18 -0500 |
---|---|---|
committer | Toby Vincent <tobyv13@gmail.com> | 2021-09-30 13:41:18 -0500 |
commit | b3359393525b827d75a5b0745c3d1d8c9362dc5e (patch) | |
tree | 00c1244674ff311e79c0db96778054a9432bc3ec /src/test_cases | |
parent | eb2bb60f1ce8cb65ff05c9eb73c19255c574e850 (diff) |
Diffstat (limited to 'src/test_cases')
158 files changed, 6324 insertions, 0 deletions
diff --git a/src/test_cases/CONFIG b/src/test_cases/CONFIG new file mode 100644 index 0000000..e01f27b --- /dev/null +++ b/src/test_cases/CONFIG @@ -0,0 +1 @@ +order: "q1 q2 q3 q4 q5" diff --git a/src/test_cases/extra/CONFIG b/src/test_cases/extra/CONFIG new file mode 100644 index 0000000..3a646dd --- /dev/null +++ b/src/test_cases/extra/CONFIG @@ -0,0 +1,2 @@ +max_points: "0" +class: "PartialCreditQuestion" diff --git a/src/test_cases/extra/grade-agent.test b/src/test_cases/extra/grade-agent.test new file mode 100644 index 0000000..5da84c6 --- /dev/null +++ b/src/test_cases/extra/grade-agent.test @@ -0,0 +1,11 @@ +class: "EvalAgentTest" + +agentName: "ContestAgent" +layoutName: "contestClassic" +maxTime: "180" +numGames: "5" + +scoreThresholds: "2500 2900" + +randomSeed: "0" +ghosts: "[DirectionalGhost(1), DirectionalGhost(2), DirectionalGhost(3)]" diff --git a/src/test_cases/q1/CONFIG b/src/test_cases/q1/CONFIG new file mode 100644 index 0000000..426bfe9 --- /dev/null +++ b/src/test_cases/q1/CONFIG @@ -0,0 +1,2 @@ +max_points: "4" +class: "PartialCreditQuestion" diff --git a/src/test_cases/q1/grade-agent.solution b/src/test_cases/q1/grade-agent.solution new file mode 100644 index 0000000..278af4f --- /dev/null +++ b/src/test_cases/q1/grade-agent.solution @@ -0,0 +1,2 @@ +# This is the solution file for test_cases/q1/grade-agent.test. +# File intentionally blank. diff --git a/src/test_cases/q1/grade-agent.test b/src/test_cases/q1/grade-agent.test new file mode 100644 index 0000000..3a70660 --- /dev/null +++ b/src/test_cases/q1/grade-agent.test @@ -0,0 +1,18 @@ +class: "EvalAgentTest" + +agentName: "ReflexAgent" +layoutName: "openClassic" +maxTime: "120" +numGames: "10" + + +nonTimeoutMinimum: "10" + +scoreThresholds: "500 1000" + +winsMinimum: "1" +winsThresholds: "5 10" + + +randomSeed: "0" +ghosts: "[RandomGhost(1)]" diff --git a/src/test_cases/q2/0-lecture-6-tree.solution b/src/test_cases/q2/0-lecture-6-tree.solution new file mode 100644 index 0000000..3c6a74d --- /dev/null +++ b/src/test_cases/q2/0-lecture-6-tree.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/0-lecture-6-tree.test. +action: "Center" +generated: "A B C D E F G H I max min1 min2 min3" diff --git a/src/test_cases/q2/0-lecture-6-tree.test b/src/test_cases/q2/0-lecture-6-tree.test new file mode 100644 index 0000000..debf815 --- /dev/null +++ b/src/test_cases/q2/0-lecture-6-tree.test @@ -0,0 +1,50 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "2" + +# Tree from lecture 6 slides +diagram: """ + max + /-/ | \--\ + / | \ + / | \ + min1 min2 min3 + /|\ /|\ /|\ + / | \ / | \ / | \ +A B C D E F G H I +3 12 8 5 4 6 14 1 11 +""" + +num_agents: "2" + +start_state: "max" +win_states: "A B C D E F G H I" +lose_states: "" + +successors: """ +max Left min1 +max Center min2 +max Right min3 +min1 Left A +min1 Center B +min1 Right C +min2 Left D +min2 Center E +min2 Right F +min3 Left G +min3 Center H +min3 Right I +""" + + +evaluation: """ +A 3.0 +B 12.0 +C 8.0 +D 5.0 +E 4.0 +F 6.0 +G 14.0 +H 1.0 +I 11.0 +""" diff --git a/src/test_cases/q2/0-small-tree.solution b/src/test_cases/q2/0-small-tree.solution new file mode 100644 index 0000000..f381f9a --- /dev/null +++ b/src/test_cases/q2/0-small-tree.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/0-small-tree.test. +action: "pacLeft" +generated: "A B C D deeper minLeft minRight root" diff --git a/src/test_cases/q2/0-small-tree.test b/src/test_cases/q2/0-small-tree.test new file mode 100644 index 0000000..5eaa65c --- /dev/null +++ b/src/test_cases/q2/0-small-tree.test @@ -0,0 +1,36 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "3" + +diagram: """ + root + / \ + minLeft minRight + / \ / \ + A B C deeper + 4 3 2 | + D + 1000 +""" +num_agents: "2" + +start_state: "root" +win_states: "A C" +lose_states: "B D" + +successors: """ +root pacLeft minLeft +root pacRight minRight +minLeft gLeft A +minLeft gRight B +minRight gLeft C +minRight gRight deeper +deeper pacLeft D +""" + +evaluation: """ +A 4.0 +B 3.0 +C 2.0 +D 1000.0 +""" diff --git a/src/test_cases/q2/1-1-minmax.solution b/src/test_cases/q2/1-1-minmax.solution new file mode 100644 index 0000000..3ac7510 --- /dev/null +++ b/src/test_cases/q2/1-1-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/1-1-minmax.test. +action: "Left" +generated: "a b1 b2 c1 c2 cx d1 d2 d3 d4 dx" diff --git a/src/test_cases/q2/1-1-minmax.test b/src/test_cases/q2/1-1-minmax.test new file mode 100644 index 0000000..addd65b --- /dev/null +++ b/src/test_cases/q2/1-1-minmax.test @@ -0,0 +1,47 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "3" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | + c1 c2 cx + / \ / \ | + d1 d2 d3 d4 dx +-3 -9 10 6 -3.01 + +a - max +b - min +c - max + +Note that the minimax value of b1 is -3. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +cx Down dx +""" + +evaluation: """ +d1 -3.0 +d2 -9.0 +d3 10.0 +d4 6.0 +dx -3.01 +""" diff --git a/src/test_cases/q2/1-2-minmax.solution b/src/test_cases/q2/1-2-minmax.solution new file mode 100644 index 0000000..e40e3de --- /dev/null +++ b/src/test_cases/q2/1-2-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/1-2-minmax.test. +action: "Right" +generated: "a b1 b2 c1 c2 cx d1 d2 d3 d4 dx" diff --git a/src/test_cases/q2/1-2-minmax.test b/src/test_cases/q2/1-2-minmax.test new file mode 100644 index 0000000..44e0a77 --- /dev/null +++ b/src/test_cases/q2/1-2-minmax.test @@ -0,0 +1,47 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "3" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | + c1 c2 cx + / \ / \ | + d1 d2 d3 d4 dx +-3 -9 10 6 -2.99 + +a - max +b - min +c - max + +Note that the minimax value of b1 is -3. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +cx Down dx +""" + +evaluation: """ +d1 -3.0 +d2 -9.0 +d3 10.0 +d4 6.0 +dx -2.99 +""" diff --git a/src/test_cases/q2/1-3-minmax.solution b/src/test_cases/q2/1-3-minmax.solution new file mode 100644 index 0000000..513961c --- /dev/null +++ b/src/test_cases/q2/1-3-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/1-3-minmax.test. +action: "Left" +generated: "a b1 b2 c3 c4 cx d5 d6 d7 d8 dx" diff --git a/src/test_cases/q2/1-3-minmax.test b/src/test_cases/q2/1-3-minmax.test new file mode 100644 index 0000000..5f4b12d --- /dev/null +++ b/src/test_cases/q2/1-3-minmax.test @@ -0,0 +1,47 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "3" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + cx c3 c4 + | / \ / \ + dx d5 d6 d7 d8 + 4.01 4 -7 0 5 + +a - max +b - min +c - max + +Note that the minimax value of b2 is 4. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 d5 d6 d7 d8 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +b2 Left c3 +b2 Right c4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +""" + +evaluation: """ +d5 4.0 +d6 -7.0 +d7 0.0 +d8 5.0 +dx 4.01 +""" diff --git a/src/test_cases/q2/1-4-minmax.solution b/src/test_cases/q2/1-4-minmax.solution new file mode 100644 index 0000000..1ae4c0f --- /dev/null +++ b/src/test_cases/q2/1-4-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/1-4-minmax.test. +action: "Right" +generated: "a b1 b2 c3 c4 cx d5 d6 d7 d8 dx" diff --git a/src/test_cases/q2/1-4-minmax.test b/src/test_cases/q2/1-4-minmax.test new file mode 100644 index 0000000..445fe0f --- /dev/null +++ b/src/test_cases/q2/1-4-minmax.test @@ -0,0 +1,47 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "3" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + cx c3 c4 + | / \ / \ + dx d5 d6 d7 d8 + 3.99 4 -7 0 5 + +a - max +b - min +c - max + +Note that the minimax value of b2 is 4. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 d5 d6 d7 d8 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +b2 Left c3 +b2 Right c4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +""" + +evaluation: """ +d5 4.0 +d6 -7.0 +d7 0.0 +d8 5.0 +dx 3.99 +""" diff --git a/src/test_cases/q2/1-5-minmax.solution b/src/test_cases/q2/1-5-minmax.solution new file mode 100644 index 0000000..0553ca7 --- /dev/null +++ b/src/test_cases/q2/1-5-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/1-5-minmax.test. +action: "Right" +generated: "A B C D E F G H Z a b1 b2 c1 c2 cx d1 d2 d3 d4 dx" diff --git a/src/test_cases/q2/1-5-minmax.test b/src/test_cases/q2/1-5-minmax.test new file mode 100644 index 0000000..5ce2ba9 --- /dev/null +++ b/src/test_cases/q2/1-5-minmax.test @@ -0,0 +1,75 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "4" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | + c1 c2 cx + / \ / \ | + d1 d2 d3 d4 dx + / \ / \ / \ / \ | + A B C D E F G H Z +-3 13 5 9 10 3 -6 8 3.01 + +a - max +b - min +c - max +d - min + +Note the minimax value of b1 is 3. +""" +num_agents: "2" + +start_state: "a" +win_states: "A B C D E F G H I J K L M N O P Z" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +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 +dx Down Z +""" + +evaluation: """ +A -3.0 +B 13.0 +C 5.0 +D 9.0 +E 10.0 +F 3.0 +G -6.0 +H 8.0 +Z 3.01 +""" diff --git a/src/test_cases/q2/1-6-minmax.solution b/src/test_cases/q2/1-6-minmax.solution new file mode 100644 index 0000000..f25e068 --- /dev/null +++ b/src/test_cases/q2/1-6-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/1-6-minmax.test. +action: "Left" +generated: "A B C D E F G H Z a b1 b2 c1 c2 cx d1 d2 d3 d4 dx" diff --git a/src/test_cases/q2/1-6-minmax.test b/src/test_cases/q2/1-6-minmax.test new file mode 100644 index 0000000..44b166f --- /dev/null +++ b/src/test_cases/q2/1-6-minmax.test @@ -0,0 +1,75 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "4" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | + c1 c2 cx + / \ / \ | + d1 d2 d3 d4 dx + / \ / \ / \ / \ | + A B C D E F G H Z +-3 13 5 9 10 3 -6 8 2.99 + +a - max +b - min +c - max +d - min + +Note the minimax value of b1 is 3. +""" +num_agents: "2" + +start_state: "a" +win_states: "A B C D E F G H I J K L M N O P Z" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +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 +dx Down Z +""" + +evaluation: """ +A -3.0 +B 13.0 +C 5.0 +D 9.0 +E 10.0 +F 3.0 +G -6.0 +H 8.0 +Z 2.99 +""" diff --git a/src/test_cases/q2/1-7-minmax.solution b/src/test_cases/q2/1-7-minmax.solution new file mode 100644 index 0000000..fd801a8 --- /dev/null +++ b/src/test_cases/q2/1-7-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/1-7-minmax.test. +action: "Left" +generated: "I J K L M N O P Z a b1 b2 c3 c4 cx d5 d6 d7 d8 dx" diff --git a/src/test_cases/q2/1-7-minmax.test b/src/test_cases/q2/1-7-minmax.test new file mode 100644 index 0000000..534cb39 --- /dev/null +++ b/src/test_cases/q2/1-7-minmax.test @@ -0,0 +1,75 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "4" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + cx c3 c4 + | / \ / \ + dx d5 d6 d7 d8 + | / \ / \ / \ / \ + Z I J K L M N O P + -1.99 -1 -9 4 7 2 5 -3 -2 + +a - max +b - min +c - min +d - max + +Note that the minimax value of b2 is -2 +""" +num_agents: "3" + +start_state: "a" +win_states: "A B C D E F G H I J K L M N O P Z" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +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 +cx Down dx +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 +dx Down Z +""" + +evaluation: """ +I -1.0 +J -9.0 +K 4.0 +L 7.0 +M 2.0 +N 5.0 +O -3.0 +P -2.0 +Z -1.99 +""" diff --git a/src/test_cases/q2/1-8-minmax.solution b/src/test_cases/q2/1-8-minmax.solution new file mode 100644 index 0000000..80c7ebe --- /dev/null +++ b/src/test_cases/q2/1-8-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/1-8-minmax.test. +action: "Right" +generated: "I J K L M N O P Z a b1 b2 c3 c4 cx d5 d6 d7 d8 dx" diff --git a/src/test_cases/q2/1-8-minmax.test b/src/test_cases/q2/1-8-minmax.test new file mode 100644 index 0000000..7d3ead9 --- /dev/null +++ b/src/test_cases/q2/1-8-minmax.test @@ -0,0 +1,75 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "4" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + cx c3 c4 + | / \ / \ + dx d5 d6 d7 d8 + | / \ / \ / \ / \ + Z I J K L M N O P + -2.01 -1 -9 4 7 2 5 -3 -2 + +a - max +b - min +c - min +d - max + +Note that the minimax value of b2 is -2.01 +""" +num_agents: "3" + +start_state: "a" +win_states: "A B C D E F G H I J K L M N O P Z" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +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 +cx Down dx +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 +dx Down Z +""" + +evaluation: """ +I -1.0 +J -9.0 +K 4.0 +L 7.0 +M 2.0 +N 5.0 +O -3.0 +P -2.0 +Z -2.01 +""" diff --git a/src/test_cases/q2/2-1a-vary-depth.solution b/src/test_cases/q2/2-1a-vary-depth.solution new file mode 100644 index 0000000..9dd1708 --- /dev/null +++ b/src/test_cases/q2/2-1a-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/2-1a-vary-depth.test. +action: "Left" +generated: "a b1 b2 c1 c2 cx" diff --git a/src/test_cases/q2/2-1a-vary-depth.test b/src/test_cases/q2/2-1a-vary-depth.test new file mode 100644 index 0000000..321b1ce --- /dev/null +++ b/src/test_cases/q2/2-1a-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "1" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | +-4 c1 c2 9 cx -4.01 + / \ / \ | + d1 d2 d3 d4 dx +-3 -9 10 6 -4.01 + +a - max +b - min +c - max + +Note that the minimax value of b1 is -3, but the depth=1 limited value is -4. +The values next to c1, c2, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +cx Down dx +""" + +evaluation: """ +c1 -4.0 +c2 9.0 +cx -4.01 +d1 -3.0 +d2 -9.0 +d3 10.0 +d4 6.0 +dx -4.01 +""" diff --git a/src/test_cases/q2/2-1b-vary-depth.solution b/src/test_cases/q2/2-1b-vary-depth.solution new file mode 100644 index 0000000..a824e44 --- /dev/null +++ b/src/test_cases/q2/2-1b-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/2-1b-vary-depth.test. +action: "Left" +generated: "a b1 b2 c1 c2 cx d1 d2 d3 d4 dx" diff --git a/src/test_cases/q2/2-1b-vary-depth.test b/src/test_cases/q2/2-1b-vary-depth.test new file mode 100644 index 0000000..d0d656d --- /dev/null +++ b/src/test_cases/q2/2-1b-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "2" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | +-4 c1 c2 9 cx -4.01 + / \ / \ | + d1 d2 d3 d4 dx +-3 -9 10 6 -4.01 + +a - max +b - min +c - max + +Note that the minimax value of b1 is -3, but the depth=1 limited value is -4. +The values next to c1, c2, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +cx Down dx +""" + +evaluation: """ +c1 -4.0 +c2 9.0 +cx -4.01 +d1 -3.0 +d2 -9.0 +d3 10.0 +d4 6.0 +dx -4.01 +""" diff --git a/src/test_cases/q2/2-2a-vary-depth.solution b/src/test_cases/q2/2-2a-vary-depth.solution new file mode 100644 index 0000000..b4b0e98 --- /dev/null +++ b/src/test_cases/q2/2-2a-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/2-2a-vary-depth.test. +action: "Right" +generated: "a b1 b2 c1 c2 cx" diff --git a/src/test_cases/q2/2-2a-vary-depth.test b/src/test_cases/q2/2-2a-vary-depth.test new file mode 100644 index 0000000..204877f --- /dev/null +++ b/src/test_cases/q2/2-2a-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "1" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | +-4 c1 c2 9 cx -3.99 + / \ / \ | + d1 d2 d3 d4 dx +-3 -9 10 6 -3.99 + +a - max +b - min +c - max + +Note that the minimax value of b1 is -3, but the depth=1 limited value is -4. +The values next to c1, c2, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +cx Down dx +""" + +evaluation: """ +c1 -4.0 +c2 9.0 +cx -3.99 +d1 -3.0 +d2 -9.0 +d3 10.0 +d4 6.0 +dx -3.99 +""" diff --git a/src/test_cases/q2/2-2b-vary-depth.solution b/src/test_cases/q2/2-2b-vary-depth.solution new file mode 100644 index 0000000..94e2089 --- /dev/null +++ b/src/test_cases/q2/2-2b-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/2-2b-vary-depth.test. +action: "Left" +generated: "a b1 b2 c1 c2 cx d1 d2 d3 d4 dx" diff --git a/src/test_cases/q2/2-2b-vary-depth.test b/src/test_cases/q2/2-2b-vary-depth.test new file mode 100644 index 0000000..1e4ef41 --- /dev/null +++ b/src/test_cases/q2/2-2b-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "2" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | +-4 c1 c2 9 cx -3.99 + / \ / \ | + d1 d2 d3 d4 dx +-3 -9 10 6 -3.99 + +a - max +b - min +c - max + +Note that the minimax value of b1 is -3, but the depth=1 limited value is -4. +The values next to c1, c2, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +cx Down dx +""" + +evaluation: """ +c1 -4.0 +c2 9.0 +cx -3.99 +d1 -3.0 +d2 -9.0 +d3 10.0 +d4 6.0 +dx -3.99 +""" diff --git a/src/test_cases/q2/2-3a-vary-depth.solution b/src/test_cases/q2/2-3a-vary-depth.solution new file mode 100644 index 0000000..1bab661 --- /dev/null +++ b/src/test_cases/q2/2-3a-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/2-3a-vary-depth.test. +action: "Left" +generated: "a b1 b2 c3 c4 cx" diff --git a/src/test_cases/q2/2-3a-vary-depth.test b/src/test_cases/q2/2-3a-vary-depth.test new file mode 100644 index 0000000..e083759 --- /dev/null +++ b/src/test_cases/q2/2-3a-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "1" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + 5.01 cx 8 c3 c4 5 + | / \ / \ + dx d5 d6 d7 d8 + 5.01 4 -7 0 5 + +a - max +b - min +c - max + +Note that the minimax value of b1 is 4, but the depth=1 limited value is 5. +The values next to c3, c4, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 d5 d6 d7 d8 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +b2 Left c3 +b2 Right c4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +""" + +evaluation: """ +c3 8.0 +c4 5.0 +cx 5.01 +d5 4.0 +d6 -7.0 +d7 0.0 +d8 5.0 +dx 5.01 +""" diff --git a/src/test_cases/q2/2-3b-vary-depth.solution b/src/test_cases/q2/2-3b-vary-depth.solution new file mode 100644 index 0000000..fb389ec --- /dev/null +++ b/src/test_cases/q2/2-3b-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/2-3b-vary-depth.test. +action: "Left" +generated: "a b1 b2 c3 c4 cx d5 d6 d7 d8 dx" diff --git a/src/test_cases/q2/2-3b-vary-depth.test b/src/test_cases/q2/2-3b-vary-depth.test new file mode 100644 index 0000000..cbe88b5 --- /dev/null +++ b/src/test_cases/q2/2-3b-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "2" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + 5.01 cx 8 c3 c4 5 + | / \ / \ + dx d5 d6 d7 d8 + 5.01 4 -7 0 5 + +a - max +b - min +c - max + +Note that the minimax value of b1 is 4, but the depth=1 limited value is 5. +The values next to c3, c4, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 d5 d6 d7 d8 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +b2 Left c3 +b2 Right c4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +""" + +evaluation: """ +c3 8.0 +c4 5.0 +cx 5.01 +d5 4.0 +d6 -7.0 +d7 0.0 +d8 5.0 +dx 5.01 +""" diff --git a/src/test_cases/q2/2-4a-vary-depth.solution b/src/test_cases/q2/2-4a-vary-depth.solution new file mode 100644 index 0000000..815147d --- /dev/null +++ b/src/test_cases/q2/2-4a-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/2-4a-vary-depth.test. +action: "Right" +generated: "a b1 b2 c3 c4 cx" diff --git a/src/test_cases/q2/2-4a-vary-depth.test b/src/test_cases/q2/2-4a-vary-depth.test new file mode 100644 index 0000000..e519969 --- /dev/null +++ b/src/test_cases/q2/2-4a-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "1" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + 4.99 cx 8 c3 c4 5 + | / \ / \ + dx d5 d6 d7 d8 + 4.99 4 -7 0 5 + +a - max +b - min +c - max + +Note that the minimax value of b1 is 4, but the depth=1 limited value is 5. +The values next to c3, c4, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 d5 d6 d7 d8 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +b2 Left c3 +b2 Right c4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +""" + +evaluation: """ +c3 8.0 +c4 5.0 +cx 4.99 +d5 4.0 +d6 -7.0 +d7 0.0 +d8 5.0 +dx 4.99 +""" diff --git a/src/test_cases/q2/2-4b-vary-depth.solution b/src/test_cases/q2/2-4b-vary-depth.solution new file mode 100644 index 0000000..3b12519 --- /dev/null +++ b/src/test_cases/q2/2-4b-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/2-4b-vary-depth.test. +action: "Left" +generated: "a b1 b2 c3 c4 cx d5 d6 d7 d8 dx" diff --git a/src/test_cases/q2/2-4b-vary-depth.test b/src/test_cases/q2/2-4b-vary-depth.test new file mode 100644 index 0000000..a80e82d --- /dev/null +++ b/src/test_cases/q2/2-4b-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "2" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + 4.99 cx 8 c3 c4 5 + | / \ / \ + dx d5 d6 d7 d8 + 4.99 4 -7 0 5 + +a - max +b - min +c - max + +Note that the minimax value of b1 is 4, but the depth=1 limited value is 5. +The values next to c3, c4, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 d5 d6 d7 d8 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +b2 Left c3 +b2 Right c4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +""" + +evaluation: """ +c3 8.0 +c4 5.0 +cx 4.99 +d5 4.0 +d6 -7.0 +d7 0.0 +d8 5.0 +dx 4.99 +""" diff --git a/src/test_cases/q2/2-one-ghost-3level.solution b/src/test_cases/q2/2-one-ghost-3level.solution new file mode 100644 index 0000000..f7b10fb --- /dev/null +++ b/src/test_cases/q2/2-one-ghost-3level.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/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/q2/2-one-ghost-3level.test b/src/test_cases/q2/2-one-ghost-3level.test new file mode 100644 index 0000000..90d4685 --- /dev/null +++ b/src/test_cases/q2/2-one-ghost-3level.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +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 - min +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/q2/3-one-ghost-4level.solution b/src/test_cases/q2/3-one-ghost-4level.solution new file mode 100644 index 0000000..5fcb2c5 --- /dev/null +++ b/src/test_cases/q2/3-one-ghost-4level.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/3-one-ghost-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/q2/3-one-ghost-4level.test b/src/test_cases/q2/3-one-ghost-4level.test new file mode 100644 index 0000000..6868528 --- /dev/null +++ b/src/test_cases/q2/3-one-ghost-4level.test @@ -0,0 +1,79 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +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 - min +c - max +d - min +""" +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/q2/4-two-ghosts-3level.solution b/src/test_cases/q2/4-two-ghosts-3level.solution new file mode 100644 index 0000000..36a2326 --- /dev/null +++ b/src/test_cases/q2/4-two-ghosts-3level.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/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/q2/4-two-ghosts-3level.test b/src/test_cases/q2/4-two-ghosts-3level.test new file mode 100644 index 0000000..a2c5bad --- /dev/null +++ b/src/test_cases/q2/4-two-ghosts-3level.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +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 - min +c - min +""" +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/q2/5-two-ghosts-4level.solution b/src/test_cases/q2/5-two-ghosts-4level.solution new file mode 100644 index 0000000..3164ec0 --- /dev/null +++ b/src/test_cases/q2/5-two-ghosts-4level.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/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/q2/5-two-ghosts-4level.test b/src/test_cases/q2/5-two-ghosts-4level.test new file mode 100644 index 0000000..9eeb228 --- /dev/null +++ b/src/test_cases/q2/5-two-ghosts-4level.test @@ -0,0 +1,79 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +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 - min +c - min +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/q2/6-tied-root.solution b/src/test_cases/q2/6-tied-root.solution new file mode 100644 index 0000000..61918b0 --- /dev/null +++ b/src/test_cases/q2/6-tied-root.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/6-tied-root.test. +action: "Left" +generated: "A B C max min1 min2" diff --git a/src/test_cases/q2/6-tied-root.test b/src/test_cases/q2/6-tied-root.test new file mode 100644 index 0000000..98cc012 --- /dev/null +++ b/src/test_cases/q2/6-tied-root.test @@ -0,0 +1,31 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +depth: "3" + +diagram: """ + max + / \ +min1 min2 + | / \ + A B C +10 10 0 +""" +num_agents: "2" + +start_state: "max" +win_states: "A B" +lose_states: "C" + +successors: """ +max Left min1 +max Right min2 +min1 Down A +min2 Left B +min2 Right C +""" + +evaluation: """ +A 10.0 +B 10.0 +C 0.0 +""" diff --git a/src/test_cases/q2/7-1a-check-depth-one-ghost.solution b/src/test_cases/q2/7-1a-check-depth-one-ghost.solution new file mode 100644 index 0000000..0b7f01b --- /dev/null +++ b/src/test_cases/q2/7-1a-check-depth-one-ghost.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/7-1a-check-depth-one-ghost.test. +action: "Left" +generated: "a b1 b2 b3 c1 c2 c3" diff --git a/src/test_cases/q2/7-1a-check-depth-one-ghost.test b/src/test_cases/q2/7-1a-check-depth-one-ghost.test new file mode 100644 index 0000000..077effc --- /dev/null +++ b/src/test_cases/q2/7-1a-check-depth-one-ghost.test @@ -0,0 +1,83 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +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/q2/7-1b-check-depth-one-ghost.solution b/src/test_cases/q2/7-1b-check-depth-one-ghost.solution new file mode 100644 index 0000000..e7e3c6f --- /dev/null +++ b/src/test_cases/q2/7-1b-check-depth-one-ghost.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/7-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/q2/7-1b-check-depth-one-ghost.test b/src/test_cases/q2/7-1b-check-depth-one-ghost.test new file mode 100644 index 0000000..53cefd4 --- /dev/null +++ b/src/test_cases/q2/7-1b-check-depth-one-ghost.test @@ -0,0 +1,83 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +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/q2/7-1c-check-depth-one-ghost.solution b/src/test_cases/q2/7-1c-check-depth-one-ghost.solution new file mode 100644 index 0000000..188854d --- /dev/null +++ b/src/test_cases/q2/7-1c-check-depth-one-ghost.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/7-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/q2/7-1c-check-depth-one-ghost.test b/src/test_cases/q2/7-1c-check-depth-one-ghost.test new file mode 100644 index 0000000..51a5c9a --- /dev/null +++ b/src/test_cases/q2/7-1c-check-depth-one-ghost.test @@ -0,0 +1,83 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +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/q2/7-2a-check-depth-two-ghosts.solution b/src/test_cases/q2/7-2a-check-depth-two-ghosts.solution new file mode 100644 index 0000000..649825a --- /dev/null +++ b/src/test_cases/q2/7-2a-check-depth-two-ghosts.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/7-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/q2/7-2a-check-depth-two-ghosts.test b/src/test_cases/q2/7-2a-check-depth-two-ghosts.test new file mode 100644 index 0000000..c8fc743 --- /dev/null +++ b/src/test_cases/q2/7-2a-check-depth-two-ghosts.test @@ -0,0 +1,110 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +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/q2/7-2b-check-depth-two-ghosts.solution b/src/test_cases/q2/7-2b-check-depth-two-ghosts.solution new file mode 100644 index 0000000..440eaf8 --- /dev/null +++ b/src/test_cases/q2/7-2b-check-depth-two-ghosts.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/7-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/q2/7-2b-check-depth-two-ghosts.test b/src/test_cases/q2/7-2b-check-depth-two-ghosts.test new file mode 100644 index 0000000..2dff6d0 --- /dev/null +++ b/src/test_cases/q2/7-2b-check-depth-two-ghosts.test @@ -0,0 +1,110 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +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/q2/7-2c-check-depth-two-ghosts.solution b/src/test_cases/q2/7-2c-check-depth-two-ghosts.solution new file mode 100644 index 0000000..fb146d8 --- /dev/null +++ b/src/test_cases/q2/7-2c-check-depth-two-ghosts.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q2/7-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/q2/7-2c-check-depth-two-ghosts.test b/src/test_cases/q2/7-2c-check-depth-two-ghosts.test new file mode 100644 index 0000000..2ef9f15 --- /dev/null +++ b/src/test_cases/q2/7-2c-check-depth-two-ghosts.test @@ -0,0 +1,110 @@ +class: "GraphGameTreeTest" +alg: "MinimaxAgent" +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/q2/8-pacman-game.solution b/src/test_cases/q2/8-pacman-game.solution new file mode 100644 index 0000000..4ee19d8 --- /dev/null +++ b/src/test_cases/q2/8-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]] +[[["Stop", "East"], 154], [["East"], 103]] +[[["East"], 156], [["East"], 101]] +[[["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], [["South"], 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"], ["Stop", "North"], ["North"]] +[["East"], ["East"], ["Stop", "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"]] +[["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", "North"], ["East", "North"]] +[["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"], ["Stop", "East"], ["South"]] +[["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", "East"], ["East"]] +[["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/q2/8-pacman-game.test b/src/test_cases/q2/8-pacman-game.test new file mode 100644 index 0000000..be7396d --- /dev/null +++ b/src/test_cases/q2/8-pacman-game.test @@ -0,0 +1,19 @@ +class: "PacmanGameTreeTest" +alg: "MinimaxAgent" +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/q2/CONFIG b/src/test_cases/q2/CONFIG new file mode 100644 index 0000000..a5adc3f --- /dev/null +++ b/src/test_cases/q2/CONFIG @@ -0,0 +1,2 @@ +max_points: "5" +class: "PassAllTestsQuestion" diff --git a/src/test_cases/q3/0-lecture-6-tree.solution b/src/test_cases/q3/0-lecture-6-tree.solution new file mode 100644 index 0000000..c4a91ad --- /dev/null +++ b/src/test_cases/q3/0-lecture-6-tree.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/0-lecture-6-tree.test. +action: "Center" +generated: "A B C D E F G H max min1 min2 min3" diff --git a/src/test_cases/q3/0-lecture-6-tree.test b/src/test_cases/q3/0-lecture-6-tree.test new file mode 100644 index 0000000..cbc61fe --- /dev/null +++ b/src/test_cases/q3/0-lecture-6-tree.test @@ -0,0 +1,50 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "2" + +# Tree from lecture 6 slides +diagram: """ + max + /-/ | \--\ + / | \ + / | \ + min1 min2 min3 + /|\ /|\ /|\ + / | \ / | \ / | \ +A B C D E F G H I +3 12 8 5 4 6 14 1 11 +""" + +num_agents: "2" + +start_state: "max" +win_states: "A B C D E F G H I" +lose_states: "" + +successors: """ +max Left min1 +max Center min2 +max Right min3 +min1 Left A +min1 Center B +min1 Right C +min2 Left D +min2 Center E +min2 Right F +min3 Left G +min3 Center H +min3 Right I +""" + + +evaluation: """ +A 3.0 +B 12.0 +C 8.0 +D 5.0 +E 4.0 +F 6.0 +G 14.0 +H 1.0 +I 11.0 +""" diff --git a/src/test_cases/q3/0-small-tree.solution b/src/test_cases/q3/0-small-tree.solution new file mode 100644 index 0000000..e940986 --- /dev/null +++ b/src/test_cases/q3/0-small-tree.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/0-small-tree.test. +action: "pacLeft" +generated: "A B C minLeft minRight root" diff --git a/src/test_cases/q3/0-small-tree.test b/src/test_cases/q3/0-small-tree.test new file mode 100644 index 0000000..a9829d0 --- /dev/null +++ b/src/test_cases/q3/0-small-tree.test @@ -0,0 +1,36 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "3" + +diagram: """ + root + / \ + minLeft minRight + / \ / \ + A B C deeper + 4 3 2 | + D + 1000 +""" +num_agents: "2" + +start_state: "root" +win_states: "A C" +lose_states: "B D" + +successors: """ +root pacLeft minLeft +root pacRight minRight +minLeft gLeft A +minLeft gRight B +minRight gLeft C +minRight gRight deeper +deeper pacLeft D +""" + +evaluation: """ +A 4.0 +B 3.0 +C 2.0 +D 1000.0 +""" diff --git a/src/test_cases/q3/1-1-minmax.solution b/src/test_cases/q3/1-1-minmax.solution new file mode 100644 index 0000000..2834b29 --- /dev/null +++ b/src/test_cases/q3/1-1-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/1-1-minmax.test. +action: "Left" +generated: "a b1 b2 c1 c2 cx d1 d2 d3 dx" diff --git a/src/test_cases/q3/1-1-minmax.test b/src/test_cases/q3/1-1-minmax.test new file mode 100644 index 0000000..c601316 --- /dev/null +++ b/src/test_cases/q3/1-1-minmax.test @@ -0,0 +1,47 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "3" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | + c1 c2 cx + / \ / \ | + d1 d2 d3 d4 dx +-3 -9 10 6 -3.01 + +a - max +b - min +c - max + +Note that the minimax value of b1 is -3. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +cx Down dx +""" + +evaluation: """ +d1 -3.0 +d2 -9.0 +d3 10.0 +d4 6.0 +dx -3.01 +""" diff --git a/src/test_cases/q3/1-2-minmax.solution b/src/test_cases/q3/1-2-minmax.solution new file mode 100644 index 0000000..8c17bcf --- /dev/null +++ b/src/test_cases/q3/1-2-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/1-2-minmax.test. +action: "Right" +generated: "a b1 b2 c1 c2 cx d1 d2 d3 dx" diff --git a/src/test_cases/q3/1-2-minmax.test b/src/test_cases/q3/1-2-minmax.test new file mode 100644 index 0000000..d42a467 --- /dev/null +++ b/src/test_cases/q3/1-2-minmax.test @@ -0,0 +1,47 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "3" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | + c1 c2 cx + / \ / \ | + d1 d2 d3 d4 dx +-3 -9 10 6 -2.99 + +a - max +b - min +c - max + +Note that the minimax value of b1 is -3. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +cx Down dx +""" + +evaluation: """ +d1 -3.0 +d2 -9.0 +d3 10.0 +d4 6.0 +dx -2.99 +""" diff --git a/src/test_cases/q3/1-3-minmax.solution b/src/test_cases/q3/1-3-minmax.solution new file mode 100644 index 0000000..827cdbd --- /dev/null +++ b/src/test_cases/q3/1-3-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/1-3-minmax.test. +action: "Left" +generated: "a b1 b2 c3 cx d5 d6 dx" diff --git a/src/test_cases/q3/1-3-minmax.test b/src/test_cases/q3/1-3-minmax.test new file mode 100644 index 0000000..0fc2226 --- /dev/null +++ b/src/test_cases/q3/1-3-minmax.test @@ -0,0 +1,47 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "3" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + cx c3 c4 + | / \ / \ + dx d5 d6 d7 d8 + 4.01 4 -7 0 5 + +a - max +b - min +c - max + +Note that the minimax value of b2 is 4. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 d5 d6 d7 d8 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +b2 Left c3 +b2 Right c4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +""" + +evaluation: """ +d5 4.0 +d6 -7.0 +d7 0.0 +d8 5.0 +dx 4.01 +""" diff --git a/src/test_cases/q3/1-4-minmax.solution b/src/test_cases/q3/1-4-minmax.solution new file mode 100644 index 0000000..f5570d1 --- /dev/null +++ b/src/test_cases/q3/1-4-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/1-4-minmax.test. +action: "Right" +generated: "a b1 b2 c3 c4 cx d5 d6 d7 d8 dx" diff --git a/src/test_cases/q3/1-4-minmax.test b/src/test_cases/q3/1-4-minmax.test new file mode 100644 index 0000000..d8d02e2 --- /dev/null +++ b/src/test_cases/q3/1-4-minmax.test @@ -0,0 +1,47 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "3" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + cx c3 c4 + | / \ / \ + dx d5 d6 d7 d8 + 3.99 4 -7 0 5 + +a - max +b - min +c - max + +Note that the minimax value of b2 is 4. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 d5 d6 d7 d8 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +b2 Left c3 +b2 Right c4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +""" + +evaluation: """ +d5 4.0 +d6 -7.0 +d7 0.0 +d8 5.0 +dx 3.99 +""" diff --git a/src/test_cases/q3/1-5-minmax.solution b/src/test_cases/q3/1-5-minmax.solution new file mode 100644 index 0000000..06cebde --- /dev/null +++ b/src/test_cases/q3/1-5-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/1-5-minmax.test. +action: "Right" +generated: "A B C D E F G Z a b1 b2 c1 c2 cx d1 d2 d3 d4 dx" diff --git a/src/test_cases/q3/1-5-minmax.test b/src/test_cases/q3/1-5-minmax.test new file mode 100644 index 0000000..2d57290 --- /dev/null +++ b/src/test_cases/q3/1-5-minmax.test @@ -0,0 +1,75 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "4" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | + c1 c2 cx + / \ / \ | + d1 d2 d3 d4 dx + / \ / \ / \ / \ | + A B C D E F G H Z +-3 13 5 9 10 3 -6 8 3.01 + +a - max +b - min +c - max +d - min + +Note the minimax value of b1 is 3. +""" +num_agents: "2" + +start_state: "a" +win_states: "A B C D E F G H I J K L M N O P Z" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +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 +dx Down Z +""" + +evaluation: """ +A -3.0 +B 13.0 +C 5.0 +D 9.0 +E 10.0 +F 3.0 +G -6.0 +H 8.0 +Z 3.01 +""" diff --git a/src/test_cases/q3/1-6-minmax.solution b/src/test_cases/q3/1-6-minmax.solution new file mode 100644 index 0000000..1ced2ca --- /dev/null +++ b/src/test_cases/q3/1-6-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/1-6-minmax.test. +action: "Left" +generated: "A B C D E F G Z a b1 b2 c1 c2 cx d1 d2 d3 d4 dx" diff --git a/src/test_cases/q3/1-6-minmax.test b/src/test_cases/q3/1-6-minmax.test new file mode 100644 index 0000000..3360e93 --- /dev/null +++ b/src/test_cases/q3/1-6-minmax.test @@ -0,0 +1,75 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "4" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | + c1 c2 cx + / \ / \ | + d1 d2 d3 d4 dx + / \ / \ / \ / \ | + A B C D E F G H Z +-3 13 5 9 10 3 -6 8 2.99 + +a - max +b - min +c - max +d - min + +Note the minimax value of b1 is 3. +""" +num_agents: "2" + +start_state: "a" +win_states: "A B C D E F G H I J K L M N O P Z" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +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 +dx Down Z +""" + +evaluation: """ +A -3.0 +B 13.0 +C 5.0 +D 9.0 +E 10.0 +F 3.0 +G -6.0 +H 8.0 +Z 2.99 +""" diff --git a/src/test_cases/q3/1-7-minmax.solution b/src/test_cases/q3/1-7-minmax.solution new file mode 100644 index 0000000..74e2da0 --- /dev/null +++ b/src/test_cases/q3/1-7-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/1-7-minmax.test. +action: "Left" +generated: "I J K M O P Z a b1 b2 c3 c4 cx d5 d6 d7 d8 dx" diff --git a/src/test_cases/q3/1-7-minmax.test b/src/test_cases/q3/1-7-minmax.test new file mode 100644 index 0000000..207381d --- /dev/null +++ b/src/test_cases/q3/1-7-minmax.test @@ -0,0 +1,75 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "4" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + cx c3 c4 + | / \ / \ + dx d5 d6 d7 d8 + | / \ / \ / \ / \ + Z I J K L M N O P + -1.99 -1 -9 4 7 2 5 -3 -2 + +a - max +b - min +c - min +d - max + +Note that the minimax value of b2 is -2 +""" +num_agents: "3" + +start_state: "a" +win_states: "A B C D E F G H I J K L M N O P Z" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +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 +cx Down dx +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 +dx Down Z +""" + +evaluation: """ +I -1.0 +J -9.0 +K 4.0 +L 7.0 +M 2.0 +N 5.0 +O -3.0 +P -2.0 +Z -1.99 +""" diff --git a/src/test_cases/q3/1-8-minmax.solution b/src/test_cases/q3/1-8-minmax.solution new file mode 100644 index 0000000..bf426b8 --- /dev/null +++ b/src/test_cases/q3/1-8-minmax.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/1-8-minmax.test. +action: "Right" +generated: "I J K M O P Z a b1 b2 c3 c4 cx d5 d6 d7 d8 dx" diff --git a/src/test_cases/q3/1-8-minmax.test b/src/test_cases/q3/1-8-minmax.test new file mode 100644 index 0000000..2272b30 --- /dev/null +++ b/src/test_cases/q3/1-8-minmax.test @@ -0,0 +1,75 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "4" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + cx c3 c4 + | / \ / \ + dx d5 d6 d7 d8 + | / \ / \ / \ / \ + Z I J K L M N O P + -2.01 -1 -9 4 7 2 5 -3 -2 + +a - max +b - min +c - min +d - max + +Note that the minimax value of b2 is -2.01 +""" +num_agents: "3" + +start_state: "a" +win_states: "A B C D E F G H I J K L M N O P Z" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +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 +cx Down dx +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 +dx Down Z +""" + +evaluation: """ +I -1.0 +J -9.0 +K 4.0 +L 7.0 +M 2.0 +N 5.0 +O -3.0 +P -2.0 +Z -2.01 +""" diff --git a/src/test_cases/q3/2-1a-vary-depth.solution b/src/test_cases/q3/2-1a-vary-depth.solution new file mode 100644 index 0000000..59d892c --- /dev/null +++ b/src/test_cases/q3/2-1a-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/2-1a-vary-depth.test. +action: "Left" +generated: "a b1 b2 c1 c2 cx" diff --git a/src/test_cases/q3/2-1a-vary-depth.test b/src/test_cases/q3/2-1a-vary-depth.test new file mode 100644 index 0000000..f8f9431 --- /dev/null +++ b/src/test_cases/q3/2-1a-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "1" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | +-4 c1 c2 9 cx -4.01 + / \ / \ | + d1 d2 d3 d4 dx +-3 -9 10 6 -4.01 + +a - max +b - min +c - max + +Note that the minimax value of b1 is -3, but the depth=1 limited value is -4. +The values next to c1, c2, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +cx Down dx +""" + +evaluation: """ +c1 -4.0 +c2 9.0 +cx -4.01 +d1 -3.0 +d2 -9.0 +d3 10.0 +d4 6.0 +dx -4.01 +""" diff --git a/src/test_cases/q3/2-1b-vary-depth.solution b/src/test_cases/q3/2-1b-vary-depth.solution new file mode 100644 index 0000000..a0f232c --- /dev/null +++ b/src/test_cases/q3/2-1b-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/2-1b-vary-depth.test. +action: "Left" +generated: "a b1 b2 c1 c2 cx d1 d2 d3 dx" diff --git a/src/test_cases/q3/2-1b-vary-depth.test b/src/test_cases/q3/2-1b-vary-depth.test new file mode 100644 index 0000000..1b161af --- /dev/null +++ b/src/test_cases/q3/2-1b-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "2" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | +-4 c1 c2 9 cx -4.01 + / \ / \ | + d1 d2 d3 d4 dx +-3 -9 10 6 -4.01 + +a - max +b - min +c - max + +Note that the minimax value of b1 is -3, but the depth=1 limited value is -4. +The values next to c1, c2, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +cx Down dx +""" + +evaluation: """ +c1 -4.0 +c2 9.0 +cx -4.01 +d1 -3.0 +d2 -9.0 +d3 10.0 +d4 6.0 +dx -4.01 +""" diff --git a/src/test_cases/q3/2-2a-vary-depth.solution b/src/test_cases/q3/2-2a-vary-depth.solution new file mode 100644 index 0000000..6e8d7fd --- /dev/null +++ b/src/test_cases/q3/2-2a-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/2-2a-vary-depth.test. +action: "Right" +generated: "a b1 b2 c1 c2 cx" diff --git a/src/test_cases/q3/2-2a-vary-depth.test b/src/test_cases/q3/2-2a-vary-depth.test new file mode 100644 index 0000000..b436d21 --- /dev/null +++ b/src/test_cases/q3/2-2a-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "1" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | +-4 c1 c2 9 cx -3.99 + / \ / \ | + d1 d2 d3 d4 dx +-3 -9 10 6 -3.99 + +a - max +b - min +c - max + +Note that the minimax value of b1 is -3, but the depth=1 limited value is -4. +The values next to c1, c2, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +cx Down dx +""" + +evaluation: """ +c1 -4.0 +c2 9.0 +cx -3.99 +d1 -3.0 +d2 -9.0 +d3 10.0 +d4 6.0 +dx -3.99 +""" diff --git a/src/test_cases/q3/2-2b-vary-depth.solution b/src/test_cases/q3/2-2b-vary-depth.solution new file mode 100644 index 0000000..f508aef --- /dev/null +++ b/src/test_cases/q3/2-2b-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/2-2b-vary-depth.test. +action: "Left" +generated: "a b1 b2 c1 c2 cx d1 d2 d3 dx" diff --git a/src/test_cases/q3/2-2b-vary-depth.test b/src/test_cases/q3/2-2b-vary-depth.test new file mode 100644 index 0000000..c0540a3 --- /dev/null +++ b/src/test_cases/q3/2-2b-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "2" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + / \ | +-4 c1 c2 9 cx -3.99 + / \ / \ | + d1 d2 d3 d4 dx +-3 -9 10 6 -3.99 + +a - max +b - min +c - max + +Note that the minimax value of b1 is -3, but the depth=1 limited value is -4. +The values next to c1, c2, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Left c1 +b1 Right c2 +b2 Down cx +c1 Left d1 +c1 Right d2 +c2 Left d3 +c2 Right d4 +cx Down dx +""" + +evaluation: """ +c1 -4.0 +c2 9.0 +cx -3.99 +d1 -3.0 +d2 -9.0 +d3 10.0 +d4 6.0 +dx -3.99 +""" diff --git a/src/test_cases/q3/2-3a-vary-depth.solution b/src/test_cases/q3/2-3a-vary-depth.solution new file mode 100644 index 0000000..d805b84 --- /dev/null +++ b/src/test_cases/q3/2-3a-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/2-3a-vary-depth.test. +action: "Left" +generated: "a b1 b2 c3 c4 cx" diff --git a/src/test_cases/q3/2-3a-vary-depth.test b/src/test_cases/q3/2-3a-vary-depth.test new file mode 100644 index 0000000..853a8d3 --- /dev/null +++ b/src/test_cases/q3/2-3a-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "1" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + 5.01 cx 8 c3 c4 5 + | / \ / \ + dx d5 d6 d7 d8 + 5.01 4 -7 0 5 + +a - max +b - min +c - max + +Note that the minimax value of b1 is 4, but the depth=1 limited value is 5. +The values next to c3, c4, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 d5 d6 d7 d8 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +b2 Left c3 +b2 Right c4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +""" + +evaluation: """ +c3 8.0 +c4 5.0 +cx 5.01 +d5 4.0 +d6 -7.0 +d7 0.0 +d8 5.0 +dx 5.01 +""" diff --git a/src/test_cases/q3/2-3b-vary-depth.solution b/src/test_cases/q3/2-3b-vary-depth.solution new file mode 100644 index 0000000..32a70c6 --- /dev/null +++ b/src/test_cases/q3/2-3b-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/2-3b-vary-depth.test. +action: "Left" +generated: "a b1 b2 c3 cx d5 d6 dx" diff --git a/src/test_cases/q3/2-3b-vary-depth.test b/src/test_cases/q3/2-3b-vary-depth.test new file mode 100644 index 0000000..2892005 --- /dev/null +++ b/src/test_cases/q3/2-3b-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "2" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + 5.01 cx 8 c3 c4 5 + | / \ / \ + dx d5 d6 d7 d8 + 5.01 4 -7 0 5 + +a - max +b - min +c - max + +Note that the minimax value of b1 is 4, but the depth=1 limited value is 5. +The values next to c3, c4, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 d5 d6 d7 d8 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +b2 Left c3 +b2 Right c4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +""" + +evaluation: """ +c3 8.0 +c4 5.0 +cx 5.01 +d5 4.0 +d6 -7.0 +d7 0.0 +d8 5.0 +dx 5.01 +""" diff --git a/src/test_cases/q3/2-4a-vary-depth.solution b/src/test_cases/q3/2-4a-vary-depth.solution new file mode 100644 index 0000000..eafdb62 --- /dev/null +++ b/src/test_cases/q3/2-4a-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/2-4a-vary-depth.test. +action: "Right" +generated: "a b1 b2 c3 c4 cx" diff --git a/src/test_cases/q3/2-4a-vary-depth.test b/src/test_cases/q3/2-4a-vary-depth.test new file mode 100644 index 0000000..73d681b --- /dev/null +++ b/src/test_cases/q3/2-4a-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "1" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + 4.99 cx 8 c3 c4 5 + | / \ / \ + dx d5 d6 d7 d8 + 4.99 4 -7 0 5 + +a - max +b - min +c - max + +Note that the minimax value of b1 is 4, but the depth=1 limited value is 5. +The values next to c3, c4, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 d5 d6 d7 d8 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +b2 Left c3 +b2 Right c4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +""" + +evaluation: """ +c3 8.0 +c4 5.0 +cx 4.99 +d5 4.0 +d6 -7.0 +d7 0.0 +d8 5.0 +dx 4.99 +""" diff --git a/src/test_cases/q3/2-4b-vary-depth.solution b/src/test_cases/q3/2-4b-vary-depth.solution new file mode 100644 index 0000000..820398a --- /dev/null +++ b/src/test_cases/q3/2-4b-vary-depth.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/2-4b-vary-depth.test. +action: "Left" +generated: "a b1 b2 c3 cx d5 d6 dx" diff --git a/src/test_cases/q3/2-4b-vary-depth.test b/src/test_cases/q3/2-4b-vary-depth.test new file mode 100644 index 0000000..a7aca5f --- /dev/null +++ b/src/test_cases/q3/2-4b-vary-depth.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "2" + +diagram: """ + /-----a------\ + / \ + / \ + b1 b2 + | / \ + 4.99 cx 8 c3 c4 5 + | / \ / \ + dx d5 d6 d7 d8 + 4.99 4 -7 0 5 + +a - max +b - min +c - max + +Note that the minimax value of b1 is 4, but the depth=1 limited value is 5. +The values next to c3, c4, and cx are the values of the evaluation function, not +necessarily the correct minimax backup. +""" +num_agents: "2" + +start_state: "a" +win_states: "d1 d2 d3 d4 d5 d6 d7 d8 dx" +lose_states: "" + +successors: """ +a Left b1 +a Right b2 +b1 Down cx +b2 Left c3 +b2 Right c4 +c3 Left d5 +c3 Right d6 +c4 Left d7 +c4 Right d8 +cx Down dx +""" + +evaluation: """ +c3 8.0 +c4 5.0 +cx 4.99 +d5 4.0 +d6 -7.0 +d7 0.0 +d8 5.0 +dx 4.99 +""" diff --git a/src/test_cases/q3/2-one-ghost-3level.solution b/src/test_cases/q3/2-one-ghost-3level.solution new file mode 100644 index 0000000..b22f76f --- /dev/null +++ b/src/test_cases/q3/2-one-ghost-3level.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/2-one-ghost-3level.test. +action: "Left" +generated: "a b1 b2 c1 c2 c3 d1 d2 d3 d5 d6" diff --git a/src/test_cases/q3/2-one-ghost-3level.test b/src/test_cases/q3/2-one-ghost-3level.test new file mode 100644 index 0000000..2ec19b4 --- /dev/null +++ b/src/test_cases/q3/2-one-ghost-3level.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +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 - min +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/q3/3-one-ghost-4level.solution b/src/test_cases/q3/3-one-ghost-4level.solution new file mode 100644 index 0000000..b6a9a0f --- /dev/null +++ b/src/test_cases/q3/3-one-ghost-4level.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/3-one-ghost-4level.test. +action: "Left" +generated: "A B C D E F I K a b1 b2 c1 c2 c3 d1 d2 d3 d5 d6" diff --git a/src/test_cases/q3/3-one-ghost-4level.test b/src/test_cases/q3/3-one-ghost-4level.test new file mode 100644 index 0000000..cfa33db --- /dev/null +++ b/src/test_cases/q3/3-one-ghost-4level.test @@ -0,0 +1,79 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +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 - min +c - max +d - min +""" +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/q3/4-two-ghosts-3level.solution b/src/test_cases/q3/4-two-ghosts-3level.solution new file mode 100644 index 0000000..12e9520 --- /dev/null +++ b/src/test_cases/q3/4-two-ghosts-3level.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/4-two-ghosts-3level.test. +action: "Left" +generated: "a b1 b2 c1 c2 c3 c4 d1 d2 d3 d4 d5 d6 d7" diff --git a/src/test_cases/q3/4-two-ghosts-3level.test b/src/test_cases/q3/4-two-ghosts-3level.test new file mode 100644 index 0000000..fd3ac91 --- /dev/null +++ b/src/test_cases/q3/4-two-ghosts-3level.test @@ -0,0 +1,52 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +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 - min +c - min +""" +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/q3/5-two-ghosts-4level.solution b/src/test_cases/q3/5-two-ghosts-4level.solution new file mode 100644 index 0000000..89c534c --- /dev/null +++ b/src/test_cases/q3/5-two-ghosts-4level.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/5-two-ghosts-4level.test. +action: "Left" +generated: "A B C D E G H I J a b1 b2 c1 c2 c3 d1 d2 d3 d4 d5" diff --git a/src/test_cases/q3/5-two-ghosts-4level.test b/src/test_cases/q3/5-two-ghosts-4level.test new file mode 100644 index 0000000..ce431fc --- /dev/null +++ b/src/test_cases/q3/5-two-ghosts-4level.test @@ -0,0 +1,79 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +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 - min +c - min +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/q3/6-tied-root.solution b/src/test_cases/q3/6-tied-root.solution new file mode 100644 index 0000000..93ece27 --- /dev/null +++ b/src/test_cases/q3/6-tied-root.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/6-tied-root.test. +action: "Left" +generated: "A B C max min1 min2" diff --git a/src/test_cases/q3/6-tied-root.test b/src/test_cases/q3/6-tied-root.test new file mode 100644 index 0000000..b43f4d9 --- /dev/null +++ b/src/test_cases/q3/6-tied-root.test @@ -0,0 +1,31 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +depth: "3" + +diagram: """ + max + / \ +min1 min2 + | / \ + A B C +10 10 0 +""" +num_agents: "2" + +start_state: "max" +win_states: "A B" +lose_states: "C" + +successors: """ +max Left min1 +max Right min2 +min1 Down A +min2 Left B +min2 Right C +""" + +evaluation: """ +A 10.0 +B 10.0 +C 0.0 +""" diff --git a/src/test_cases/q3/7-1a-check-depth-one-ghost.solution b/src/test_cases/q3/7-1a-check-depth-one-ghost.solution new file mode 100644 index 0000000..a3a74c4 --- /dev/null +++ b/src/test_cases/q3/7-1a-check-depth-one-ghost.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/7-1a-check-depth-one-ghost.test. +action: "Left" +generated: "a b1 b2 b3 c1 c2 c3" diff --git a/src/test_cases/q3/7-1a-check-depth-one-ghost.test b/src/test_cases/q3/7-1a-check-depth-one-ghost.test new file mode 100644 index 0000000..0230cbb --- /dev/null +++ b/src/test_cases/q3/7-1a-check-depth-one-ghost.test @@ -0,0 +1,83 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +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/q3/7-1b-check-depth-one-ghost.solution b/src/test_cases/q3/7-1b-check-depth-one-ghost.solution new file mode 100644 index 0000000..8dad3c7 --- /dev/null +++ b/src/test_cases/q3/7-1b-check-depth-one-ghost.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/7-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/q3/7-1b-check-depth-one-ghost.test b/src/test_cases/q3/7-1b-check-depth-one-ghost.test new file mode 100644 index 0000000..7e0ced7 --- /dev/null +++ b/src/test_cases/q3/7-1b-check-depth-one-ghost.test @@ -0,0 +1,83 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +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/q3/7-1c-check-depth-one-ghost.solution b/src/test_cases/q3/7-1c-check-depth-one-ghost.solution new file mode 100644 index 0000000..210bb5d --- /dev/null +++ b/src/test_cases/q3/7-1c-check-depth-one-ghost.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/7-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/q3/7-1c-check-depth-one-ghost.test b/src/test_cases/q3/7-1c-check-depth-one-ghost.test new file mode 100644 index 0000000..cd92eb9 --- /dev/null +++ b/src/test_cases/q3/7-1c-check-depth-one-ghost.test @@ -0,0 +1,83 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +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/q3/7-2a-check-depth-two-ghosts.solution b/src/test_cases/q3/7-2a-check-depth-two-ghosts.solution new file mode 100644 index 0000000..9a08a38 --- /dev/null +++ b/src/test_cases/q3/7-2a-check-depth-two-ghosts.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/7-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/q3/7-2a-check-depth-two-ghosts.test b/src/test_cases/q3/7-2a-check-depth-two-ghosts.test new file mode 100644 index 0000000..421a05c --- /dev/null +++ b/src/test_cases/q3/7-2a-check-depth-two-ghosts.test @@ -0,0 +1,110 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +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/q3/7-2b-check-depth-two-ghosts.solution b/src/test_cases/q3/7-2b-check-depth-two-ghosts.solution new file mode 100644 index 0000000..194c0aa --- /dev/null +++ b/src/test_cases/q3/7-2b-check-depth-two-ghosts.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/7-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/q3/7-2b-check-depth-two-ghosts.test b/src/test_cases/q3/7-2b-check-depth-two-ghosts.test new file mode 100644 index 0000000..728806e --- /dev/null +++ b/src/test_cases/q3/7-2b-check-depth-two-ghosts.test @@ -0,0 +1,110 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +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/q3/7-2c-check-depth-two-ghosts.solution b/src/test_cases/q3/7-2c-check-depth-two-ghosts.solution new file mode 100644 index 0000000..1e989f3 --- /dev/null +++ b/src/test_cases/q3/7-2c-check-depth-two-ghosts.solution @@ -0,0 +1,3 @@ +# This is the solution file for test_cases/q3/7-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/q3/7-2c-check-depth-two-ghosts.test b/src/test_cases/q3/7-2c-check-depth-two-ghosts.test new file mode 100644 index 0000000..9e727ce --- /dev/null +++ b/src/test_cases/q3/7-2c-check-depth-two-ghosts.test @@ -0,0 +1,110 @@ +class: "GraphGameTreeTest" +alg: "AlphaBetaAgent" +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/q3/8-pacman-game.solution b/src/test_cases/q3/8-pacman-game.solution new file mode 100644 index 0000000..ec0b0b8 --- /dev/null +++ b/src/test_cases/q3/8-pacman-game.solution @@ -0,0 +1,444 @@ +optimalActions: """ +[[["West", "East"], 39], [["West", "East"], 27]] +[[["West"], 75], [["West"], 57]] +[[["West"], 95], [["West"], 77]] +[[["West", "North"], 72], [["West", "North"], 54]] +[[["West"], 51], [["West"], 39]] +[[["West", "North"], 76], [["West", "North"], 58]] +[[["West"], 69], [["West"], 51]] +[[["West"], 34], [["West"], 23]] +[[["North"], 55], [["North"], 41]] +[[["North"], 63], [["North"], 32]] +[[["North"], 87], [["North"], 43]] +[[["North"], 69], [["North"], 34]] +[[["Stop", "East"], 116], [["East"], 56]] +[[["East"], 110], [["East"], 52]] +[[["West"], 28], [["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"], 28], [["North"], 18]] +[[["North"], 47], [["North"], 30]] +[[["West"], 35], [["West"], 23]] +[[["East"], 28], [["East"], 15]] +[[["North"], 74], [["North"], 48]] +[[["East", "North"], 130], [["East", "North"], 87]] +[[["East", "North"], 213], [["East", "North"], 158]] +[[["North", "South"], 101], [["North", "South"], 73]] +[[["West"], 48], [["West"], 36]] +[[["West"], 60], [["West"], 45]] +[[["West", "Stop"], 49], [["West"], 36]] +[[["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"], 81], [["East", "South"], 53]] +[[["Stop", "East", "South"], 64], [["East", "South"], 43]] +[[["Stop", "East", "South"], 61], [["East", "South"], 41]] +[[["Stop", "East", "South"], 61], [["East", "South"], 41]] +[[["Stop", "East", "South"], 81], [["East", "South"], 53]] +[[["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"], 28], [["East", "North"], 18]] +[[["East"], 35], [["East"], 22]] +[[["North"], 28], [["North"], 18]] +[[["North"], 38], [["North"], 22]] +[[["East"], 30], [["East"], 20]] +[[["East"], 33], [["East"], 18]] +[[["East"], 18], [["East"], 12]] +[[["East"], 33], [["East"], 23]] +[[["East"], 48], [["East"], 29]] +[[["East"], 49], [["East"], 26]] +[[["East"], 44], [["East"], 29]] +[[["North", "South"], 75], [["North", "South"], 52]] +[[["East", "North"], 113], [["East", "North"], 74]] +[[["East", "North"], 89], [["East", "North"], 65]] +[[["North", "South"], 173], [["North", "South"], 130]] +[[["West", "East"], 54], [["West", "East"], 42]] +[[["West", "Stop", "East"], 130], [["West", "East"], 87]] +[[["Stop", "East", "South"], 58], [["East", "South"], 43]] +[[["Stop", "East"], 110], [["South"], 82]] +[[["East"], 71], [["East"], 45]] +[[["West"], 66], [["West"], 42]] +[[["South"], 70], [["South"], 48]] +[[["South"], 48], [["South"], 37]] +[[["South"], 179], [["South"], 104]] +[[["South"], 68], [["South"], 41]] +[[["West"], 25], [["West"], 18]] +[[["West"], 41], [["West"], 29]] +[[["West"], 14], [["West"], 10]] +[[["West"], 20], [["West"], 14]] +[[["West"], 13], [["West"], 9]] +[[["West"], 13], [["West"], 9]] +[[["West"], 16], [["West"], 12]] +[[["West", "North"], 28], [["West", "North"], 20]] +[[["West"], 30], [["West"], 23]] +[[["West", "Stop", "East", "North"], 66], [["West", "East", "North"], 46]] +[[["West", "Stop", "East"], 126], [["West", "East"], 89]] +[[["West", "Stop", "East"], 30], [["West", "East"], 20]] +[[["Stop", "East", "North"], 67], [["East", "North"], 45]] +[[["Stop", "North"], 52], [["North"], 27]] +[[["North"], 30], [["North"], 19]] +[[["North"], 28], [["North"], 17]] +[[["North"], 17], [["North"], 11]] +[[["North"], 30], [["North"], 19]] +[[["East"], 28], [["East"], 17]] +[[["East"], 17], [["East"], 11]] +[[["East"], 40], [["East"], 29]] +[[["East", "South"], 79], [["East", "South"], 60]] +[[["East", "South"], 90], [["East", "South"], 62]] +[[["South"], 96], [["South"], 61]] +[[["North", "South"], 195], [["North", "South"], 132]] +[[["West"], 80], [["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"], 95], [["East", "South"], 62]] +[[["Stop", "East", "South"], 128], [["East", "South"], 86]] +[[["Stop", "East", "South"], 82], [["East", "South"], 55]] +[[["Stop", "East", "South"], 85], [["East", "South"], 57]] +[[["Stop", "East", "South"], 182], [["East", "South"], 119]] +[[["Stop", "East", "South"], 154], [["East", "South"], 103]] +[[["Stop", "South"], 46], [["South"], 25]] +[[["South"], 28], [["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"], 28], [["East", "North"], 18]] +[[["East"], 37], [["East"], 22]] +[[["East", "North"], 34], [["East", "North"], 24]] +[[["East"], 56], [["East"], 29]] +[[["East"], 17], [["East"], 11]] +[[["East"], 26], [["East"], 15]] +[[["East"], 15], [["East"], 9]] +[[["East"], 15], [["East"], 9]] +[[["East"], 18], [["East"], 12]] +[[["East"], 27], [["East"], 17]] +[[["East"], 37], [["East"], 22]] +[[["East", "North"], 37], [["East", "North"], 24]] +[[["East"], 56], [["East"], 29]] +[[["East"], 19], [["East"], 11]] +[[["North"], 26], [["North"], 15]] +[[["North"], 19], [["North"], 11]] +[[["North"], 30], [["North"], 17]] +[[["North"], 30], [["North"], 19]] +[[["West"], 28], [["West"], 19]] +[[["West"], 23], [["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"], ["Stop", "North"], ["North"]] +[["East"], ["East"], ["Stop", "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"]] +[["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", "North"], ["East", "North"]] +[["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"], ["Stop", "East"], ["South"]] +[["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", "East"], ["East"]] +[["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/q3/8-pacman-game.test b/src/test_cases/q3/8-pacman-game.test new file mode 100644 index 0000000..56341ae --- /dev/null +++ b/src/test_cases/q3/8-pacman-game.test @@ -0,0 +1,19 @@ +class: "PacmanGameTreeTest" +alg: "AlphaBetaAgent" +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/q3/CONFIG b/src/test_cases/q3/CONFIG new file mode 100644 index 0000000..a5adc3f --- /dev/null +++ b/src/test_cases/q3/CONFIG @@ -0,0 +1,2 @@ +max_points: "5" +class: "PassAllTestsQuestion" 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" diff --git a/src/test_cases/q5/CONFIG b/src/test_cases/q5/CONFIG new file mode 100644 index 0000000..df50d84 --- /dev/null +++ b/src/test_cases/q5/CONFIG @@ -0,0 +1,2 @@ +max_points: "6" +class: "PartialCreditQuestion" diff --git a/src/test_cases/q5/grade-agent.solution b/src/test_cases/q5/grade-agent.solution new file mode 100644 index 0000000..55fcfc8 --- /dev/null +++ b/src/test_cases/q5/grade-agent.solution @@ -0,0 +1,2 @@ +# This is the solution file for test_cases/q5/grade-agent.test. +# File intentionally blank. diff --git a/src/test_cases/q5/grade-agent.test b/src/test_cases/q5/grade-agent.test new file mode 100644 index 0000000..4109586 --- /dev/null +++ b/src/test_cases/q5/grade-agent.test @@ -0,0 +1,18 @@ +class: "EvalAgentTest" + +agentName: "ExpectimaxAgent" +agentArgs: "evalFn=better" +layoutName: "smallClassic" +maxTime: "120" +numGames: "10" + +nonTimeoutMinimum: "0" +nonTimeoutThresholds: "10" + +scoreThresholds: "500 1000" + +winsMinimum: "1" +winsThresholds: "1 5 10" + +randomSeed: "0" +ghosts: "[RandomGhost(1)]" |