菅井新手

菅井新王位おめでとうございます。

一部には奇策を弄して勝ったなどとの意見がありますが

それは挑戦者の権利というやつなので,観戦者としては面白いの一言に尽きます。

第五局二日目なんかは勤務予定をキャンセルして見入っておりました。

 

簡単に解説しておきますと,羽生善治と言う人がプロになってから将棋界のタイトルのざっくり半分が彼のものになっています。タイトル戦と言う意味では羽生のいないタイトル戦の方が珍しいという表現になります。彼にとって年間の公式戦の半分がタイトル戦という状態が随分続いています。事実,王位を失冠しても即王座戦を戦う予定になっています。

比べて,他の棋士一般にとってタイトル戦挑戦だけでも引退までに一度もない棋士も多くいるほどの難関です。タイトル一期だけでも立派な実績として晩年理事になられるようなことも普通です。

ということで,タイトル戦ともなると目の色変えて鉄板の得意戦法や秘策中の秘策を出してくるのが当然となります。

まぁ,そもそもこれだけ歴史のある競技で序盤に奇策を入れられるっていうのが研究成果というべきものでしょう。たまたま手に入れた菅井ノート後手編でも巻末に奇策について掲載されていましたが・・・この辺も色々と面白いエピソードがあるようです。

 

で,個人的にも小学生以来に序盤の奇策を色々と考えているのですが,まぁ素人にゃ無理ですね。菅井新王位の手も正直悪手にしか見えません。ということで,他人のアイデア・助っ人の手を借りることにしました。(実際は手順逆)

 バッチファイルで序盤定跡自動生成です。

評価関数は変更できるので,近頃流行りのyaselmoに差し替えて走らせ中です。

どんなものができるやら楽しみにしております。

---

おまけ

横歩取り勇気流の勝率が高いとの話の裏に,勝っているのは佐々木勇気だけで他の棋士の勇気流はそれほど勝率が高いわけではないってネタがあります。(詳細未確認)

菅井新手についても誰かが真似したところで勝率に繋げるのは難しいように(素人目でも)思いますので,流行は(したら面白いけど)しないんじゃないかと・・・

個人的な将棋の話

個人的な将棋の話も書いてみよう。

ここ3年ほどNHKのトーナメントは録画して見てる程度の見る専門。

最近はちょっと将棋を話題に出すと藤井四段の方にネタが振られるが,個人的には菅井七段の王位挑戦が一番の話題。

古本だけど菅井ノートを入手したり,菅井七段の棋譜を並べたりする程度の応援団。

5筋突いた三間飛車はヤバいよね。タイトル取ったりしたら戦法として流行るんだろうか(笑)

 

思えば小学生くらいから駒の動かし方は覚えてたような気がするが,同級生レベルだと一応勝ち越していたくらいの棋力。どうしても勝てない友人がいた記憶はある。

高校・大学のときはたまにやっても同級生にすら勝った記憶がない。

只,大学の同期には「アマの段位は取れるんじゃない?」くらいの軽いアシライを受けたので彼らはどの程度の棋力だったんだろうかと今ながら思う。ちなみに麻雀でも負け越していた。

 

先日の藤井聡太林健二戦もちょっと見てたけど103手目は第一感で3五桂だった。

解説でも出なかったし,最善手じゃなかったみたいだけど。

そういえば,詰将棋とか次の一手問題とかそういうのを脳トレ的にやってた時期もあった気がする。トレーニングと言うか仕事前のウォーミングアップに近い感じで。数独ピクロスもね。

どうも将棋盤について静的な問題として取り組む癖がついているようだ。

 

技巧2の学習部調べ(学習局面生成)

初期局面生成で乱数を使うがprobabilityの重みがかかっている。

それ以後10ms程度の思考時間で局面を進めたものをランダムでサンプリングしている。

2,3日かかって30M局面程度しか集まらない。

 

apreyややねうら王の局面生成が速いのは,初期に定跡を使って

その後は固定depthで進めているからだろうか。(一部乱数)

こちらは一晩で100M局面くらいになる。

 

技巧の方も自己生成データのみで学習できるように少々改造してみたが,局面が悪いのか少ないのか強化とは程遠い結果しか得られていない。

オリジナルに対して7勝89敗4分程度

甘くはないな。

#出村さんこのルーチンでどんだけ絞ったんだろうかとの疑問。

 

