タグ別アーカイブ: 評価関数

四目並べ2 『どっちが勝ってる?』

いきなりですが問題です。

以下の状態だと、先手と後手どちらが勝っているでしょう?

どっちが勝ってる?

正解はもうちょっと後で。今回はこの判断をコンピュータにやらせようという話です。

1. 局面を評価する

ゲームAIでは、ある局面を見てどちらがどのくらい勝っているか数値化するというのが重要です。

前回は、自分の打てるすべての手を把握するところまでやりました。
これに加えて局面に点数をつけることができるようになれば、すべての手を打ってみてどの手を打った時に自分が有利になっているかが判断できます。自分にとって最善の手が見つけられるわけですね。

ちなみに、「どのくらい勝っているかを評価した値」を評価値といいます。

2. 今回の評価方法

どう評価値をつけるかはAIの強さを決める非常に重要な要素なのですが、今回は評価値がどんなものか知るために簡単な方法で評価値をつけてしまいます。

  1. リーチは1つにつき128点
  2. リーチのリーチは1つにつき16点
  3. リーチのリーチのリーチは1つにつき2点
  4. 次が自分の手番の場合は点数は1.5倍
  5. 勝ちの場合は上に関係なく10000点

以上のルールで、各プレーヤーに点数をふって、自分の点-相手の点 を評価値とします。

とりあえずの評価値なので、細かい配点に深い意味はありません。
四目並びそうなところがあれば加点してやろう。自分の手番だったら加点を大きくしてやろうくらいの気持ちです。

3. 評価値を付ける

それでは、さっきの局面に評価値をつけてみます。

以下のように特定の並び、を見つけていって点数を足していきます。

320点で先手が勝っているという結果が出ました。実際に手を進めてみると先手に必勝パターンがあるのが分かります。

▼この局面まで持って行ければ、先手の勝ち。

4. AIに取り入れる

この評価方法をAIに取り入れてみます。

ゲームを開く(swf)

ソースはこちら
単純な評価方法でしたが、だいぶまともに動くようになりました。でも、まだ自滅したりとあらが目立ちますね。

とりあえず、今回はここまで。

たぶん続く。