このサイトでは、C言語でのオセロ(リバーシ)のプログラム開発方法を解りやすく説明しています。初級者、初心者でも作れるオセロ実装のコツが満載です。
いかに相手に手を抜いてると思わせないで相手に勝たせるか。将棋や囲碁のプロでもこのような接待は良く行われます。これをリバーシ(オセロ)で、そしてプログラムで実現するにはどうすれば良いでしょうか。この研究も結構されているようです。プログラムにlevelの差をつけたい人は必要な機能のはずでしょう。
一般的に「浅く読むと良い手だけど、深く読むと悪い手を優先的に打つ」と言う法則を採用すれば、素人目には悪手をコンピュータが打っているとは思いません。
他には,手を評価関数で評価して2番目に良い手を指す?とかでしょうか.(これだと,見た目にも悪い手を指してしまいそうですが)
[関連サイト]
九州産業大学 藤江鉄平
リバーシ(オセロ)の接待プログラムに向けた盤面評価係数の強化学習
多く取ることが目的のリバーシ(オセロ)を「オセロ」と呼ぶなら、少なく取ることが目的のリバーシ(オセロ)は「ロセオ」。誰が考え出したのか知りませんが、非常にユニークだと思います。将棋や囲碁では成り立たないリバーシ(オセロ)ならではの発想です。
単に評価関数を符合反転するだけでは、弱いとも強いともいえないレベルになるようです。
Delphinus's Seaの「rDolphin(負けリバーシ(オセロ))」のアルゴリズムの説明を引用しておきます。
【探索】 ・浅い探索ではmove orderingを行っています。 ・prob cutは作成した頃には理解していなかったため、実装していません。 ・置換表は実装していません。 【評価関数】 ・多くのオセロプログラムと同じくパターンに基づいた評価関数を使用しています。 ただオブジェクトサイズとメモリを節約するために、Logistello等のパターンを 簡略化したものを使っています。またゲームの段階に応じて評価値を変更することはしていません。 betaでは「着手可能なら加点」「確定石は減点」等のヒューリスティックな手法で 各パターンの評価値をつけていましたが、beta2では強化学習により最適化しました。 オセロプログラムの強化学習についてはHeraklesの作者であるkostasの論文が参考になると思います。 Herakles: http://www.herakles.tournavitis.de/ "Mouse(m): A self-teaching algorithm that achieved master-strength at Othello": http://www.tournavitis.de/herakles/Paper.zip
オセロに強くなりたい人は下記を読むことをお勧めします。
オセロ(将棋等)のプログラムを開発したい人・ゲームプログラマーになりたい人は下記は持っていて損はないでしょう。
Copyright ©2024 pl_kyo.(since 2001/11/18)