読者です 読者をやめる 読者になる 読者になる

Aestetica

コンピュータ将棋Selene(セレネ)を作っています。名前は西海枝昌彦(さいかいし まさひこ)と読みます。

コンピュータ囲碁

囲碁は将棋と違って線に囲まれたマスの中に石を置くのではなくて、線と線がクロスしているところに石を置きます。
石を並べてから、盤に足をぶつけてずれちゃった。ということではありません。


囲碁は将棋以上によくわからなかったので、プログラムを書こうにもルールを知らないといけない。
ルールも用語も知らない状態で、NHKの囲碁トーナメントを10分くらい観たところ、60回くらい挫けそうになったので、一回観るのをやめ、山下さんのサイトを見る。

YSSと彩のページ
http://www.yss-aya.com/index_j.html

今はリンクが切れているが、原始モンテカルロとUCTのサンプルソースがあったので、それをダウンロードして読んでみる。
自分の石で相手の石を囲むと取れるのと、勝負の着き方がものすごく難しく、最終的に盤の上に自分の石があれば+1点、自分の石で囲んだ1マスの空白があれば+1点。1マスの空白だと、相手はそこに打ち込むことはできない。
(19路だと)全部で361点あるので、それを奪いあって、点数の多いほうが勝ち。
・・といったことを学ぶ。これは後に中国ルールであることを知る。

真の眼なのかカケメなのかとか、ソースからでは、そのあたりが非常によくわからないので、囲碁の入門サイトを見てみたら、瞬殺で理解した。
グラテフィカルな解説Sugeeeeee。なんで初めからこっちを見ないのか。
いやま、入門向けの解説見るより、サンプルソースを見たほうが、実際にプログラムするときに便利じゃないですか?ないですか・・。

ルールは単純なものの、石の働きが位置や状況で変わってくるので、なにが良くてなにが悪いのかわからなくなってくる上に、シチョウとかセキとか(布石ではなく)定石という、部分的なものとか、プログラム的には「おい、マジか」と思うような面倒な問題もあり、非常に難解。

コンピュータ囲碁は当初、アルファベータ探索によって探索して、末端で局面を評価してー、としていたが、途中からUCT探索となり、現在はこちらが主流。指し手が完全にランダムではないので、全幅探索ではなく指し手の選択探索して、必ずゲームの末端で(勝ち・負けを)評価している感じ?

と、思いきや、最近はディープラーニングを使用して一致率を上げていく勢も増えつつありますが。

で、私はなんなのかというと、延々とアルファベータ探索のものを作っていました(え!)。
とりあえずはコンピュータ囲碁の歴史を辿ってみよう!ということで、慣れ親しんだ形式の探索と評価関数を作ってみたものの、かわいくない。囲碁、かわいくない。
そりゃあ、うまくいくはずがないよな、ということで、UCT探索のものも作ってはいるけど、調整に囲碁的な知識が必要だったりするのでムズイ。組み合わせ爆発的なものが自宅で起きています。

機械学習アルゴリズム複数を試しています。計算多いと一致率高い、少ないと低い。というのは、アルゴリズムの種類も特徴の数にしても同じようなもんだなあ。パソコンの処理速度が今より1兆倍くらい速いと無茶できるんですけどね。