技巧2調べ(ベンチマーク編)

技巧2にはベンチマークコマンドが用意されているが,公式配布バイナリは学習部と共に無効化されている。

Linux環境を構築して自前ビルドすればいいのだが,まぁそれも面倒なのでどんなベンチマークをしてるか確認して,それをコマンドラインから同じことをやってもいいのじゃないかと思ってる。

以下がcli.ccの一部。

/**
* 探索のベンチマークを行います.
*/
void BenchmarkSearch() {
// いわゆる「指し手生成祭り」局面
Position pos = Position::FromSfen(
"l6nl/5+P1gk/2np1S3/p1p4Pp/3P2Sp1/1PPb2P1P/P5GS1/R8/LN4bKL w RGgsn5p 1");
Node node(pos);

// 30秒間の探索を行う
UsiOptions usi_options;
Thinking thinking(usi_options);
UsiGoOptions go_options;
go_options.byoyomi = 30000;
thinking.Initialize();
thinking.StartNewGame();
thinking.StartThinking(node, go_options);
}

要するに指し手生成祭の局面で秒読み30秒で探索しろってことだ。

ということで以下のコマンドと同等となる。

usi

isready

usinewgame

position sfen l6nl/5+P1gk/2np1S3/p1p4Pp/3P2Sp1/1PPb2P1P/P5GS1/R8/LN4bKL w RGgsn5p 1

go btime 0 wtime 0 byoyomi 30000

まぁ,何がしたいかってことなんだがfloodgateのgikou2_1cがryzen7 1700の1スレッドだってことらしいので,上記コマンドにスレッド制限入れて計測してみました。

手元にはryzen7 1800Xしか無かったのでクロック3.6GHzで制限を入れました。

結論は700knps強ってことでした。

古いノートパソコンの2コアで丁度これくらいじゃないでしょうか。

floodgateのレートと何かを比較したいときの参考にしてみてください。

 

参考に以下のサイトではryzen7 16コア使ってこの11倍程度のnpsが出るとあります。

--benchコマンドで約7.7Mnpsでしたのでほぼ同じ比率かと思います。

www.uuunuuun.com

---

4/7 追記

i5-2410Mで840knpsを確認。

2割ノード数増加でレート20程度,探索部でレート20程度,評価関数でレート70程度の向上が見込まれる。

今流しているtest_i5-2410Mが改造した技巧なのでレートが3300の110くらい上になる予定。

最初マシン設定などで変な負け方してたのでちょっと落ち着くのに時間かかるかも。

floodgateの不具合について

floodgate

昨年から遊ばせて頂いている。

基本的に感謝しかないのでサポートできることがあればしたいのだが,そもそもどういう運営をされているのか理解していない。

 

最近酷い不具合を見つけた。

対戦相手はレートの近い人とと公式にあるが,このときに使われるレートは表になっているレートとは異なって対戦相手を決めるとき用の言わば内部のレートである。ログファイルを閲覧すれば見られる。

これがたまにとんでもなく高くなったり低くなったりしている。不自然な変動は多くあるが,1件法則性をみつけた。

きふわらべ効果と言うべきかもしれないが20手未満で勝ったときにレートが極端に下がるようである。これはさすがにバグだろうとww

 

きふわらべを短手数で詰めると,きふわらべと何戦も付き合うことになるきふわらべ地獄のようなものだ。

第28回世界コンピュータ将棋選手権の成り行き予想(4/4 ver)

タイトルまるパクリです。(オマージュとかリスペクトとかインスパイアと読み替えて頂いても結構です。)

昨年も各チーム動向を予想されていたと思うのですが、大半の分析には納得させられます。

qhapaq.hatenablog.com

 

引用して何を書こうとしたのかというと

私見を少々入れて、初参加チームとしての展望ってところでしょうか。

レーティングに関して参考サイトは以下のアレです。

www.uuunuuun.com

 

このサイトを見るだけで、昨年選手権(以下wcsc27)3位の技巧が第5回電王トーナメント(以下sdt5)予選落ちラインであることが確認できます。半年でレーティングが200ほど上がるってのはそういうレベルです。

