プロ棋士界の序列について

将棋のプロ棋士界では序列という考え方がある。

簡単にWebサイトの棋士一覧の順と考えていい。

1.タイトル保持者(その内タイトルにも順がある)

2.永世称号保持者

3.段位者(同段位では昇段が早いものが上位)

 

で,これが主に何に影響するのかというとイベント招致のギャラなどもあるが,対戦時の上座下座問題にもなる。

但し,プロ棋士界は柔軟なので若手のタイトルホルダーがベテラン棋士に上座を譲るような配慮は日常である。

振り駒では上位者側の歩を5枚使い,歩が多い場合に上位者が先手になる。(上座を譲った場合でも記録係は上位者を振り歩先とするのが原則のようだ)

 

例外は順位戦である。

順位戦では同級のものがリーグ戦を戦うが,この際の上座は順位上位者と決まっている。降格した名人はA級1位となるため常に上座である。

これをうっかり間違えた羽生先生(当時三冠か四冠)がベテラン棋士に陰口を叩かれた事件は結構有名になっている。年間の対局の大半がタイトル防衛戦で下座へ座る感覚がなかったのだろう。

 

ちょっとよく分からないのが前竜王という呼称があったとき,これはどういう扱いだったのだろうか。

それとは別に棋士番号というのがあり,これはプロ棋士になった順に数字が振られており引退したからと言って詰められるものではない。

こういうのも気にしてる人とそうでない人がいて温度感も様々なのであろう。

 

実は昨日羽生九段と谷川九段という永世称号保持者同士の対局があった。この両者が無冠で当たるのも実に珍しいことである。

上記2.の中でどう順位をつけるかってことだが,永世称号に関わらず取得日順だそうな。

ということで無事羽生九段が上座につくことになったそうである。

先に到着していた谷川九段が下座に座っていたってのが気配りなのだろうし,実に谷川九段っぽい気がする。

 

ややこしくて分からないなぁって人は棋士一覧の順位を見ると良い。

近頃は若いタイトル保持者も出るが失冠もするので序列の入れ替わりが激しい。

自動更新されているのかと思うが実に対応が早い。

 

www.shogi.or.jp

モバイルノートに1TBを

前回の続きです。

 

bleu48.hatenablog.com

 

65000円くらいのノートに2万円ほどでメモリ32GB搭載しました。

ところが,メモリが多くなればSSDにもディープスリープ用のエリアが確保され元々256GBしかないSSDの容量が激減です。

Type2242じゃ大容量は期待できないなぁと考えていたところ,以下の過激なBlogを発見しました。なんとType2280をネジ止めなしで換装だそうです。

 

blog.kaias1jp.com

 

実に過激ですねぇ。

ネジはないけど適当なテープで固定してみます。

f:id:the48:20190523181254p:plain

1TBのSSD

 

結果的に6万半ばのノートに1万円のメモリ2枚刺して13000円の1TBのSSDを刺したってわけです。

10万円未満で4コア8スレッド,メモリ32GB,SSD1TB(NVMe)ってどうでしょう。

 

Crucial SSD M.2 1000GB P1シリーズ Type2280 PCIe3.0x4 NVMe 5年保証 CT1000P1SSD8JP

Crucial SSD M.2 1000GB P1シリーズ Type2280 PCIe3.0x4 NVMe 5年保証 CT1000P1SSD8JP

 

 

WCSCの順位の決定について(ソルコフとか)

え~っと,同星で準優勝の件で特にどうこう言うわけじゃないですが,全然想定してなかったので感想戦です。

まだ,参加2回目なので予選で立ち話中に出てくるキーワードが全くよく分かってなかったんですね。そんなこと気にするより他に準備することがあるって感じでした。

 

コンピュータ将棋選手権ルール第22条

順位は、引き分けを 0.5 勝 0.5 敗と換算した上で、次の各号に掲げる順に適用して決定する。

  1. 勝数の多い者を上位とする。
  2. ソルコフ(すべての対戦相手の勝星の合計)の多い者を上位とする。
  3. SB(負かした相手の勝星の合計)の多い者を上位とする。
  4. ミディアム(負かした相手の勝星が最高と最低の2人を除いた相手の勝星の合計)の多いものを上位とする。
  5. 第一号から第四号までで同順位の者の間で行われた対戦について、DB(勝ち数-負け数)の多い者を上位とする。
  6. 2次予選については、2次予選シードを1次予選通過者より上位とする。
  7. 決勝については2次予選通過順位が上位の者を、2次予選については1次予選通過順位が上位の者を上位とする。
  8. シード順が上位の者を上位とする。

 

1,勝ち星はいいですね。

