オセロ開発

念願のコンピュータ将棋開発の前段階に、オセロを開発している。もう世界チャンピオンすら勝てないゲームジャンルだが、探索手法など理論的なものは、コンピュータ将棋と似通っている。
ルールが簡単なぶん開発の敷居もオセロが低いので、まずはいい練習と思う。

もっとも、8x8のオセロはまだ必勝法は判明していない。必勝法は枝狩をしない完全読みが必要なので、探索数を考えたらそう簡単にはいかないそうです。

現時点で、4手読みのMinMax探索で、評価関数は、位置による評価と着手可能手数で行っている。当然、自分がたくさん置けて、相手が置ける場所が少ないほどいい局面である。

まだぜんぜん弱っちいので、
http://www.amy.hi-ho.ne.jp/okuhara/
ここのLV1にやっと勝てる程度なのだが、自分はここのLV1にも勝てないので、そこそこ力はついてきた模様である。
もっとも、さっき作ったオセロと対戦して勝ってしまったので、三つ巴の関係である(笑)



白11:黒53(背景が白いので反転して見える)
ABCDEFGH
○○○○○○○○1
○○●●●●○○2
○●○○○○○○3
○●○○○○○○4
○●○○○●○○5
○●○●○○○○6
○○●○○○○○7
○○○○○○○○8
黒の勝ち 白11:黒53cpu
自分は白。角を4個とって大勝。CPU弱っ!

http://202.212.62.247/oth.cgi
IPが変わる可能性があるのと、バグが残ってますが、ここで対戦できます。
PerlよりC言語が得意なので、書いてるうちにだいぶ勘が戻ってきた。Cでコードを書くのは何年かぶりである。
もともとTurboC使いなので、Borland C++が懐かしくて楽しい。しかもただとは。


今後は、alphaBeta探索に移行し、評価関数を見直し、終盤の完全読みなどを行ってみたい。
WEB上に参考にできるソースは多いが、今回は一から作っている。そんなわけで、昨晩などは眠気で頭が朦朧としながらバグと戦っていた。
早めに寝て、朝一に開発を進めるほうがいいかもしれない。
alphabetaは探索順があらかじめ最適化されていると探索数が半分になるそうだが、そのためには、浅い探索をやって、順番を良さそうな順に並べておく必要もある。
通常はオセロはやらないだろうが、だめそうな枝をカットする手法もやってみよう。
世界最強レベルだと
http://www.cs.ualberta.ca/~mburo/
この人が作ったLogistelloがあるが、読んでみると、
手作りの評価関数ではなく、オセロを横、縦、斜めに分解し、パターンごとに重みを、
過去の対戦から学習させるという、まさにニューラルネットの手法である。
私が大学ではニューロをやってたので、ゲームをニューロで解くのは、ずいぶんと夢想してたが、まさかできるとは思わなかった。凄いの一言である。

nueroChessもあるので、nueroShogiもできるかもしれないが、所詮は、評価関数の要素同士の重みを、対戦で学習する程度、オセロのようにパターンを学習するわけではない。