ちなみにこのレーティングってのは結構相性が強くでることがあるので注意が必要です。自己対戦とかでの勝率UPは比較的ちょっとしたことで可能ですが、これが過大評価されがちです。逆に類似性の低い(強みを持っている部分が異なる)対戦相手だとレーティング差が計測はし易いのですが、一回キリの勝負では判定不能と言っていいでしょう。shotgun@sdt5は技巧2に90%上の勝率を誇りますが、elmo@wcsc27には有意に負け越します。そして、一戦見ただけでは(棋力もあるんでしょうが)どっちが強いとかコメントしづらい感じです。

 

こういったことを踏まえて、一参加メンバーとしてチーム内で簡単な雑談をしていたのですが、今回wcsc28では一次予選がやばい感じです。一次予選参加チーム数で既にsdt5参加数を超えており、ましてや二次予選へ進めるチーム数は8チームと聞きます。

スイス式トーナメントですが、今年は試合数が増えるそうで運の要素も減る感じでしょうか。

個人的にはうっかり大会最終日までホテルを取ってしまっております。

 

第28回世界コンピュータ将棋選手権

また、選手権では使用マシンが青天井になっており、昨年もAWSクラウド勢が猛威を奮いました。今年はクラウドを使うチーム数が倍増しており、クラウドを使うか同等のマシンを現場に持ち込むチームでないと予選すら通過できないのではないかと予想しております。つまり、i9や多ソケットのXeonですね。AWSでも昨年比で最上位のマシンが相当増強されておりますのでどうなることやら。

個人的には一次予選落ちした時用に何かネタを持っていくべきかなぁと思ってます。

 

また、ソフトウェアのアルゴリズムにおいても恐らく大きなことが起こります。sdt5ではwcsc27の影響でelmoを参考にしたチームが上位陣に多かったと思いますが、wcsc28では昨年末界隈を騒がせたAlphaZeroの影響が強くディープラーニングモンテカルロ木探索に本腰を入れたチームアピール文が多く見られます。アピールだけなら簡単にできるのですが、ハイスペックのハードウェアとセットとなるとこれは結果が楽しみです。もちろん、アルゴリズムレベルでの革新があれば多少のマシンパワーの差はなんでもないことはBonanzaの例でも明らかです。

今年はwcsc16のBonanza登場以来の衝撃があるのでしょうか。

 

そして、何かの予感を感じさせるのか出場キャンセル者が出ていないってのが結構すごいです。sdt5の目的であった多くの人と面白い話が出来るんじゃないかと楽しみにしております。

 

sdt5で立ち話した方の中で分析能力・対応策の準備が的確と思えた方が何人かおられるのですが、そのうち今回明確に新ネタを仕込んでいる方が今までより弱いとは思えないので・・・(内緒であまりネタを明かさない人を批判しているわけではありません)

計測値の雑記

昨日は休日でしたので空いてるマシンで色々計測してました。

 

なんとかチャンネルで話題の最新読み太(今年更新のkppt_file版)

【エンジン】読み太、やねうら王4.80(どちらもaperypaq評価関数)
【勝敗】27-11-117 (200戦予定を途中ストップ)
【持ち時間】10分切れ負け
【CPU】Xeon 12コア (HT ON)
【OS】Windows10 64bit
【メモリー】16GB
【思考条件】Threads=24、USI_Ponder=OFF、引き分けスコア=-2、定跡オフ、ディレイ関係0、HASH=4096
【特記事項】bash -c './Yomita-by-clang' で読み太だけWSL利用(clang++-5.0)

 

読み太が進行度評価してるらしいってのは知ってます。あっちに貼ろうとしたけど,誰が計測したか分かった方がいいだろうってことで。

 

以降,オマケ。まぐれ度の検証の続き(i9計測)

sdt5で数名が託されたという話の「まふ定跡」

本番で使ったのは読み太さんとタヌキさんだけらしいので。

  

対よみた(まふ)

