ひよこカルロ将棋v0.18を公開しました。

・序盤のシミュレーションを改善しました。
・futility pruningを少し改善しました。
・読み筋が途中までしか表示されていなかったbugを修正しました。

序盤を改善したおかげかssp相手には8割以上勝ち越すようになりましたし、ひよこカルロ将棋v0.17相手には7割ぐらい勝ち越すようになりました。

それでもまだ27飛とか大好きで、本当、困ってるんですけど、もうこれ以上やってらんない!!というぐらい疲れましたので、もうこれ以上やりません。

floodgateに投入して100戦ほどさせて様子を見ます。(バグって落ちなければ)

floodgateには、そのあとマルチコア対応したひよこカルロ将棋を投入して、また100戦ほどして様子を見ようと思っています。(バグって落ちなければ)

ひよこカルロ将棋は次のバージョンでマルチコア対応して、それが最終バージョンになる予定です。(バグって落ちなければ)

ひよこカルロメソッドII

ひよこカルロ将棋v0.18で序盤をどうやって改善したのか、少しメモを残しておきます。


・ひよこカルロメソッドIIとは?


まず、駒と駒がぶつからないシミュレーションはシミュレーションとして現実性がないので、意味がないと思いました。ここで、普通はプロ棋士棋譜などから指し手の統計をとって、実際に指されやすい指し手というものを調べて、その確率的な分布に従って指し手を選ぶという方法が普通の研究態度なのですが、そんなことはやっていると何ヶ月もかかりそうだったので今回は採用しませんでした。


結局、駒と駒がぶつかりあえばいいということで、成駒は敵玉のほうに寄せる手に加点したり、攻めの銀を敵玉のほうに運ぶ点を加点したり、まあ、そんな感じで加点、加点と加点しまくりました。

あと、ただで取られるような指し手も減点しなくてはならないのですが、これがそう容易ではなく、一番簡単な実装は以下に書く方法だと思うので、真似たい人は真似てください。


1) その指し手で1手進める。
2) capture(捕獲)する手をすべて生成してSEEが最大のものを調べる
3) 局面を1)に戻す
4) その指し手の価値 = 捕獲する駒があるならその交換値 + 成るなら成りによる価値の上昇値 - 2)の値 + 指し手への加点(成駒を敵玉のほうへ寄せる手etc..) + RandN(16)
5) 4)の指し手の価値が最大の指し手を選択

とまあ、これがすべてです。

RandN(16)は0から15までの乱数を発生させるの意味です。4bit乱数にしているのは乱数を発生させるコストもただじゃないので32bitの乱数をMT(Mersenne twister)で発生させて、それをちびちび使うからです。

それで、4)のようにすれば、同じ価値の指し手があっても乱数で加点されるのでランダムに指し手が選ばれますし、また、一番大きな評価値のものが100で、その次が30というように、いくぶん1番目と2番目が離れている場合は、一番大きな評価値のものが採用されます。

5)の過程でソートする必要もありませんし、また、2)を見ているのでタダ取られする変化に飛び込むこともありませんし、そこそこ小さな計算量で計算できるなかなか優れたシミュレーションだと思います。

このときに使う乱数の幅を変えることによりシミュレーションの性質を変化させることが出来ます。

あと、序盤で香を上げる手とか、角を4段目以上に移動させる手とか、金を角の移動範囲に移動させる手とか、その手の、まあそんな手指さないだろうというような手は適当に減点させることにより、シミュレーションの精度を上げることが出来ます。

その昔、谷川先生と羽生さんのタイトル戦で盤上で駒が前進(敵陣に向かう)しなかった指し手がない対局があったと思いますが、結局、短手数でplayoutに持って行こうと思えば、駒を前進させてぶつけあって、それで決着をつけるのがそこそこ良いシミュレーションなのかなぁと思います。

ちょっと2日ほどお休みします

せっかくやる気満々(←死語)になっていたのに、急ぎの仕事が入ってきてしまいました。
だ、誰ですか。「ひよこさん、仕事してはったんですか…」とか言っているのは。


それからですね。ひよこカルロ将棋は日々バージョンアップをしてfloodgateに投入しているわけですが、あまりに早く引き上げるので「本当は強くなってないんじゃないの?」とか周囲から思われているわけですが、その点に関しましては私も少し不安ではあります。

またコメント欄でれさぴょん常駐の人さんから

floodgateのレーティングは、最初にやや高めについて、そのあと徐々に本来の点数に落ち着く傾向があります。なので、もう少し長く走らせないと本当の点数はわからないんじゃないかな。

と言われております。


私も本当は100戦ぐらいしたかったのですが、50時間かかることになり、丸二日です。しかもその大半がpishogiです。いい加減、pishogiは勘弁していただきたいものがあります。


ともかく、ひよこカルロ将棋v0.18は、これを機にfloodgateでこのまま100試合走らせてみようと思います。いまfloodgateに投入しているのは公開しているひよこカルロ将棋v0.18と全く同じものです。

これでR1800を超えるようであれば、ひよこカルロ将棋は本物です。R1500ぐらいだったなら、「やっぱり強くなってなかったじゃん」と罵っていただいて結構です。R1700ぐらいだったら…「まあ、よく頑張ったよね」と。それくらいの評価をお願いしたい次第です。

ようやくBlunderの背中が見えてきました

hiyoko_carlo_v0.18_1c vs. BlunderXX-r3851_4c (2011-11-03 17:30)
http://wdoor.c.u-tokyo.ac.jp/shogi/view/2011/11/03/wdoor+floodgate-900-0+hiyoko_carlo_v0.18_1c+BlunderXX-r3851_4c+20111103173002.csa

序盤でBlunderのミスを突いて、早々に優勢になったのですが、ひよこカルロ将棋が手堅く指せずに攻めを繋がれてしまって逆転負け。

もう少し50手目付近のiterationさえ回っていればこれは完封できていたように思います。

つまり、Blunderはひよこカルロ将棋の高速化・並列化によって十分手の届く圏内ではないかと思います。

世間では「ひよこカルロ将棋は駒得のみの評価関数だから評価関数のおかしなソフトにしか勝てない」と言われたりしておりますが、今年の世界コンピュータ将棋選手権で7位に入ったBlunder(C#で書かれています)をさらに高速化のためにC++で書きなおしたBlunderXX-r3851_4cは「評価関数のおかしなソフト」ではないと思うのですよ。

つまり、ひよこカルロ将棋はnpsさえ上がれば、上位のソフトにも十分太刀打ちできるのではないかと私は思っています。いや、その肝心のnpsがそろそろ頭打になりつつあるのですが。