2,ソルコフってのは対戦相手の勝ち星の総和です。結果の勝ち負けは関係ないのでスイス式トーナメントでは下位の方が上位と当たるため優位な気がします。それ故,引き分けすると猛烈にポイントが溜まるってのが二次予選のQhapaqです。決勝では総当たりなので全員同点で無関係になります。

3,SBってのが負かした相手の勝ち星合計です。今回のような決勝では同星であるため負けた相手が下位の方が上に来ます。あまり理由が分からなかったのですが,ジャイアントキリングを評価するものだそうです。つまり,下位者が上位者を破った際に高評価するための指数です。今回のような上位者の差異を決める総当たりの決勝に向いているかどうかはよく分かりません。

4,ミディアムですがここまでくるとなんだかよく分かりません。最高と最低を除くのはラッキーパンチを外す的な意味でしょうか?

5,同星で勝ち数ー負け数を評価するということは引き分けの多い方が落ちるわけですね。普通ここまでに差がついているような気がするのですが・・・(これ,直接対決のポイントのみですね。)

6,シード者優先です。まぁ,対戦前順位という意味でしょう。

7,予選通過順位ですが綺麗な三つ巴でもない限りここまで来ることはないでしょう。

8,予選通過順位が同順はありえないのでこれは無効では?(コメント頂きました,一次予選では発生するそうです。例が昨年のCGPとひまわり)

 

まぁ,過去に何かしらあって定められたルールですね。

初戦に負けたり引き分けたりすると意外に楽に予選通過出来るとか話には聞いてましたがそういうケースもあるのかもしれません。

二次予選は下位(但し奇数位)で抜けた方が美味しいとか懇親会でそういう話もありました。

よく分からないところを教えてくれる方がいらっしゃれば是非お願いします。参考資料の提示で十分です。

 

関係ないですが,クジラちゃんとは午前中に当たる方がよいってのは事実ですね。

---

参考ページ

リーグ戦 - Wikipedia

スイス式トーナメント - Wikipedia

---

追記

以下のところで,スイス式トーナメントで2位を決めることが危険である議論が述べられていました。

決勝が総当たりなのはきっとそういった配慮なのでしょう。しらんけど。

スイス式トーナメント方式 - 1447141480 - したらば掲示板

---

追記2

320手延長より他にすることがあるだろうと私がかねてより提案していたのは持将棋引き分けより千日手引き分けの方がずっと多いはずだって点がひとつ。その際に指し直しが適切ではないかという提案がふたつ目。(理由はもちろん先手後手が公平でないと考えるため)

対戦数を先後2倍にすることや指し直しは時間の都合で出来ないとの回答でした。 

---

追記3

かずさんのコメントから参考リンクを足しておきます

直前企画: 世界コンピュータ将棋選手権の順位決定方式 | コンピュータ将棋協会blog

chainer 6.0.0のテスト

chainer 6.0.0が正式にリリースされた

chainer.org

 

ChainerXがβ版じゃなく使えることになる。

早速入れてみようと

pip install chainer

してみたのだが反応がないので

chainer install chainer==6.0.0

 で入ったみたい。こういうの若干遅延でもあるのかしら。

 

chainerは入って普通に使えるけど,目玉機能のchainerxは使えないらしい。

β版のドキュメントには自前ビルドしないといけない風なことが書かれているが正式リリースされても同じなんだろうか。

というか,そもそもLinux環境しか動作保証されてないってこともドキュメントに見つけて,現在あああって感じです。でも,きっとそのうち動くと思う。 

将棋局面評価における「蒸留」の有用性について

以前,ポエムとして「蒸留」というのがよくわからないと書いた。

 

bleu48.hatenablog.com

  

実はこの実験をやってた。

題材は既にfloodgateで対戦中のgo_test02やgo_test03である。

前回の記事では色々改良したけど,そもそも探索が遅いので強くなってない。7手詰めの詰めろが読めずに頓死とかそういう話を書いてあった。

逆に考えてみよう。7手も読めてないのにそれより深く探索できている相手に勝ったりしている理由はなんだろう。

 

評価関数しかない。これが今回の蒸留の成果だ。

 

評価関数とは特定の局面での評価を決める関数である。入力は局面情報なのでどの升にどの駒があるとかそういった情報である。

蒸留とはその特定条件の組み合わせをピックアップして,近似関数を作る作業と言っていいだろう。多項式近似関数をイメージすれば概ね間違いないが実はちょっと大変。

駒の数は40だが,組み合わせを考えると相当数になる。手番,成,升と掛け合わせた場合の数は千を超える。三駒関係と言って多く利用されたモデルは三駒の組み合わせを入力ににした関数であり,入力パラメータは1000万近くになる。

