AobaZeroで遊ぼう

f:id:the48:20190722123329p:plain

出張中のマシンが空くのでfloodgateにaobazeroを投入して以下の実験をしておりました。

レーティング表の通り学習が頭打ちに近いことが前提です。

AobaZero_w626_n_p1600ってのが,命名そのままですがオリジナルの二倍考えるってやつです。レーティングが200ほど上になってますので,二倍考えると200くらい上がるってのがαβ法と同じくMCTSでも求まったんじゃないかなってことです。

AZ_CPUってのも入れておきました。本当はp400って半分のを入れたかったのですがGPU搭載マシンがふたつ無かったので勘弁してください。CPUだとデフォルトのp30です。p800に対して16分の1と32分の1の間くらいですね。800~1000下回る位置に居ればいいのですが,この層は対戦相手が少ないので数値は荒く信頼性は低いと思っておきます。ちなみに評価関数はw640でした。

 

ということで次にp400の実験を開始します。

---

先日任意局面を探索できるようにsfen対応をしてみたのだが,dコマンドで局面は読まれているのに探索開始すると落ちる状況。何か初期化抜けのようなものがあるんだろうか?

もちろん実装出来れば評価エンジンとして使えることになる。

まぐれの話

  

昨年今年の選手権ではなく一昨年の電王トーナメントに近い状況の分析です。

仮説に仮説を重ねて,憶測でパラメータを決めて実装していたものが,本人が思っていたより有効に働いていたっていうのが実態だったようです。2年前の電王トーナメント直後にも記載したように相手のPonderが働かない状況を作り出すことは相当有効です。

職業柄裏付けの取れていないものに「想定通り」とか「自信があります」とか言いづらいもので「まぐれです」とコメントしたのですが,当日の懇親会でもニコ生とかは少々プロレスをやってくれないと盛り上がらないと指摘を受けたものです。

色々と仮説や野望を盛り込んだ発表をしてきたのですが,過激な仮説や目論見でも異論を挟まれることは無かったので諸先輩方と問題意識の共通部分が大きいということも分かりました。さらにもうひとつ踏み込んでおかないと電王トーナメント版のshotgunの実力評価は終わらないってことも分かりました。

 

札幌で少し時間があったので山岡さんの囲碁の本もちょっと立ち読みできたので買おうかと思います。大きな書店がある都会はいいですね。そいや,新しい激指も買おうかなぁ。

ニコ生の評価値の話

先月末の叡王戦開幕からKristallweizen(初回のみクリスタルワイゼン)がニコ生の評価値として使われております。

世界選手権準優勝としてドワンゴ社から協力依頼を受けたもので専用のファイルを作成しお渡ししました。

以下は棋聖戦でのシーン。若干ソフト名がはみ出てるのが分かると思います。

 

ドワンゴ社からデザイン的に略称でどうかと打診があったのですが,できれば入れて下さいとお願いしてこんな感じになったようです。狸王だと余白だらけになってますね。

 

f:id:the48:20190704135856p:plain

 

shotgunの頃からお願いしているMulti Ponderの可視化は保留から不採用になりました。暇が出来たら適当に可視化したいと思ってます。(GUI得意な方が協力頂ければ早期実現かなぁとか)

 

Ryzenのクロック制御について

デスクトップのRyzen仕入れたときに感じたことがある。

8コア16スレッドとか何に使うんだろうってやつだ。

で,既存のプログラムを幾つか走らせた際に感じた違和感がある。

シングルスレッドプログラムを走らせた場合にCPU負荷が4%にしかならないってことだ。そして,インテルのCPUと違ってこの時点でターボブースト(AMDは別の呼称だった気もする)が入らない。つまり,定格以下の省電力モードである。

もう一つ走らせるとクロックがほどほどに上がる。

 

で,困るのがこういうことだ。

ディープラーニング用のPCスペックについて - 48's diary

シングルスレッド性能が速いのが欲しいときがある - 48's diary

シングルスレッド性能が欲しい時に困る。

 

具体的な例としてはAobaZeroベンチのRX 580である。

AobaZeroベンチ - 48's diary

こいつは値崩れてたゲーミングノートのGPUなんだが,CPUがデスクトップ仕様のRyzenである。

www.asus.com

 

で,AobaZeroベンチで6秒クラスって言ってたんだけど,別に余計なスレッドを走らせてやるとCPUクロックがまともになって,4秒台になるんですよね。

これが本来の性能でした。

 

また別の話として,二世代目のRyzenだと2コア単位でクロックが変動してる。

で,高熱になるとそれぞれ適当に独立してクロックが下げられる。

例えば4コアのRyzenノートPCだと2コアが3GHzで残りの2コアが2GHzってことがある。

一番速くしてほしいスレッドが低クロックのコアに当てられる可能性とかあるんじゃないかなぁと想像してる。

 

こういうの次のRyzenとかで修正されてんのかねぇ。

なんか対策あったら教えてほしい。

 

コンピュータ将棋入門について

コンピュータ将棋界隈には色んな人がいます。

