-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathGame.py
162 lines (135 loc) · 4.54 KB
/
Game.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
class Game():
"""
This class specifies the base Game class. To define your own game, subclass
this class and implement the functions below. This works when the game is
two-player, adversarial and turn-based.
Use 1 for player1 and -1 for player2.
See othello/OthelloGame.py for an example implementation.
"""
def __init__(self):
pass
def getInitBoard(self):
"""
Returns:
startBoard: a representation of the board (ideally this is the form
that will be the input to your neural network)
"""
pass
def getBoardSize(self):
"""
Returns:
(x,y): a tuple of board dimensions
"""
pass
def getActionSize(self):
"""
Returns:
actionSize: number of all possible actions
"""
pass
def getNextState(self, board, player, action, random_seed=0):
"""
Input:
board: current board
player: current player (1 or -1)
action: action taken by current player
random_seed: define seed for any random choice (MCTS exploration),
or 0 for true random (real move)
Returns:
nextBoard: board after applying action
nextPlayer: player who plays in the next turn (should be -player)
"""
pass
def getValidMoves(self, board, player):
"""
Input:
board: current board
player: current player
Returns:
validMoves: a binary vector of length self.getActionSize(), 1 for
moves that are valid from the current board and player,
0 for invalid moves
"""
pass
def getGameEnded(self, board, next_player):
"""
Input:
board: current board
Returns:
r: 0 if game has not ended. 1 if player won, -1 if player lost,
small non-zero value for draw.
"""
pass
def getScore(self, board, player):
"""
Input:
board: current board
player: player you want to have score (may not be current player)
Returns:
score of such player
"""
pass
def getRound(self, board):
"""
Input:
board: current board
Returns:
number of played rounds so far
"""
pass
def getCanonicalForm(self, board, player):
"""
Input:
board: current board
player: current player (1 or -1)
Returns:
canonicalBoard: returns canonical form of board. The canonical form
should be independent of player. For e.g. in chess,
the canonical form can be chosen to be from the pov
of white. When the player is white, we can return
board as is. When the player is black, we can invert
the colors and return the board.
"""
pass
def getSymmetries(self, board, pi, valid_actions):
"""
Input:
board: current board
pi: policy vector of size self.getActionSize()
Returns:
symmForms: a list of [(board,pi)] where each tuple is a symmetrical
form of the board and the corresponding pi vector. This
is used when training the neural network from examples.
"""
pass
def stringRepresentation(self, board):
"""
Input:
board: current board
Returns:
boardString: a quick conversion of board to a string format.
Required by MCTS for hashing.
"""
pass
def getNumberOfPlayers(self):
"""
Returns:
number_players: Number of players that current game supports
"""
pass
def moveToString(self, move, current_player):
"""
Input:
move: int coding for an aciton
current_player: index of current player
Returns:
string: a human representation of such move, as a printable string
"""
pass
def printBoard(self, numpy_board):
"""
Input:
numpy_board: a numpy representation of a board, may be different than self.board
Print: a human representation of such board on stdout, used during pit involving a human
"""
pass