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

daruma3940の日記

理解や文章に間違い等あればどんなことでもご指摘お願いします

floodgateにソフトを放流してみたのじぇ

コンピューター将棋

f:id:daruma3940:20160520223745p:plain

floodgateという一日中コンピューター将棋将棋ソフトが対決を行っているサーバーがあるのじぇ

そこにまりちゃの作ったソフトをレートが付くまで潜りこませてみたのじぇ
その時に身に着いた見識をここに記しておくのじぇ。

ちなみにまりちゃの作ったソフトの名前は「Squirrel」なのじぇ!!
f:id:daruma3940:20160531233343p:plain

f:id:daruma3940:20160520223745p:plain
キャラクターは友達に描いてもらったのじぇかわいいのじぇ。
stockfishのマスコットキャラの1000倍はかわいいのじぇ。
Tさんありがとうなのじぇ!

これはコンピューター将棋のアルゴリズムというサイトを見ながら作ったソフトなのじぇ

コンピュータ将棋のアルゴリズム

これの6章まで実装し
そこから3駒関係KPP,KKPを積み込み指し手の遅延生成を追加したものを放流してみたのじぇ

f:id:daruma3940:20160521003616p:plain
弱そう
f:id:daruma3940:20160520223530p:plain
一勝もできなさそう

f:id:daruma3940:20160520223745p:plain
ゆゆっ!?そんなこと言わないでほしいのじぇ!
まあ弱いけど....

でもまいちゃのソフトもレートをつけることができたし
libshogiに一勝を挙げることができたのじぇ!
f:id:daruma3940:20160531235513p:plain
f:id:daruma3940:20160531235522j:plain
レートの2勝のうちの一勝は稲庭将棋との引き分け2回でついた一勝なのじぇ。
コンピューター将棋初心者でもfloodgateでお手軽にレートをつけたければ稲庭将棋がログインしてる時を狙うといいのじぇ
2回引き分けで一勝扱いなのじぇ
ちなみにこの時の試合はすべて見ていたのじぇ
その時に得られた見識について今から述べていくのじぇ

f:id:daruma3940:20160520223745p:plain    評価値の下がり方には幾つか種類があるのじぇ
思い出せるだけでも
最初自分では評価がいいと思っていたのに急激に評価が落ちていくパターン
だんだんだんだんとじょじょに評価値がずっと悪くなっていくパターン
の2つがあるのじぇ

評価値がよい時は時間を使わずにポンポン指していくが
評価値が悪くなってもはや回復出来ないようになってから長考を始める
AlphaBeta法のゆえにのような時間の使い方になるのだがこれはやめてほしいのじぇ!
評価が悪くなる前に時間を使って悪い局面を回避してもらいたいのじぇ
時間制御方法をもっと考えなければならないと思うのじぇ!

f:id:daruma3940:20160521003616p:plain
探索深さ5で時間制御無しは流石にひどいものね...

f:id:daruma3940:20160520223745p:plain
駒をとる手や駒をならせる手がその局面でいい手になるというわけではない!
その局面では駒をとったり成ったりせずに相手の攻め筋を潰すために駒を受けて打った方がよい時もあるのじぇ!

f:id:daruma3940:20160520223745p:plain
そこで考えたのが
差し手生成の種類を細かく分けて差し手の手を生成する前に局面の特徴をとらえて
どの差し手から生成するのがベストなのかを考えさせて差し手生成の順番を変えることができないか?
時間制御の部分も探索を始める前にその局面の特徴をとらえて
どれぐらい時間を使うべきかまたはどれぐらいの深さまで読めばいいか考えさせることはできないか?
ということなのじぇ。

f:id:daruma3940:20160520223745p:plain
ここに機械学習をつかえないかだじぇ?
探索を始める前にこのようなことをするのは時間の無駄になるかもしれないと思うかもしれないが
最初に指し手の分類を最適にしておくことで探索が速くなると思うので何とか最初の差し手制御の時間は取り戻してくれるはずであると信じているのじぇ
探索時間が無駄にならないようにするためにも差し手の分類最適化のところはなるべく実用に耐えうる軽いシステムを使いたいのじぇ

f:id:daruma3940:20160520223745p:plain
まあこの方法が上手くいくかどうかは分からないし、まりちゃが思いつくようなことだから ほかのソフトもこんなことは多分試し終わっているか技術的にかなり難しいかのどちらかだと思うのじぇ...
でもせっかく思いついたんだからやってみるのも楽しそうなのじぇ
まぁまりちゃは機械学習についてほとんど何もわかっていないのでこれから頑張ってべんきょうしていくのじぇ

f:id:daruma3940:20160520223745p:plain
あともう一つの気づきが水平線効果なのじぇ
f:id:daruma3940:20160520223530p:plain
水平線効果?
f:id:daruma3940:20160520223745p:plain
まあ詳しくはググってくれればわかると思うのじぇ
要するに夏休みの宿題をずっとやらずにため込んでたら夏休み最終日に地獄を見る....こんな感じの意味なのじぇ。
f:id:daruma3940:20160521003616p:plain
まあ分かりやすく説明すると価値の高い駒(自分の王など)がとられそうになったとき
それを認めたくないのでもし最大探索深さが5であれば相手の王の前に駒を打ったりして王手すれば相手はそれに応じなければ王手放置となってしまうため、
自分の王が取られてしまう手を打たれるのが先延ばしになり、最大探索深さの向こう側にそのような手を無理やり押し出そうとするってことね。
そんなことをしても結局は自分の価値の高い駒はとられるし、王手するために使った駒まで取られてしまい形成は最初よりも悪くなってしまうだけのことが多いわね。

f:id:daruma3940:20160520223745p:plain
そういうことなのじぇ。

f:id:daruma3940:20160520223745p:plain
それをSquirrelは飛車をとられそうになった時にやってしまったのじぇ。
相手はlib_shogiでこちらの持ち駒も多く、飛車をあきらめていればまだ勝てる可能性も高かったのに
どんどん駒を捨ててしまってもう再起不能な局面に陥ってしまったのじぇ。
あれは悔しかったのじぇ...

f:id:daruma3940:20160520223745p:plain
何とかコンピューターに水平線効果を避けさせる方法を考えるか、
そもそもの水平線を遠くに設定する、つまりかなりの深読みができるようにしないといけないのじぇ.

f:id:daruma3940:20160520223745p:plain まあ気づきはこんなもんなのじぇ。 まあゆっくり開発していくのじぇ。