奨励会員などの将棋の強い人,ゲーム情報学含め情報系の学生・研究者,対戦大好きなゲーマーやプログラマーなどジャンル分けはクロスするので避けますが,結構な色物揃いです。

理由は実のところ要求スキルが幅広いことが挙げられます。

将棋のルールをコーディングするだけにも二つのジャンルの知識が必要になります。

近頃はこれに加えて最先端のAI技術ですね。

  

じゃ,今から入門って大変なのかと言うとルート次第でしょうね。

簡単にできるものとして,ゼロから全部作るのではなく既存の物を改造する方法があります。

ライセンス問題も生じないようにオープンソースの物をベースにするのがよいでしょう。

やねうら王の評価関数や定跡のみを差し替えるというのが今定番の入門でしょう。

 

別のルートを案内します。

棋譜解析です。実際欲しい機能がこちらと言う方が相当多いはずです。

自分なりの棋譜解析なんかは結構面白いと思います。

以前より紹介してるpython-shogiなどを用いると棋譜ファイルの読み込みなどは簡素に書けるのでお勧めです。

 

昨年学生向けに提示した練習課題をリストにしておきます。

練習用の棋譜ファイルは適当に対戦させて作るか,floodgateからでもダウンロードしてください。

1.棋譜ファイルから終局までの手数を得る

2.棋譜ファイルから初手を得る

3.棋譜ファイルから玉の移動した手だけを得る

4.棋譜ファイルから玉の移動したマスに着色する

5.複数棋譜ファイルから玉位置のヒートマップを作成する

6.複数棋譜ファイルから入玉した棋譜だけ得て,入玉率を算出する

 

同様に

1.棋譜ファイルから桂打ちのみを得る

2.桂打ちの際の利きを確認する

3.多くの棋譜ファイルから桂打ちを分類する(合い駒,両取り,繋ぎ桂,王手など)

 

駒の損得を計算する

成り駒を出現を検出する(さらに馬や竜など駒を区分する)

多くの棋譜ファイルから同一手順や同一局面を探すツールなどは簡単に作れるはずです。

頓死や戦型など様々に分析をすることも可能だと思います。

高度な解析をするには他のプログラムを呼び出して使うようなことがあると思います。

たとえば「詰めろ」を検出するには手番をパスして,詰将棋エンジンに詰みがあるかどうかを判定してもらえば簡単に答えが得られます。

振り飛車の左桂に着目して大量の棋譜から統計的なデータを得るような試みがあってもよいように思います。

 

ってことで,対戦や評価値だけじゃないのよ。

 

つーか,そもそもそういう動機でコンピュータ将棋やってるので,独自の出力データを上手に可視化すると結構面白いと思ってる。

温故知新(番外編)

温故知新シリーズが割と続いているが,AbemaTVから先日このようなものが届いた。

 

f:id:the48:20190622105527p:plain

温故知新

 

当選知らせの段階では伊藤沙恵女流二段としか知らされていなかったが,揮毫される文字をみると当選者決まってから書かれた?とか勘ぐってしまう。

偶然ですかね?

 

こういうの証券ニュースサイトのボールペン以来かも。

---

追記:

女流二段ってことはAbemaTVトーナメント収録時だと思うので偶然です。(今は女流三段ですね)

温故知新(Bonanza)

GeoCitiesの消滅と共に公式サイトが無くなったBonanzaである。

ちょっと(どころじゃないか)出遅れた感があるが,温めてみよう。

きっかけはこのツイート

  

実はBonanzaGeoCitiesで配布されていた頃,一部のライセンス規定が引っ掛かりGPLと共存できないのではないかとかオープンソース規定に入るか入らないかなどの話題があった。過ぎたことなので厳密な部分はここでは触れない。

 

AobaZero内に確かにbonaというフォルダがある。

https://github.com/kobanium/aobazero/tree/release/src/usi_engine/bona

 

オリジナルと比較すればよかったんだが,保存してなかったのでクジラちゃん作者のえびふらい氏の改造エンジンと比較した。

Bonanza6.0 USI - クジラちゃんの駒箱

https://bitbucket.org/ebifrier/bonanza_usi/src/master/

 

簡単にはほぼ完ぺきに同じファイルがあると言っていい。

差分はUSIプロトコルに対応した追加分とAobaZeroに対応した追加分と言ったところだと思う。後者はyssで始まる4つのファイルも含む。 (wcsc28のYSS Zeroの派生だろう。)

ということで,ちょっとした改造でUSIエンジン化できた。ビルド環境はもちろんMSYS2である。

コンパイラの性能差かえびふらい氏のものより若干高速化された気もする程度のほぼ同等の強さのエンジンである。つまり6.0相当と考えていいのだろう。

 

すぐにどうこうということはないが,実験ツールにひとつ追加と言ったところか。

C++ではなくC言語と言うのがひとつ特徴かな。

元々かどうか知らないがswitch文のfall through警告が沢山でるので注意。

---

追記:

そういえば保木先生はもっといいソースがあるのでそういうのベースに開発した方がいいように言われてました。