評価関数は以下のようにしました。
- 自分の勝ち +oo
- 相手の勝ち -oo
- その他の場合は、f(自分) - f(相手)
fはすべての4つの隣接するセルについてループを回し
- 自分が4つ埋める可能性がない場合(少なくとも1つのセルが相手にとられている場合)は +0点。
- 自分が4つ埋める可能性があり、すでに2つ埋めている場合 +4点。
- 自分が4つ埋める可能性があり、すでに3つ埋めている場合 +9点。
のように計算。
ソースコード
SmartMinMaxPlayer.java
実験
今まで作ったプレイヤーの中で最強だった、MinMaxPlayerと対戦させました。結果は、96勝4敗。これほど強くなるとは思いませんでした。
MinMaxPlayerは探索を打ちきるときの局面で勝敗がついてない場合は「勝敗がつかない」という情報を与えるだけなのに対して、SmartMinMaxPlayerはどれだけ有利な局面なのかまで情報を渡してくれるので情報量がまったく違います。そう考えるとこのくらい強くなるのは妥当なのかもしれません。
今後の目標
遅い部分の処理を高速化する。α-β探索を取り入れる。
そこまで出来たら、GUIを作ってJava Web Startで公開。
その後はモンテカルロ木を実装してみる。
0 件のコメント:
コメントを投稿