Apery調査の件

まず,遊び道具を提供下さった平岡さんに感謝します。

思えば三年前になるんですね。教師データの作成依頼のツイートが流れてきたのが,そもそも私がコンピュータ将棋に触れるきっかけでした。

ダイアリーの方からインポートされた記事があるのでリンク残しておきます。

100万局面ずつの生成ってことで,たまたま他の数値解析のベンチマークを取っていた時期でもあったのでありったけの計測を行った序でに,恐らく累計1億近くお送りさせて頂いたと思います。

 

bleu48.hatenablog.com

 

ということなので,この年から電王トーナメントを見ました。

古い話は去年くらいから調べさせていただいたので可能な限りついていきます。

 

話は変わって,5月にやった以下の件です。

bleu48.hatenablog.com

 

うちの学生がコンピュータ将棋に関する研究をしたいというので色々と調べてもらったのですが,結果はどうもAperyがQhapaqやTNKを上回るわけがないという統計データしか出ませんでした。他サイトのレーディング計測の通りなので,詳細はネット上では省きます。

 

で,最後に気になったのがアレです。

決勝の朝,笑顔で御説明頂いたってやつです。

github.com

 

確かにびっくりしました。前日予選の棋譜引用の定跡ですからね。

それは「Aperyの指し手」なのかなぁとも思ったわけです。

ただ,これが最上位のリスペクトだと気づいたのは随分後になります。

優勝前に前チャンピオンelmoや電王TNKと並べて頂いてたのでホント光栄です。

 

対戦相手の設定や都合などもあると思いますが,具体的に予選棋譜などと見比べて一応私なりの結論がこれですね。

ですので選手権3位の理由の一つが序盤定跡。

これ入れないとAperyの序盤甘いよね。

レーティングは計測値が信頼できるとしておきます。

チェスのエンドゲームの話

囲碁とチェスの終盤はシンプルだって話は何回かしてる。

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

将棋とチェスの違い(Stockfishを参考に探索部を強化する際の注意点) - 48's diary

 

シンプルって言っても程度があって五目並べやオセロに比べたらちょっと大変。

囲碁でも日本ルールと中国ルールで勘違いとかして大逆転があったりするくらい。

コンピュータ的には競技母体の関係か中国ルールが主流らしい。日本ルールはコンピュータ的実装がちょいとややこしいらしい。私はそもそも囲碁に詳しくないのでこれくらいの知識。

 

チェスは残り駒が減る競技で,残り6個になったら全組み合わせが既に探索が終わっててそれを参照すれば最善解が得られるようになっている。

いや,「いた」ってのが正しい。

 

昨日知ったんだが去年の夏からこれが,7個になってた。

384 threads (8x Intel Xeon Platinum 8168)を5か月ぶん回して出来た,参照すべきデータベースのサイズが18.4TBだそうな。

lichess.org

 

18.4TBのストレージがなくてもWebAPIを叩けば答えを返してくれるらしい。

 

github.com

 

これ,人間同士でも参照するんだろうか。

将棋だと持将棋みたいなもんでしょ。

Go言語で配列のメモリイメージをそのままファイルから読む

  

その後解決したのでメモっておく。

参考にしたのは以下のところ。

 

qiita.com

 

要点だけ引っ張ったコードが以下になる。

KPP := make([]int16, 81*1548*1548*2)
file, err := os.Open("eval/KPP_synthesized.bin")
p_kpp := (*[2 * 81 * 1548 * 1548 * 2]byte)(unsafe.Pointer(&KPP[0]))[:]
file.Read(p_kpp)

 

int16のスライスの先頭アドレスをバイト列のポインタにキャストしてあげている。

結果はエンディアン依存することになるけど,そもそもbinary.Readが重い理由が全データをエンディアン変換をしてるからなんだよね。

使いまわさない前提でローカル運用するコードだから許して下さい。

 

Go言語雑感

Go言語について入門書のチュートリアルくらいはちょっとやってたんだけど,実用でどのくらい使えるかテストしてみました。

ターゲットは例の如く将棋ですね。

どっかの移植でも面白くないので,池さんの参考書やらオープンソースの他のソフトを適当に読み散らかしながら自分なりの実装をしてみました。

特に速度や互換性などには特に考えない習作レベルです。bitboard使ってないです。

そいやpythonでもやったんですがね。

 

昨年末,盤の設計から局面表示,合法手生成辺りを2日くらいで作ってました。ちょっとした合間を見つけてUSIプロトコルに対応させてランダム対戦まで昨年内にできてました。

 

そして年明けの昨日から探索部を作成。

シンプルなαβ法を実装した段階ではシングルスレッドで200knpsくらい出てました。やねうら王には随分負けているがGo言語実装ってのを考えたら健闘してるかなぁって印象。

 

評価値を駒得以外にKPPっぽいものを実装したら,探索速度が桁違いに落ちました。それでも,LesserKaiに勝てるようになりました。pythonでは届かなかった領域なので,ちょっと満足。

 

 

