回答編集履歴

1

編集

2017/08/09 09:40

投稿

_Victorique__
_Victorique__

スコア1392

test CHANGED
@@ -3,3 +3,95 @@
3
3
 
4
4
 
5
5
  [ボードゲームの思考アルゴリズムの入門](http://alcuin.hatenablog.com/entry/2013/12/30/154841)
6
+
7
+
8
+
9
+
10
+
11
+ 再帰関数として実装してやるのが一般的です。
12
+
13
+ あくまで一例です。色々な例外処理は抜けていますし省略も多いです。そこは自分で考えてください。
14
+
15
+
16
+
17
+ ```python
18
+
19
+ def min_search(board,depth,target):
20
+
21
+ moves = generate_moves(board)
22
+
23
+ min_move = 1000000
24
+
25
+ if depth != target:
26
+
27
+ for move in moves:
28
+
29
+ value = max_search(update(move),depth+1,target)
30
+
31
+ if value < min_move:
32
+
33
+ min_move = value
34
+
35
+ else:
36
+
37
+ for move in moves:
38
+
39
+ value = evaluate_move(update(move))
40
+
41
+ if value < min_move:
42
+
43
+ min_move = value
44
+
45
+ return min_move
46
+
47
+
48
+
49
+ def max_search(board,depth,target):
50
+
51
+ moves = generate_moves(board)
52
+
53
+ max_move = -1000000
54
+
55
+ best_move = moves[0]
56
+
57
+ if depth != target:
58
+
59
+ moves = generate_moves(board)
60
+
61
+ for move in moves:
62
+
63
+ value = min_search(update(move),depth+1,target)
64
+
65
+ if value > max_move:
66
+
67
+ max_move = value
68
+
69
+ best_move = move
70
+
71
+ else:
72
+
73
+ for move in moves:
74
+
75
+ value = evaluate_move(update(move))
76
+
77
+ if value > max_move:
78
+
79
+ max_move = value
80
+
81
+ best_move = move
82
+
83
+ return best_move if depth == 1 else max_move
84
+
85
+
86
+
87
+ def min_max(target):
88
+
89
+ return max_search(board,1,target)
90
+
91
+
92
+
93
+ if __name__ == '__main__':
94
+
95
+ best_move = min_max(5)#5手探索
96
+
97
+ ```