|
1 | 1 | package aima.core.search.problems |
2 | 2 |
|
3 | | -import aima.core.search.adversarial.{Game, UtilityValue} |
| 3 | +import aima.core.search.adversarial._ |
4 | 4 |
|
5 | 5 | /** |
6 | 6 | * @author Aditya Lahiri |
7 | 7 | */ |
8 | | -sealed abstract class Player |
9 | | -object PlayerMax extends Player //PlayerMax aims to obtain maximum value |
10 | | -object PlayerMin extends Player |
| 8 | +case class TwoPlyPlayer(name: String) extends Player |
11 | 9 |
|
12 | | -case class State(stateNumber: Int) extends AnyVal |
13 | | -case class Action(stateNumber: Int) extends AnyVal |
| 10 | +case class TwoPlyState(name: String) extends State |
| 11 | +case class TwoPlyAction(name: String) extends Action |
14 | 12 |
|
15 | | -object TwoPlyGame extends Game[Player, State, Action] { |
| 13 | +object TwoPlyGame extends Game[TwoPlyPlayer, TwoPlyState, TwoPlyAction] { |
16 | 14 | val adjacencyMat = Map( |
17 | | - 0 -> List(Action(1), Action(2), Action(3)), |
18 | | - 1 -> List(Action(4), Action(5), Action(6)), |
19 | | - 2 -> List(Action(7), Action(8), Action(9)), |
20 | | - 3 -> List(Action(10), Action(11), Action(12)) |
| 15 | + "A" -> List(TwoPlyAction("B"), TwoPlyAction("C"), TwoPlyAction("D")), |
| 16 | + "B" -> List(TwoPlyAction("E"), TwoPlyAction("F"), TwoPlyAction("G")), |
| 17 | + "C" -> List(TwoPlyAction("H"), TwoPlyAction("I"), TwoPlyAction("J")), |
| 18 | + "D" -> List(TwoPlyAction("K"), TwoPlyAction("L"), TwoPlyAction("M")) |
21 | 19 | ) |
22 | | - val States = Map( |
23 | | - 0 -> State(0), |
24 | | - 1 -> State(1), |
25 | | - 2 -> State(2), |
26 | | - 3 -> State(3), |
27 | | - 4 -> State(4), |
28 | | - 5 -> State(5), |
29 | | - 6 -> State(6), |
30 | | - 7 -> State(7), |
31 | | - 8 -> State(8), |
32 | | - 9 -> State(9), |
33 | | - 10 -> State(10), |
34 | | - 11 -> State(11), |
35 | | - 12 -> State(12) |
| 20 | + val TwoPlyStates = Map( |
| 21 | + "A" -> TwoPlyState("A"), |
| 22 | + "B" -> TwoPlyState("B"), |
| 23 | + "C" -> TwoPlyState("C"), |
| 24 | + "D" -> TwoPlyState("D"), |
| 25 | + "E" -> TwoPlyState("E"), |
| 26 | + "F" -> TwoPlyState("F"), |
| 27 | + "G" -> TwoPlyState("G"), |
| 28 | + "H" -> TwoPlyState("H"), |
| 29 | + "I" -> TwoPlyState("I"), |
| 30 | + "J" -> TwoPlyState("J"), |
| 31 | + "K" -> TwoPlyState("K"), |
| 32 | + "L" -> TwoPlyState("L"), |
| 33 | + "M" -> TwoPlyState("M") |
36 | 34 | ) |
37 | 35 |
|
38 | | - def initialState: State = States(0) |
| 36 | + @Override |
| 37 | + def initialState: TwoPlyState = TwoPlyStates("A") |
39 | 38 |
|
40 | | - def getPlayer(state: State): Player = state.stateNumber match { |
41 | | - case 0 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 => PlayerMax |
42 | | - case 1 | 2 | 3 => PlayerMin |
| 39 | + @Override |
| 40 | + def getPlayer(state: TwoPlyState): TwoPlyPlayer = state.name match { |
| 41 | + case "B" | "C" | "D" => TwoPlyPlayer("MIN") |
| 42 | + case _ => TwoPlyPlayer("MAX") |
43 | 43 | } |
44 | 44 |
|
45 | | - def getActions(state: State): List[Action] = adjacencyMat(state.stateNumber) |
| 45 | + @Override |
| 46 | + def getActions(state: TwoPlyState): List[TwoPlyAction] = adjacencyMat(state.name) |
46 | 47 |
|
47 | | - def result(state: State, action: Action): State = States(action.stateNumber) |
| 48 | + @Override |
| 49 | + def result(state: TwoPlyState, action: TwoPlyAction): TwoPlyState = TwoPlyStates(action.name) |
48 | 50 |
|
49 | | - def isTerminalState(state: State): Boolean = state.stateNumber match { |
50 | | - case 0 | 1 | 2 | 3 => false |
51 | | - case 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 => true |
| 51 | + @Override |
| 52 | + def isTerminalState(state: TwoPlyState): Boolean = state.name match { |
| 53 | + case "A" | "B" | "C" | "D" => false |
| 54 | + case _ => true |
52 | 55 |
|
53 | 56 | } |
54 | 57 |
|
55 | | - def getUtility(state: State, player: Player): UtilityValue = state.stateNumber match { |
56 | | - case 4 => UtilityValue(3) |
57 | | - case 5 => UtilityValue(12) |
58 | | - case 6 => UtilityValue(8) |
59 | | - case 7 => UtilityValue(2) |
60 | | - case 8 => UtilityValue(4) |
61 | | - case 9 => UtilityValue(6) |
62 | | - case 10 => UtilityValue(14) |
63 | | - case 11 => UtilityValue(5) |
64 | | - case 12 => UtilityValue(2) |
| 58 | + @Override |
| 59 | + def getUtility(state: TwoPlyState): UtilityValue = state.name match { |
| 60 | + case "E" => UtilityValue(3) |
| 61 | + case "F" => UtilityValue(12) |
| 62 | + case "G" => UtilityValue(8) |
| 63 | + case "H" => UtilityValue(2) |
| 64 | + case "I" => UtilityValue(4) |
| 65 | + case "J" => UtilityValue(6) |
| 66 | + case "K" => UtilityValue(14) |
| 67 | + case "L" => UtilityValue(5) |
| 68 | + case "M" => UtilityValue(2) |
65 | 69 | } |
66 | 70 | } |
0 commit comments