対局数100 先手勝ち54(55%) 後手勝ち43(44%) 引き分け3
shot_gun 0.81
勝ち64(65%) 先手勝ち35(71%) 後手勝ち29(60%)
Yomita_kppt4.61
勝ち33(34%) 先手勝ち19(39%) 後手勝ち14(28%)

 
対たぬき(まふ)

対局数99 先手勝ち47(49%) 後手勝ち48(50%) 引き分け4
shot_gun 0.81
勝ち27(28%) 先手勝ち13(27%) 後手勝ち14(29%)
tanuki.sdt5
勝ち68(71%) 先手勝ち34(70%) 後手勝ち34(72%)

 

よみたさんは10%ほど勝率上げてますね。

比べてたぬきさんは若干下げてます。

と言うか定跡が双方長いと50%に寄ってくるんじゃないかって感じですかね。

 

さらに以下,相手だけ定跡抜き対局です。

酷いハンデ戦に思うかもしれません。

 

はにわ(定跡なし)

対局数100 先手勝ち61(64%) 後手勝ち33(35%) 引き分け6
shot_gun 0.81
勝ち49(52%) 先手勝ち32(66%) 後手勝ち17(36%)
honeywaffle.sdt5
勝ち45(47%) 先手勝ち29(63%) 後手勝ち16(33%)

 

かっぱ(定跡なし)

対局数100 先手勝ち56(58%) 後手勝ち39(41%) 引き分け5
shot_gun 0.81
勝ち31(32%) 先手勝ち20(41%) 後手勝ち11(23%)
qhapaq.sdt5
勝ち64(67%) 先手勝ち36(76%) 後手勝ち28(58%)

 
たぬき(定跡なし)

対局数100 先手勝ち63(67%) 後手勝ち31(32%) 引き分け6
shot_gun 0.81
勝ち28(29%) 先手勝ち22(46%) 後手勝ち6(12%)
tanuki.sdt5
勝ち66(70%) 先手勝ち41(87%) 後手勝ち25(53%)

 
えるも(定跡なし)

対局数100 先手勝ち67(69%) 後手勝ち30(30%) 引き分け3
shot_gun 0.81
勝ち31(31%) 先手勝ち25(51%) 後手勝ち6(12%)
elmo.sdt5
勝ち66(68%) 先手勝ち42(87%) 後手勝ち24(48%)

 
よみた(定跡なし)

対局数100 先手勝ち50(55%) 後手勝ち40(44%) 引き分け10
shot_gun 0.81
勝ち52(57%) 先手勝ち29(63%) 後手勝ち23(52%)
Yomita_kppt4.61
勝ち38(42%) 先手勝ち21(47%) 後手勝ち17(36%)

 

これ,意外に思うかもしれません。

かっぱさん,たぬきさんは定跡使った方が勝率が高いようです。評価関数自体が非常に素晴らしいのですが,序盤定跡も相当すばらしい出来だったのでしょう。

えるもさんは定跡が無いとうちの先手定跡だけが刺さってる感じです。それ以外はかなり強いです。えるもの評価関数の弱点を序盤定跡で上手に補っているイメージです。そういう作り方をされているのでしょう。

はにわさんとよみたさんは定跡抜きの方が勝率を上げてます。極端な相性があるのかもしれませんが,塚本さんがうちとの対戦直前で定跡を抜いた選択は正解だった感じがします。

 

う~む,作文をしなくてはならないのに逃避してる感がありますなぁ。

真面目に分析すればするほどラッキーパンチ感が出てしまうのがツラい。

自分に都合のいいデータだけ公開して,俺つえぇってやってもいいのですが

(笑)

技巧2改造記録(中間報告)

オープンソースのわりにあまり弄られていない気がする技巧ですが,

うちでは以前よりスパーリングパートナーとして教材として遊ばせて頂いております。

 

bleu48.hatenablog.com

 

前回の続きで教師局面を作成し強化学習を試みました。

計算時間はi9-7980XEをもってしても1週間以上かかる大作です。