5手爆弾にハマるのでまだまだですね。コンピュータ将棋の歴史を学んでいる気分です。

  

で,色々便利だと思ってGo言語やってみたけど,メモリ管理など低レイヤーの部分で意外に使いにくいことも見つかってきた上にC++でスクラッチの方が将来性あるしよかったんじゃないかとも思い始めてきて今後の運用は微妙なところです。

ちょうど気づいたのはGPS将棋がいつのまにかPerlからGo言語になってたんですね。うちもそれを知らずに同じようなことを考えていたのですが,う~む。どうしようかしら。他言語でいうとRust勢とかどんな感じなんでしょう?

#なんか書き散らしてたら考えがまとまるかと思ったけど全然ダメでした

 ---

追記:

翌日思い付きで並列計算化してみました。古いマシンだと合法手生成部分の並列化は若干有効でしたが,それ以外の評価値計算などは何しても遅くなる一方でした。やはり探索スレッド単位で並列化するのが望ましいようですね。誰もやらないわけですw

---

さらに追記:

numpy.fromfileみたいな配列のバイナリイメージをそのまま読み込むような機能を探してます。それとそれらを比較的簡単な演算するんですが,ベクトル・行列演算が演算子オーバーロードを禁じてるために簡素な表記ができないなぁと愚痴ってます。数値計算向きじゃないのですねぇ。

新年の抱負

「過去現在、そして下手したら今後数年の未来までも含めて史上最強の将棋プログラムになるかもしれない。」ってやね師匠が言うてます。

やねうら王、新年の抱負を語る | やねうら王 公式サイト

 

ウチは昨年の探索部の検証データが揃ってから,今年の探索部を弄ろうと思ってたのですがオチオチしてたら間に合いませんね。(ソフト開発のスケジュール感が分からん人は分からんでしょうが)

今年も検証データ作成を後回しで勘の調整で体裁を作る感じになりそうです。

私,勘と運だけは良いので(嘘)

 

探索部の新しいアルゴリズムを考えているのですが,実装となると難しいなぁと手が止まっております。というのもロジックはできてもそれを高速実行することができないと全くの無意味なものとなってしまうからです。そしてそれは並列計算というのが大前提となります。

ええ,この時点でまともな参考書籍が皆無になります。

どっか北欧の大学院生が何年前かに書いた修士論文と保木先生の大作が一番参考になったりします。もちろん前者はチェスですね。

その辺今月中に目途が付いたらライブラリ勢じゃなくなります。←ここフラグですよ

 

Google的なアプローチもあるんでしょうが,うちでやれる規模じゃないです。

リーラ何某も私の守備範囲じゃないですね。まぁ,手伝い居たら別ですけど。

#手伝い居たらやりますって意味ですよ。

 

具体的な目標としては大将軍に勝ちたいです。

昨年はタヌキとハニワに勝った時点で祝杯でしたので今年は大将軍を目標に頑張ります。

それと電王トーナメントでは惜しくも焼き肉祝勝会を開けませんでしたので,今度こそ焼き肉祝勝会をやりたいと思います。←ここもフラグですよ

今週のお題「2019年の抱負」でした。

今年の振り返りと新年の予定

ざっと振り返ります。

 

1月

岡山自作AIの会を発足しました。

どうしても金の臭いがしてしまうのでなるべく泥臭い命名です。

但馬先生に協力頂いて,結局私が3時間くらい喋ってた気がします。

チームメイト募集にノーリアクションが予想外でした。

応募者が居ればチーム名に「岡山」が入ってた気がします。

 

2月

雑務の細かい合間の時間でGAやらpyaqやら弄ってた感じです。

まだまだ知らないことが多いなぁって実感してた時期でしょうか。

無作為に気の向くまま学習するのって楽しいですね。

wcsc28へエントリーした直後で方向性の検討を進めてました。(検討中=進んでない)

新ネタ模索って感じかな。

 

3月

一応考えたパラメータの計測祭ってところでしょうか。

リソースの半分以上は技巧2周りの調べ事だった気がします。

出村さんの次くらいに技巧2に詳しくなったような幻想を見ました。(憑依気味)

 

4月

新入生研修担当ってのもあってバタバタしておりました。

太陽公園のお城は初入場でした。

バスツアーの間も計算機は既にバッチ処理状態でした。(部屋暖かいなり)

 

5月

世界コンピュータ将棋選手権で優勝いたしました。

初参加なので段取りや雰囲気も分からず色々御迷惑おかけしました。

基本アルゴリズムはshotgunのままなので昨年末にはほぼ完成してたとはいえ

細かい調整は主に年始からですが,割と頑張ってた気がします。

月末学内のフォーラムで展示。来客多数で結構遊んで頂けました。

 

6月

自作AIの会を開催してました。

世界チャンピオンのアルゴリズムの話をしたところそりゃ勝つわなみたいなリアクションだったのを覚えております。

これをそのまま月末のゲーム情報学研究会に持ち込みました。

多くの過去参加者にアカデミックな場で聞いていただけてコメント頂けたのが大変ありがたいところです。

