teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

編集

2017/08/09 09:40

投稿

_Victorique__
_Victorique__

スコア1392

answer CHANGED
@@ -1,3 +1,49 @@
1
1
  CPUってそんな簡単にできるものじゃないんですよ。探索ってご存知ですか?ゲーム理論でいうゲーム木を用いたものなのですが、まずはそこを学んだ方が良いと思います。一つ一つ着実に行きましょう。
2
2
 
3
- [ボードゲームの思考アルゴリズムの入門](http://alcuin.hatenablog.com/entry/2013/12/30/154841)
3
+ [ボードゲームの思考アルゴリズムの入門](http://alcuin.hatenablog.com/entry/2013/12/30/154841)
4
+
5
+
6
+ 再帰関数として実装してやるのが一般的です。
7
+ あくまで一例です。色々な例外処理は抜けていますし省略も多いです。そこは自分で考えてください。
8
+
9
+ ```python
10
+ def min_search(board,depth,target):
11
+ moves = generate_moves(board)
12
+ min_move = 1000000
13
+ if depth != target:
14
+ for move in moves:
15
+ value = max_search(update(move),depth+1,target)
16
+ if value < min_move:
17
+ min_move = value
18
+ else:
19
+ for move in moves:
20
+ value = evaluate_move(update(move))
21
+ if value < min_move:
22
+ min_move = value
23
+ return min_move
24
+
25
+ def max_search(board,depth,target):
26
+ moves = generate_moves(board)
27
+ max_move = -1000000
28
+ best_move = moves[0]
29
+ if depth != target:
30
+ moves = generate_moves(board)
31
+ for move in moves:
32
+ value = min_search(update(move),depth+1,target)
33
+ if value > max_move:
34
+ max_move = value
35
+ best_move = move
36
+ else:
37
+ for move in moves:
38
+ value = evaluate_move(update(move))
39
+ if value > max_move:
40
+ max_move = value
41
+ best_move = move
42
+ return best_move if depth == 1 else max_move
43
+
44
+ def min_max(target):
45
+ return max_search(board,1,target)
46
+
47
+ if __name__ == '__main__':
48
+ best_move = min_max(5)#5手探索
49
+ ```