強くなったかなぁとオリジナルと対戦させてみたところ15勝23敗程度まで進んだところで諦めて切ってしまいましたが,考えてみたら今までで一番まともな戦果です(笑)

学習用の棋譜が最近のfloodgateなので結構モダンな差し回しが見られました。具体的なところでは,後手番角交換拒否からツノ銀雁木風に組みながら右玉に展開したのち,交換した駒を駆使して玉頭戦を挑むような一局が印象的でした。3三や7七に銀が上がらないのがオリジナルとの絶対的差異です。

もう一段強化学習を仕掛けてみます。

 

で,タイトルが改造記録になってる辺りで気づいたかもしれませんが,本体に本格的に手を入れ始めております。以前は学習部について教師局面を総括して管理する部分を改造していたのですが,今回は探索部を少し弄ってみました。

具体的には前向き枝狩り部分の変更が大半で,土日を使って相当の変更を施しました。ざっくりオリジナルと比較対戦をしているところ,現在47勝40敗13分で気持ち強くなったかなぁという辺りです。また,時間が出来れば更新しようと思います。

具体的にどの変更がどういった効果を及ぼしたかについてはデータを取るだけでも膨大な計算時間が必要だとやね師匠も仰っております。どうしたもんかねぇ。

 ---

4/5追記

その後,追加の強化学習を2パターン行ったら両方とも6割程度の勝率でオリジナルを上回った。これで,評価関数・探索部ともにオリジナルより強くなったと言える。

具体的には36スレッド2分切れ負けで60-0-40および61-1-38である。技巧エンジン同士なのに引き分けが激減しているのが面白い。詳細はボチボチ調べて行こうと思う。

レーティング的にはelmo@wcsc27と並べるかどうか微妙ってところだろうか。

省リソース戦なら優位かな。

コンピュータ将棋の調べもの(主に自分用メモ)

新しい取り組みをするときに先行者の成果を調査します。

研究者だとサーベイと言われるやつです。(今頃ですんません)

 

ハードウェアの話。

電王トーナメントと異なりコンピュータ将棋選手権ではハードウェアが統一されていないため色物のハードウェアを持ち込むことが可能です。

今回コンピュータ将棋のネタでFPGAを使おうと思ったのですが,既に相当の完成度のものをボンクラーズやPuella αで有名な伊藤さんがA級リーグ指し手1号として実装されています。ということでアルゴリズム的に全然違うとしてもぱっと見ウケのFPGA実装はあんまり面白くないってことで。(そういえばSDT5の懇親会でPuella αのソース見ておいてはどうかとどなたかにアドバイス頂いてた。)

A級リーグ指し手1号

(今まで知らんかったんかと言われそうw)

 

探索部の話。

Stockfishってのがチェス界ではレジェンドでしてこのソースを参考にするのが将棋でも相当有効ってことで随分引っ張ったようです。近頃はそうでもないらしく,やねうら王はかなり独自の進化を遂げているようです。(大変荒い説明)

Stockfishがもたらさなかったもの | やねうら王 公式サイト

Stockfish DD – search 探索部 | やねうら王 公式サイト

 

1月の勉強会でも話したネタなんですが,チェスと囲碁と違って将棋はちょっと人間とコンピュータで違う雰囲気になっています。チェスについては駒の動かし方程度しか知らなかったのですが,最近少し学んだところ結構争点の作り方の難しいゲームでうっかりすると盤上の駒が減って引き分けが多くなるようです。囲碁は盤上に石が詰まってきて終局です。それに比べ将棋は駒の数が40枚で終始変わりません。

つまりチェスと囲碁は比較的単調に終局に向かい,ある程度手数が予測される。将棋は状況次第では手数が伸びて,場合によっては終盤に見えたものが中盤に戻るなどの展開も珍しくない。取った駒を打つルールのためです。特に攻め駒を相手の守り駒と交換し自陣を堅める展開は長期戦になりますね。

(そういえばプロの対局でも何か壮絶なヤツがこの前ありましたね)

