-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathplayer_ai.py
43 lines (40 loc) · 1.52 KB
/
player_ai.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
import gobblet_gobblers as game
import statevalue as value
import random
def action( state, mode="Random" ):
"""現在の状態から思考ルーチンに沿って行動を生成する.
Arg:
state (game.State): 現在の局面.
mode (str): 思考ルーチンの選択.
思考ルーチンは以下から選択:
- "Random" (default)
- "MiniMax"
Return:
random_action (actions): list (remove_action, put_action). 手駒ならremove_actionは-1.
"""
if mode == "Random":
# 合法手を取得し、その中からランダムに行動を選択する.
legal_actions = state.legal_actions()
random_action = legal_actions[random.randint(0, len(legal_actions))]
return random_action
# MiniMaxを使うなら消してコメントアウトを解除する.
else:
print("error: mode not found.\n")
"""
elif mode == "MiniMax":
score = -float( 'inf' ) # 行動の価値.
best_score = -float( 'inf' ) # 最も高い行動の価値.
best_action = 0 # 最も価値の高い行動.
# 全ての合法手を取得し、最も価値が高い行動を選択する.
for action in state.legal_actions():
# 価値を取得
score = -value.mini_max( state.next( action ) )
# 価値が高いなら更新
if score > best_score:
best_action = action
best_score = score
mini_max_action = best_action
return mini_max_action
else:
print("error: mode not found.\n")
"""