局面データ形式に互換性持たせると面白いかなぁとか考えてる。

技巧2の対戦記録とかの雑記

自前での技巧学習データ対戦記録メモ

有用と言える成果もないので,さらすほどのことでもないが興味ある人用

#意外に見てる人いるみたいなんでw

 

4コアPCにて10秒将棋,定跡なし

 

params.binを更新したもの

記憶によると200戦程度で3割未満の勝率

まったく絞り足らない

 

probabilityの更新をしたもの

46勝42敗12分け(デスクトップ)

51勝41敗8分け(ノート)

引き分けは全て千日手

均すと勝ち越しではあるが,有意差があるとは言えない

 

バイナリ配布vsBash on Windowsでビルドしたもの

43勝38敗19分け(デスクトップ)

・引き分けは千日手15,持将棋4(遅いので256手規定入れた)

48勝32敗20分け(ノート)

・引き分けは千日手10,持将棋10

均すと勝ち越しであるが,有意差があるとは言えない

npsにもさほど差は感じられない

 

技巧思考ルーチン同士だと千日手が多くなる。

千日手回避をしてない模様。(要ソース確認)

 

ところで,floodgateが落ちてほぼ一カ月になる

復旧に数日かかるかもと言うツイート以来音沙汰がない

これはそのまま消えることになるんだろうか

 

そういえばwcsc27後にPonanza Chainerの中の人がfloodgateに

NN部分のやつを流してて,そのうち解説を出すとtwitterで言っていたがこれも

どうやら消えそうだ

こちらも結構期待していた人がいるみたいなので残念である

 

今頃気づいたんだが5月21日付(v4.61)でやねうら王の学習データが一件40byteになってた

処理が遅いので自前のshuffleルーチン(但し荒い)を作ったときに気づいた

シボレー(4.71)以降の人には関係ないだろう

 

ryzenで技巧の学習データ作成している。いつ終わるんだろうか。

---

8月31日追記

floodgateは復旧予定らしい。

約束を守らない人のように表現してしまった件,深くお詫びします。

 

技巧2の学習部調べ(中間報告)

技巧2の学習部にも興味ある人が増えているようで・・・

 

ゆるゆる進行中の私的な技巧2調べですが,

私用メモ程度でも誰かの役に立てばと思って公開しておきます。

 

技巧2

github.com

 

注意)技巧2以前のものはほとんど触っていないので比較などはしていません。

まず,公開されている実行ファイルでは学習ルーチンは無効化されているので自分で学習させるにはビルドする必要があります。Linux環境が必要になりますが,Windows10であればBash on Windowsでも対応可能です。

うちではBash on Windows(Ubuntu 16.04)環境下でmakeとg++をインストールすれば問題なく実行ファイルを作成できました。

 

棋譜ファイル

学習には 棋譜ファイルが必要です。ドキュメント上にはkifu.txtと書かれていますが,ソースを少し読めば分かるようにkifu_db.txtの誤りです。

また,このファイルのデータ形式はコメントにもあるのですが実際は何かのファイルから自動生成するのが適当ですので,うちではfloodgateのCSAファイル二年弱分から変換しました。変換ソフトはオープンソースのものを数バイト程度改造しましたのでgithubに置いておきます。

github.com

 

 以下は,技巧の学習オプションについて

--learn-progress

kifu_db.txtから51000データ読み込み,progress.binを学習する。(約3時間)

読み込む棋譜のうち1000データは検証用。

これは棋譜から局面の進行度を評価する際に使用する。

 

--learn

kifu_db.txtから31000データを読み込み,params.binを作成する。

ただし,title_matches_onlyとなっており順位戦とタイトル戦のみを扱うように厳しく選定されている。うちではこの行を削除してfloodgate棋譜で学習した。

4コアのマシンで40時間程度要した。

 
--learn-probability

kifu_db.txtから31000データを読み込み,probability.binを作成する。

何故かメモリ消費量が半端でなく多く,最大で90GB程度使用した模様。

うちでは最大64GBのメモリしかないためスワップしながら3日ほど要した。

メモリ消費量が少ない段階での進行見込みでは3時間程度とあったので,メモリが充分なマシンでは3時間程度で終わるのかもしれない。

 

--create-book

kifu_db.txtからtitle_matches_onlyの手を確認しながら定跡化する。

出力されるファイルはbook.bin。