同形の数式であればすべてのパラメータを同じにすればいいのであるが,これはコピーである。異形の数式で多くの入力パラメータに対して近似解を得られるようにするのが蒸留と言っていいだろう。機械学習における任意の教師データを作り出せる状態にあるということだ。(そもそも私はこれが理由で機械学習の習作としてコンピュータ将棋を始めたのだが・・・)

 

完成すると事実同じような性能が得られる。ただし,計算時間が同じようなものであればだ。

逆に多少荒い近似でも計算時間が速いものであれば結果強くなる可能性もある。この辺が非常に難しいところで今のコンピュータ将棋の争点でもある。

 

ってここまで書いて評価関数の数式に新しいアイデアが浮かんだので下書き保存しておく。

----

と,選手権よりずっと前に書いてたものがあったのでこの辺で晒しておく。 

結果的に選手権ではNNUE型が多かったのだが,実のところ相当数の試行の結果である。

wcsc29でのMulti Ponder類似技術

Multi Ponderで第五回電王トーナメント準優勝,WCSC28優勝と稼いできた感があります。アルゴリズムや実験結果等は公表してるので類似実装が出てくるだろうとの予測はありました。確認用にメモっておきます。

 

1.やねうら王

類似実装を行いテスト対局を行っていたようです。千日手対策等の弱点など把握されていたようで実に素晴らしい。Ponderヒット率があまり有効でなかったそうでWCSC29本戦では使用してないとのことでした。

 

2.狸王

Multi Ponder的要素を含むクラスタを構成されていたようです。情報公開されているようですので時間があるときに読んでみたいと思います。

 

3. Qhapaq di molto

qhapaq.hatenablog.com

発展形であると述べられています。ちょっと私が想像したものと違いますが,自分のネタの改造版がでるのも楽しいですね。計上されているヒット率が低いのが気になります。

 

4.名人コブラ

実装されておりました。全スレッドの探索情報を表示されていたため現地ではものすごい勢いで将棋所の下画面がスクロールしておりました。ちなみに,我々はヒットするまでは全部非表示でした。コブラさんもヒット率が低いとコメントされておりました。

 

5.dlshogi

こちらはクラスタ型のMulti Ponderでなないのですが,MCTSの特徴を生かして同様の概念を確率的に実装されたようです。多少なりとも思想に影響を及ぼしているようです。山岡さんのことですから,効果のほどは実験されているんだと信じてます。

 

で,結構面白いのがdlshogiの山岡さん以外はアピール文書等で一切事前開示されていなかった点ですね。上位チームには勝ち負けの争点になる意識があったということでしょうか。結果的にほぼ迎撃できたので個人的には満足しております。

Ponderヒット率9割を実験的に示したものをゲーム情報学研究会で公表しているのですが,参照されていない方々がヒット率が上がらないとコメントしていた点がちょっと残念でした。おそらく会員外の方は無償で見れない期間があるとかそういうことです。

検証用のバイナリファイルは昨年の選手権前に公表しているのでお試しください。

 

github.com

 

随分前から公表しているのですが,MultiPVを前提とした評価関数のためかどうか対戦レーティングが低くダウンロード数もごく僅かです。いちど検討エンジンとしてMultiPVを前提に使用いただければ幸いです。

---

追記:

上記のリストに漏れ等があれば御報告頂ければ幸いです。すぐに修正させて頂きます。

NNUE型の評価関数のテスト

コンピュータ将棋界隈ではKPPT型などの三駒関係を元にした評価関数の時代が長く続いていおりました。その関係の試行錯誤や分析の後,多くの知見が得られました。

私も取り組み始めた二年前の当初から様々な評価関数型を試作し,ニューラルネットワーク型も複数実装しテストを繰り返しておりました。電王トーナメントの懇親会でNN型の評価関数をαβ探索に使うネタ的に振ってみたのですがあまりリアクションがなかったのを覚えております。

今年の選手権ではNNUE型としてニューラルネットワーク型の評価関数が上位陣で使われており共通の話題として情報交換が行われました。個人的に驚いたのは計算速度で,SIMD演算を上手に使うことでこれほど演算速度が出るとは驚愕しました。

しかしながら,これらで何が行われているか全く分からない層が多いようです。

 

まぁ,前置きはその辺にして評価関数をネタにしたい人が多いようなので,テスト用に書いたスクリプトを置いておくのでいいように改造なりして使ってください。

https://github.com/bleu48/shogi-eval

 

探索部抜きなので局面の静的な評価値の計算だけです。

他言語にも簡単に移せると思いますし,構造が分かるとうちでやってるような独自の学習部作成なども捗るのじゃないかと思っております。