コンピュータの場合,疲れを知らないので長期戦でのミスというと残り時間が不足して探索が甘くなる展開が考えられます。まぁ,そういうのを狙ってやってるのが昨今のコンピュータ将棋の争点のひとつになります。

有効な手筋のみを選んで深く読むのが枝狩り,序盤中盤終盤の時間配分の制御も重要な課題です。極論時間さえ無限にあればこれらは不要となります。

 

評価関数の話。

ここは色々とあるのですが,ざっくりBonanza以前以後で切って良いと思います。

そもそも探索と評価は対になるものです。終局まで読める探索があれば途中評価は不要で,一手先の完璧な評価が可能であれば深い探索など不要なのです。で,妥協点を探すわけなのですが,玉形,駒の働き・・・と人間の知見に基づく数値化の歴史にかなりドライな評価を入れたのがBonanzaで三駒関係と言われるものです。上記にあるとおり将棋は40枚の駒で局面が作られます。このうち玉を含めた三駒の位置関係に評価値を与え総和を取ったものがBonanzaの評価関数です。現在のコンピュータ将棋においてもこの考えが引き継がれて,これに手番を加えた形で利用されています。

次にこの評価関数の作り方ですが,Bonanzaにおいてはプロのデータに基づいて数値を定めていたようです。NDFが深く読んだ評価値を浅い評価値で予測可能とする手法で革新を起こし,さらにwcsc27のelmoがこれに勝敗補正の項を追加したものになっているようです。現在では補正項の入れ方や学習用の局面の準備法などが争点となっているようです。そういえば,読み太さんは進行度入れてますね。

この辺の最新事情はかっぱさんのブログが詳しいですね。

qhapaq’s diary

 

クラスタリングの話。

計算機を束ねることで速度アップを図ろうとする試みですね。随分前から半分仕事半分趣味で取り組んでいるのでちょっと詳しいおじさんなわけですが,木探索においては使いにくいですね。

実際wcsc27において,さくらインターネットの高火力サーバを用い総計1092CPUコア・128GPUを動員したPonanza ChainerやAWSで64並列でc4.8xlargeを動員した技巧であっても,elmoのm4.16xlargeの1ノードに及ばなかったわけです。

(クジラちゃんは何と表現したらいいんだろう。)

まぁ,うちは少しはアイデアがあるんで上手に使えたら少しは役に立つような気もします。問題はクラスタリングで強くなるかどうかのテストを行うには膨大な金がかかるってこと,というか当日の対戦だけでも諭吉さんがフライアウェイな感じでしょ。物量の勝負したくないなぁって感じですね。

 

ブログに書いてるけど,これアピール文書書く前の頭の整理だよなぁ。

まだ,何か抜けてる気がするが追記する予定でww

(間違いの訂正に関してツッコミ大歓迎)

技巧2の学習部調べ(i9-7980XE編)

bleu48.hatenablog.com

 

昨年夏以来である。

i9-7980XEのマシンにメモリ増強したついでに上記でやれてない部分を試してみた。

--learn-probability

最大でメモリ100GB程度使用していたが余裕の完走である。2時間程度であろうか。

圧巻と言っていい。

出村さんの愛機がCore i7-3930Kだとの話であるが,こいつだとメモリ上限64GBなので恐らくクラウドで絞ったんだろうと推察される。

こうなると俄然学習部の改良を試みる気になるね。

 

また,今回は学習データを最新のfloodgate棋譜を追加して試した。必要データ数に対して十分な数が揃ったのでレーティングの低い対局などを大幅に削除してみた。

つーか,出村さん公式戦51000局もどこで棋譜集めたんだろう?

 

bleu48.hatenablog.com

 

確認してみたら前回は1割も勝ててないらしい。

今回は100戦して21勝77敗2分け(5分切れ負け,定跡・ponderなし)

負けるにしてもまだ少しマシな感じ。

特に引き分けが激減している。

局面はちょっと見た感じだと流行りの雁木形を好んでいる様子で時々右玉とかしてる。

技巧の棋風も学習データ次第ってことね。