ただし,技巧2のデフォルトはこれで作成されたものではなく「まふ定跡」

 

--generate-positions

教師局面を作成する。
出力ファイル名はteacher_positions.bin。局面数30M。(30,000,000)

一局面のデータは40byteで局面と指し手と評価値。
4コアのマシンで一週間強必要。

 

--generate-games

ロジスティック回帰学習用の教師局面を作成する。

出力ファイル名はteacher_games.bin。

ソースを読んだ感じで,3M試合をして10%局面サンプルをする模様。

実行時間は4コアのマシンで20000分(二週間強)との予測値

これはうちで完走してない。(できない)

 

--learn-with-rootstrap
--learn-with-regression

これらにおいてもkifu_db.txtを読み込んでいる様子。

teacher_positions.binやteacher_games.binは追加で必要となる。

params.binのみを更新する。

 

現状雑感

progress.binおよびprobability.binの学習は上記の一回だけ。

params.binは初期の絞りのみ実行。

progressファイルのみオリジナルから変更したものは特に強いとも弱いともない。

probabilityファイルのみ変更したものは当初オリジナルを上回る戦いを見せたが,有意差と言えるほど強くはなっていない。

params.binを変更したものはオリジナルから相当劣化した。オリジナル同等までもっていくためには恐らくルートストラップやロジスティック回帰を用いた追加絞りが相当必要なのではないかと思われる。

 

また,ソースを読む限り学習部は試行錯誤の跡があり,現状で完成されたものと言うイメージは皆無。効率化や高速化など手を加える余地が多い印象。

たとえば学習局面データのkifu_db.txtおよびteacher_positions.binやteacher_games.binは統一的に扱う方が望ましいように思う。また,より効率的な生成も可能ではと見込む。

 

最近話題のkkpとかkppとかいうやつ

オープンソースなので起こすまでもないんだが

python練習中のソースを一部晒しますね

import numpy as np
 
with open('KK_synthesized.bin', 'rb') as f:
kk = np.fromfile(f, dtype='int32').reshape(81, 81, 2)

with open('KKP_synthesized.bin', 'rb') as f:
kkp = np.fromfile(f, dtype='int32').reshape(81, 81, 1548, 2)

with open('KPP_synthesized.bin', 'rb') as f:
kpp = np.fromfile(f, dtype='int16').reshape(81, 1548, 1548, 2)

こいつらの演算は以下のようになります。

eval = e_mat # 駒得分
 
kkp_sum=[0,0]
for i in fv38f:
kkp_sum += kkp[k0][k1][i]

kpp_sum0=[0, 0]
kpp_sum1=[0, 0]
for i,j in itertools.combinations(fv38f, 2):
kpp_sum0 += kpp[k0][i][j]
for i,j in itertools.combinations(fv38e, 2):
kpp_sum1 += kpp[80-k1][i][j]
 
if turn == BLACK:
eval += (kk[k0][k1][0]+kk[k0][k1][1])/32
eval += (kkp_sum[0]+kkp_sum[1])/32
eval += (kpp_sum0[0]+kpp_sum0[1])/32
eval += (-kpp_sum1[0]+kpp_sum1[1])/32
else:
eval += (kk[k0][k1][0]-kk[k0][k1][1])/32
eval += (kkp_sum[0]-kkp_sum[1])/32
eval += (kpp_sum0[0]-kpp_sum0[1])/32
eval += (-kpp_sum1[0]-kpp_sum1[1])/32
 

 

 vscodeから貼ると間延びするみたい。

面倒だから放置する。

 

検算ツール:

局面の3駒関係

ソース管理の話

ある実装に苦労してる知人の話を聞いたが,
オープンソース界隈だと良い実装がひとつあると99.9%以上の人は
盲目的にそれをベースに使うだけで,ソースまで戻る人は少ない。
死蔵されるソースも多いし,有意義かどうかは微妙な面もある。
彼の努力が実るかどうかは正直疑わしい。
 
個人的には一昨年になるが,80年代から使われている秘伝のソース内に
比較的初歩的なバグを見つけた。フィードバックするにも管理されていないし
そもそもライセンス?って時代のものだ。
 
そして私は秘伝のソースと縁を切ることに決めた。
#縁が切れているとは言ってない
 
公開しても見る人のないソースはほぼ意味がない。
#ごくたまに中国や中東から面倒なメールを貰う程度