2009年6月3日水曜日

[オセロプログラム]一応完成

研究室の課題で作ってたオセロを一応完成とした。というかこれ以上の改善は自分には無理(笑)。


-実装した機能

--探索
コンピュータが次の手を捜すとき、まずは登録してある定石集から探す。具体的には現在の局面をキーとして定石集を線形探索、見つけた手の中から評価値がもっとも大きいものを次の手とする。

定石が見つからなかった場合、現在の手数によって中盤探索か終盤探索を行う。

---中盤探索
あらかじめ決めた深さnによって、n手読みをする。リーフノードの近くでは単純なアルファ・ベータ探索(実際にはネガアルファ探索)を行う。それ以外では、move orderingをし、置換表を用いたネガスカウト探索を行う。

----move ordering(中盤)
中盤探索では、一手読みをし、その評価値によって手をソートする。

----置換表を用いたネガスカウト探索
まず置換表を参照し、現在の局面が登録されているか探す。発見した場合は次の手、評価値を返す(一意に決まらない場合もある)。
発見できなかった場合は、ネガスカウト探索を行う。最探索をする場合も置換表があることによって、探索にかかる時間を短縮できる。

---終盤探索
手数があらかじめ決めた値に達したら終盤探索を行う。最後まで読みきり、石差を評価値として返す。中盤探索と同様にリーフノードの近くでは単純なアルファ・ベータ探索(ネガアルファ探索)を行う。それ以外ではmove orderingをし、置換表を用いたネガスカウト探索を行う。

----move ordering(終盤)
開放度によってソートする。開放度が等しい場合は一手読みをし、その評価値によってソートする。


--学習
強化学習(教師なし学習)を行う。プログラムが自分自身と対局し、その勝敗によって対局中に現れた局面を評価する。評価値はパターンによる評価値を用いる。局面を評価するとは、正確には全てのパターンの重みを学習するということ。
ちなみに定石は手動登録。



とまぁこんな感じで完成。本当はMPCとか実装したかったけど、自分には難しすぎて理解できませんでした。

研究室内オセロ大会に向けて目下強化学習中!!










-関連語句

アルファ・ベータ(α-β)探索
ネガアルファ探索
null window search
move ordering
開放度(mobility)
強化学習

0 件のコメント:

コメントを投稿