カツオおいしかったです。

 

7月

GPWへお誘いを受けたので準備をしてた時期ですね。

別ネタの方がいいだろうってことで,とりあえず実践的なアルゴリズムを再検証して

アカデミックな場に耐える仕様に仕上げようとしてました。

オープンキャンパス・オープンハードカンファレンスなどで出展しておりました。

 

8月

Vtuberハッカソンに参加して遊んだりしてました。

職場の雑務で土日を潰したりするのであんまり夏休みって感じはないですね。

 

9月

合同勉強会から始まって色々専門外に手を出せた時期かな。

複数の原稿とかの準備も並行してたのであんまり遠出してなかった。

 

10月

Pycon mini Hiroshimaで講演と酒祭

GPW科研費の原稿を送って,スケートアメリカの観戦

ボーイングエバレット工場とシアトル旧市街の観光を慌ただしく仕上げる

プライベートの海外旅行を全て代休で済ませられる位の業務過多

 

11月

学祭,意外と知名度がないことがわかる。

知ってる学生は知ってるけど,知らない学生も多いんだなぁ。

燃焼シンポ,GPWと発表を梯子した後オープンCAEシンポの原稿を送ってフランス杯に出かける。

グルノーブル旧市街は比較的小さな街でワインとチーズが名物,観光にはフランス革命の舞台であるバスティーユ牢獄がありました。地質学的にも面白いところのようです。

もちろん昔冬季オリンピックを行った場所でもあります。

反政府のデモが行われており,トラムの運転に支障が出ており英語が通じない田舎町で少々不便をしました。

帰国便の際に空港で火災があり,手荷物検査を二度受ける手間に出発が一時間遅れて土産が準備できなかったのが残念です。

 

12月

オープンCAEシンポジウム,他と来客層が違うのか話の通りが微妙。

口頭発表は短い時間なので新ネタを説明するのは難しいですね。

懇親会は鉄板ネタで盛り上がる感じ。会場が5月と同じ川崎。

年末は合同勉強会・忘年会議が恒例。

サプライズニュースが飛び交うのも恒例だけど,色々動くよねぇ。

 

今年は例年の発表より多めの上,北米欧州と二回出かけたので体力的にも結構しんどかった気がします。

出張費もしんどかった(笑)

相当厚かましいボランティア依頼にも慣れてきました。

来年は計画的に進める部分を上手に納めて遊びを確保しようと思います。

 

wcsc29はエントリー予定ですが,チーム構成は未確定ですので

参加希望者・スポンサーなどの応募があれば喜んでお聞きします。

決まってるのは私自身の身売りに失敗したため(笑),やはり私がチームを率いるくらいです。

Barrel houseが唯一のスポンサーで,来年もTシャツを用意してくださるそうです。

大口スポンサーでしたら,チーム名やソフト名の変更など検討致します。遠慮なく申し出下さい。

クラウドの計算機代を出して頂けますと大歓迎です。(これ忘年会議で宣伝すべきでした)

 

そういえばBarrel houseの忘年会が今年まだありました。

生ハム原木を一本持ち込みますので新年のお客さんにも振舞われるかも。

GPWに参加してみて

屋外での立ち仕事の影響か喉をやられたまま出張してきました。

大阪で一件発表の後,箱根でゲームプログラミングワークショップ。

Game Programming Workshop

例年箱根の研修施設で合宿制で行われているとのこと,初参加でしたが堅苦しくないところの交流ができて非常に面白かったです。

そもそも,集まるテーマがゲームプログラミングですので,ゲーム理論の理論家から機械学習アルゴリズムを始め,聞いたことのないボードゲームの必勝手順などの話まで面白くないものがないわけです。

 

私も口頭発表をさせて頂きましたが,専門外のこともあり専門用語などを適正に使えたかどうかすら心配でしたが,実践的に強化する方策としては正しいだろうし,そういう視点のない人からしたら刺激的な発表だったのではないかとお褒め頂くシーンも御座いました。別に将棋ではないがチェスで類似のアルゴリズムがあったとの指摘にはまったく調べてないとしか回答できなかったので,アカデミックな場に出るとそういうところも今後確認しなくてはならないのだと覚悟しました。

 

口頭発表後に夜のイベントとして酒席があるのはもちろんですが,そこでGPW杯が開催されました。コンピュータ将棋もあり結果は以下のようになりました。

 

  

玩具として別のプログラムももってくればよかったかなぁと感じるところです。

5五将棋やガイスターなどが参加者が多く盛り上がっておりました。

ガイスターは不完全情報を上手に駆け引きに使う競技のようで,経験者のコメントでは人間でも相当面白いゲームのようです。

体調体力に余裕があれば若い人に交じって深夜まで遊べたかなぁとか思ってます。

 

箱根帰りで疲れたぁってところに,コレです。

 

  

レミさん,WCSC29用にガチで今から全計算能力を将棋に突っ込むらしいです。

怖いですねぇ。楽しみですねぇ。