回答編集履歴

2

追記

2015/12/06 04:44

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -27,3 +27,29 @@
27
27
  その後、勝負を繰り返して弱点が見つかれば、それを克服するようpgsekyoudoutaiさんなりにアルゴリズムを工夫をするのが良いと思います。
28
28
 
29
29
  そして、最後にC++へ移植すると最強のオセロができるかも?
30
+
31
+
32
+
33
+ ---
34
+
35
+ 【追記】
36
+
37
+ 少し詳しいことを書いてみます。
38
+
39
+
40
+
41
+ オセロのようなゲームの場合は、先読みして手を決めます。今から先の盤面を全て先読みしたいのです。しかし、[最後までの全てを先読みするには天文学的な時間がかかる](https://www.youtube.com/watch?v=Q4gTV4r0zRs)ので、先読みをある程度の深さで打ち切ります。その打ち切った時の盤面の有利さを評価値として計算し、相手がどんな手を打っても自分の評価値が最大になる手を見つけて打つのです。
42
+
43
+
44
+
45
+ その評価値計算方法の1つに「ヒューリスティクス(発見的手法)」と呼ばれる方法があります。ヒューリスティクスって言うと難しそうに見えますが、think49さんが書かれている「四隅を取らせない」「四辺を取らせない」等のことです。あはは。
46
+
47
+ 他にもニューロとかファジーとか様々な方法が提案されてますが、個人でゲームを作る場合はヒューリスティクスが現実的なので、開発者自身のオセロの強さが重要になってきます。
48
+
49
+ そして、評価値をうまいこと用いてそれ以上評価しなくて良い枝を決定し、探索範囲を狭めるαβ枝刈りと呼ばれるアルゴリズムを使うと高速化できます。
50
+
51
+
52
+
53
+ つまり、先読みを深さ優先探索で行い、(時間的に)先読み限界の深さの時の盤面をヒューリスティクスで評価し、その評価値を用いてαβ枝刈りで探索範囲を狭めつつ、最善手を求めるって感じです。
54
+
55
+

1

補足

2015/12/06 04:44

投稿

Chironian
Chironian

スコア23272

test CHANGED
@@ -25,3 +25,5 @@
25
25
 
26
26
 
27
27
  その後、勝負を繰り返して弱点が見つかれば、それを克服するようpgsekyoudoutaiさんなりにアルゴリズムを工夫をするのが良いと思います。
28
+
29
+ そして、最後にC++へ移植すると最強のオセロができるかも?