最強ソフトの言うことの真逆をやると最弱になるのか検証してみた

今や将棋研究のお供の定番である将棋ソフトですが、その裏で初心者の練習相手としても定番になりつつあるようです。駒の動かし方を覚えた人が次にやるべきなのが数練習をすることであり、数をこなす為のモチベーションを維持する際に、無限に遊んでくれてしかも負けてくれる将棋ソフトにニーズがあるようです。

 

どのぐらいニーズがあるかというと、絶対王者のponanzaさえも弱いソフトを作ることに一石投じる程度にはニーズがあるようです。

将棋ウォーズにある史上最強に弱いPonanzaの話|山本 一成@Ponanza|note

 

曰く、クッソ強いponanzaの評価値を反転すればクッソ弱いソフトが出来る。

成る程。ponanzaが全力で悪くなる局面を探してくれるなら、確かに弱くなりそうだ。しかし私はこの記事を見て「ソフト同士が負けることに全力を尽くした場合、果たしてどのくらいまで弱くなるのか」が気になりました。

ここでは、ponanzaに倣い(?)評価値を反転させたソフトの棋風とその弱さについて考察していきたいと思います。

 

 

【ゲームのルール】

意図的に負けようとするとなると、初手投了や非合法手、王手放置などがでてきてしまいますが、此処では非合法手は禁止とします。また、これはやねうら王の評価値を反転させるだけという手抜きhackの副作用なのですが【評価値の詰みは反転していません】即ち、評価値の低い手を探す一方で、意図的に詰みがある局面には持って行こうとしないということです。

この辺はゲームのルールとして議論の余地がありますが、詰みがないと言う縛りでできるだけ悪い局面を探すのは絵的に面白いし、なにより改造が怠いのでこのまま行きます。

 

【△aperypaq on やねうら王 vs ▲私】

f:id:qhapaq:20180115214054p:plain

終局図はこちらです(駒が往復するようになったので打ち切った)。青線が終局後に通常のaperypaqで棋譜を検討した場合の評価値です。

 

互いに悪い手を指すわけですから、評価値は手毎に往復することになります。中盤にかけて私のほうがちょっと良く(負けようとしているのだから、相手よしが自分よしだ)なっていますが、コンピュータの流石の終盤力で最後は私の判定負けに近い評価値になっています。

 

【評価値反転ソフトの棋風(初手20手)】
   1 7六歩(77)        ( 0:02/00:00:02)
   2 4四歩(43)        ( 0:01/00:00:01)
   3 5五角(88)        ( 0:04/00:00:06)
   4 1二香(11)        ( 0:01/00:00:02)
   5 6四角(55)        ( 0:02/00:00:08)
   6 7四歩(73)        ( 0:01/00:00:03)
   7 4六歩(47)        ( 0:07/00:00:15)
   8 2四歩(23)        ( 0:01/00:00:04)
   9 4五歩(46)        ( 0:05/00:00:20)
  10 4二玉(51)        ( 0:01/00:00:05)
  11 4八飛(28)        ( 0:01/00:00:21)
  12 4三玉(42)        ( 0:01/00:00:06)
  13 4六飛(48)        ( 0:02/00:00:23)
  14 4二銀(31)        ( 0:01/00:00:07)

  15 1六飛(46)        ( 0:01/00:00:24)
  16 5一銀(42)        ( 0:01/00:00:08)
  17 1四飛(16)        ( 0:03/00:00:27)
  18 3四玉(43)        ( 0:01/00:00:09)
  19 3六歩(37)        ( 0:11/00:00:38)
  20 4二金(41)        ( 0:01/00:00:10)
 

みたところ、玉を前に繰り出す棋風のようです。玉を相手の攻め駒に近づけ、少しでも駒が入ったら寄せられてしまうようにしているのでしょう。途中取らせるつもりで跳ねた桂馬の行き先に銀と飛車を配置されたりと「あ、コヤツ出来る」的な技を幾つかやられましたが、私の棋力があんまり高くないこともあり、ふと気付けば駒組が相手のほうが酷いという負け筋(勝ち筋)に入ってしまいました。

 

【謎の頂上決戦】

さて、私ぐらいの棋力では負けることが出来ないことが解ったので、此処からはソフト同士に対局してもらうことにします。お相手はやねうら王の教師110億のうち30億ちょいを食わせたもの(yanezero。私が手元で用意した)です。

 

f:id:qhapaq:20180115221257p:plain

 

大方の予想(?)に反し、通常ではaperypaqよりレートが200以上低い後手番のyanezeroが勝ちました。本局を振り返ると60手目と200手目あたりにドラマがあったようです。

f:id:qhapaq:20180115221858p:plain

59手目26玉で先手のaperypaq側が大幅な有利を獲得します。

というのも、先手玉によって後手玉の退路が封鎖されたことで後手玉に詰み筋が生じつつあり、かつ、先手玉が後手玉側に居るため、下手に受けようとすると先手玉が寄ってしまうからです。13桂不成ではなく成にしたのはなぜかと思いましたが、王手をすることで無理やり駒を押し付けるのがコンピュータ流の負け方のようです。

後手は泣く泣く13香と成桂を取りますが、ここから暫くは後手が苦しい(通常の評価値で言えば後手有利な)局面が続きます。

 

f:id:qhapaq:20180115222738p:plain

 

しかし、yanezero不利で迎えた192手目でドラマを迎えます。ここでyanezeroが取った手は金を取る75歩

そして78玉に対し、67金打、同玉、66歩、同玉、46飛車、56金打、同飛、同玉で後手の攻守の要であった飛車を押し付けることに成功します。すごい!!

 

感想戦

評価値逆転将棋ソフトの対局は自玉を危険な場所に置きながら相手玉を詰まない程度に追い込んで攻め駒を押し付けることで不利を確保するという見ていて地味にスリリングなものでありました。

意味があるかは解りませんが、皆様も暇つぶしにどうでしょう?

各種将棋ソフト間での教師データの変換ツールの開発

【もっと良いコンバータを作ってQhapaqの侵略を阻止しよう】

このままだとデータのAperyとYaneuraOuを強くする変換器、略してKizunaAy converter(キズナアィコンバータ)が業界標準になってしまいます。助けて!

 

Aperyとやねうら王の間で未だに教師データがやり取りできない(個人的な開発はされているのかも知れないですが、基本機能として実装されていない)のを受けて、変換ツールを開発してみました。

 

Aperyとやねうら王の間では棋譜のHuffman符号化のルールが違ったり、データの形式が微妙に違ったり(例、勝ち負けに関する変数の値のとり方、手数の情報を保持するかetc)すること、今後もこうした仕様変更がありうることを受けて、一旦sfenベースのテキストファイルにすることにしました。

 

例:

sfen 6s1l/3p1sk2/5p1p1/p2+Bp1p1p/2p4N1/P5LPP/3GPPP2/1+p5K1/L4+r1NL b R2N2Pb3g2sp 0
move 6d5d
score -1917
ply 110
result -1
e
sfen 6s1l/3p1sk2/5p1p1/p2+Bp1p1p/2p4N1/P5LPP/3GPPP2/1+p5K1/L+r3S1NL w R2N2Pb3gsp 0
move 8i4i
score 2717
ply 109
result 1
e

(以下、続く)

 

 

sfen hoge  ...... 局面をhogeにする

move hoge ...... その局面でのbestmoveを指定する

score hoge ...... その局面での評価値

ply hoge ..... その局面での手数(Aperyでは無視される)

result hoge ..... 最終的な結果(2017.11のやねうら王を標準としてる。手番側が勝っていれば1、負けていれば-1、引き分けなら0)

e ...... 教師データ一局面分が終了する

 

【apery側での利用】

conv_teacher_sfen teacher output

teacherという名前のApery用の教師データをoutputという名前のsfenベースのテキストに変換します

conv_teacher_bin sfenfile output

sfenfileという名前のsfenベースのテキストをApery用の教師データに変換します

 

【やねうら王側での利用】

learn convert_plain output_file_name output input1 input2 ...

input1,input2 ...という名前のやねうら王用の教師データをoutputという名前のsfenベースのテキストに変換します

 learn convert_bin output_file_name output input1 input2 ...

input1,input2 ...という名前のsfenベースのテキストファイルをoutputという名前のやねうら王用の教師データに変換します。

 

【例:やねうら王のdepth 10の教師データをaperyに食わせたい】

教師データをDLする(ファイル名をshuffled_sfen.binとする)

./YaneuraOu-by-gcc

learn convert_plain output_file_name yane_sfen.txt shuffled_sfen.bin

 

./apery

conv_teacher_bin yane_sfen.txt shuffled_sfen_apery.bin

use_teacher shuffled_sfen_apery.bin 8

 

注:use_teacherの仕様はaperyのドキュメントなどを参照

 

【その他注意】

この形式でやねうら王の教師データを変換した場合、ファイルサイズは約3倍になるようです。それなりに鬱陶しいですがギリギリ我慢できるレベルかなとも思います。ストレージ圧迫が気になるなら、ファイルを分割して、変換と削除を繰り返しても良いでしょう。

 

Aperyとやねうら王のHuffman符号の仕様の差を読み込み、直接変換したほうが効率は良いのでしょうけど、今後も両者が同じ仕様で教師データを作り続けるかは怪しく、また、バグ取りが面倒だったのでこの形式でリリース(もとい、プルリク)します。隗より始めよ...ですね。

apery-qhapaq評価関数(apery sdt5比でR+50くらい?)を公開します

正式名称はapery-qhapaq評価関数。略すならaperypaqと書いて「えいぷりぱーく」または「あぺりぱーく」と読みます。

 

【DLはこちらからどうぞ】

Release qhapaq学習機によるコラボ関数群 · qhapaq-49/qhapaq-bin · GitHub

# aperypaq.7zが今回の関数です。

 

【強さ】

第5回将棋電王トーナメント終了後に公開されたaperyの評価関数(探索部は双方ともやねうら王を利用)に対して、8スレ1秒対局で
・375-37-266 定跡off(勝率58%)
・221-32-162 たぬき互角局面集8手目(勝率57%)
となっており、推定レートはapery-sdt5比で+50程度です。長い持ち時間での強さは解りません。寧ろ教えてください。

 

【精製方法】

sdt5でQhapaq_conflatedが用いた学習をapery-sdt5に対して適用したものです。独自学習手法を持っているとこういう時に便利ですので、皆様も是非やりましょう。

 

【ご利用に際して】

本評価関数はaperyに依存しています。
ご利用の際は、aperyの使用条件を満たすようにお願いいたします。

 

【おまけ(チラシの裏):開発者的に気になること】

evalresolveすると解りますが、差分がメッチャ小さいです。0.1%ぐらいしか差がないみたいです。こんなに小さな差でレート差がでる(少なくとも、短い時間では有意に強くなる)となると、KPPTの値の大半はゴミなんじゃないかなと思います。

 

Qhapaqの学習方法は互角局面集での勝率を最適化する作りなのに、定跡offの方がほんのり強くなっている気もします。KPPTの汎化性能ってまだまだ上限からは遠いのかも知れません。

Qhapaq_conflatedの評価関数と定跡を公開しました

長らくおまたせ(?)しましたが、Qhapaq_conflatedの評価関数を公開しました。河童パーク定跡も同梱してあります。

 

DLは此方からどうぞ

Release qhapaqの評価関数群 · qhapaq-49/qhapaq-bin · GitHub

 

評価関数の強さについて

Qhapaq_conflatedは2秒(4スレ、8スレ、12スレ)対局、かつ、nodchipさん提供の互角局面集の8手目、または16手目の局面を初期局面とした上での勝率を最適化しています。定跡offに比べると

【メリット】

・互角局面集の方が局面が広い(オールラウンダーになる)

・広い局面で強いほうが検討に用いる際に便利

・評価関数の序盤の穴を突く類の過学習を避けやすい(未知の評価関数に強い?)

【デメリット】

・普段なら指されない戦型に特化してる可能性がある

・開始局面の時点で形勢が傾いているものも多くレートが信用しがたい

 

といった違いがあると思います。あまり対局数は稼げてないですが、elmo比で勝率73%程度、tamore相手に勝率60%程度のようです。

 

楽しんでいただければ幸いです。

第五回将棋電王トーナメントのお礼と本大会でのQhapaqの戦略

第五回将棋電王トーナメントを視聴してくださった皆様、並びに、大会に参加した開発者の皆様にお礼申し上げます。

Qhapaq_conflatedは並み居る強豪を圧倒的幸運(とひと握りの努力)で倒し、5位入賞という大変名誉な結果を残すことが出来ました。

 

本体のうpの遅延ですが、大会実況と大会前後の情報戦で自宅の貧弱ネットワークが死に、有給を使いすぎたことに依る仕事のしわ寄せでネット環境(と書いて無料wifi付きの吉野家)にいくタイミングがないので本当に申し訳ないですがもう暫くお待ちください。

 

以下、御礼に組み合わせて大会中Qhapaqが考えていたことを雑に書き下していきます。

 

・四駒、爆死するんじゃね?

KPPTの時代は終わりだ、と開発者たちが圧倒的開発力を見せる中で、Qhapaqは四駒爆死読みでほぼ全てのリソースをKPPTにつぎ込んでいました。科学者の癖に。

理由としては学習リソースが確保できる気がしなかったのと、ponanza_chainerレベルの化物がNNで成し遂げたレートが2000程度で、depth 1のelmo搭載型やねうら王がレート1000前後は行く(技巧depth1=700から推定)ことを加味すると、四駒の表現力ボーナスは大したことがないと睨んでいたからです。

後出しジャンケンが半端ないですが、一応この読みが当たったお陰で、リソース差の壁をほんの少し埋めることが出来ました。

 

・時間攻めと河童パーク定跡

timemanに対する効果の測定は困難です。ponderを加味しなければならないため、レート測定が大変面倒なことになります。ただ、私自身はtimemanは投資に値するものだと思っていました。

wcscの時に、対戦回数が少ない(100回も戦ってない) and 評価関数が同じなため持ち時間差やponderの差が響きやすいとは言え、定跡+timemanを搭載したqhapaqは搭載していないqhapaqに7割弱勝っていた(定跡搭載vs定跡offの持ち時間一定対局は6割弱)ので、今回も時間攻めによる暗殺をやる気満々でした。

今回は定跡狙撃よりも時間攻めに重きをおき、評価値が悪くない、定跡に当たりにくそうな展開として、真やねうら王が愛顧していた38銀型(後手は62銀型)を河童パーク定跡とし、twitter上でリソースを集りながら作成を急ぎました。

 

サイリウムという名の盤外戦

設営日に当日は千駄ヶ谷エレジーがライブで行われるということを知り、ぽんぽこ開発者の野田さんと画策してサイリウムを振ることにしました。以下、私サイドでの感想戦

 

私(ライブとなるとヲタ芸が欲しいな。しかし、このチェックシャツばかりの開発者たちにガチのヲタ芸は難しそうだし、装置を壊したりするとアレだ)

私(ええい、面倒だから野田さんに無茶振りしよう)

私「というわけで、なにかヲタ芸挟むと面白いと思うんですが、なんか良いヲタ芸ないっすかね?」

野田さん「(何かを閃いた様な顔をしながら)それだ、サイリウムを振りましょう」

私(あ、こいつ課金勢だ)

野田さん「2局やるなら2色分、参加者全員に配るのです」

私(あ、こいつガチ課金勢だ)

私(今更振り上げた拳は引けないしな)「いいでしょう、料金は現状では折半として、入賞したら賞金で補填するってのはどうです?」

野田さん「では、それで」

チームメイトのItoさん「え、なに、悪ふざけするならカンパするよ?」

私(あ、こいつも悪乗り勢だ...)

----

2日目

私「というわけで、サイリウムは私とたぬきさんの折半なのですよ。賞金が出ればそれから補填しますが」

shotgunの芝さん「むむ、それなら。仮にお二人が賞金とれずに、うちが取れたら私がカンパしましょう!」

私(あ、この人もガチ勢だ)

 

そんなこんなで多くの人に支えられたサイリウムですが、結局両方とも入賞したお陰でその代金は私と野田さんで折半となりました。

 

# この辺の盤外戦は野田さんのブログ第5回電王トーナメント参加記録 - nodchipのブログを読むと一層楽しめるかも知れません。

 

・マッチングミス

1試合目を勝っていたのに負けにされてしまった関係で、2戦目のマッチングがずれてしまい、計らずもソルコフを損する展開になってしまいました。しかし蓋を開ければQhapaqが最初の2戦で戦った相手は大健闘をしてくれ、ソルコフが増えた結果Qhapaqは不幸にも黒塗りの高級山(aperyにponanzaが鎮座する超厳しい山。師匠曰く、決勝トーナメントの強制収容所)に送られてしまいました。損した言ってサーセン

 

・河童パークは爆死したのか?

予選リーグの最後の3局、Qhapaqは後手を引き続けた上に、33金(41銀、32金の状態で角を33にあがり同角成、同金となった展開)戦法を繰り返し、一度も良くなることなきまま敗れ続けました。これはQhapaqの評価関数の脆弱性(Qhapaqはそもそも33角成をあまり良い手と思っていない)に起因するものでした。

予選当日、私はこの戦略を酷く後悔していましたが、よくよく考えると読み太やnozomi相手には後手を引きながら上手く戦えています。

河童パークの脆弱性は先手が純粋に飛車角先を伸ばし続けた時(定跡offでやりやすい手)に起こることですが、もしかしたら、これまでの定跡狙撃合戦の影響で読み太やnozomiは急過ぎる戦いを仕掛けないよう(単純に飛車角の歩を伸ばすことを避けるよう)に調整していたのかも知れません。

即ち、定跡読み定跡としては機能していたとも言えるのです。

 

・1日目夜の攻防

1日目終了時点で2日目の山のどうしようもない手強さにsan値がダダ下がりでした。しかし、順位の期待値を上げるべく夜を削って策を練りました。まずはponanza対策を諦めました。評価関数、探索の双方で負けている可能性が高かったからです。ponanzaは定跡を使ってこないので、そこ狙撃できればチャンスはありますが、それを用意する時間もありませんでした。

そして、相手をaperyに絞り、aperyの弱点となりうる部分を列挙しました

・やねうら王の方が1日目時点では探索部が強そう

・時間配分はワンチャンスある

・nozomiとのテスト対局での頓死など逆転負けをすることがある

・定跡はあまり積んできてなさそう

以上を踏まえ、探索の差で稼げる小さな利益を積み重ねること、一局面の読みの精度の差で取り返しのつかない展開になることを避けることを目指しました。具体的には

・玉の危険度が絡みやすい横歩

・角の睨み合いが続く角換わり

・決着までが長引きやすい相掛かり

を狙いました。この判断には大昔に千田先生が書かれていた記事を参考にしました。具体的には、wcsc27の定跡を12手だけ使う(評価関数の質が変わった手前、狙撃は狙えないと思った)ことにしました。

 

・2日目は只管祈る

1時間対局でのtimemanをテストするのはほぼ不可能なので、2日目は只管祈っていました。平岡さんに「強くならない独自性は独自性じゃないという風潮は嫌ですが、自分についてはライブラリで楽してる以上、独自性に強さを求めていきたいし、元のライブラリより強くならないなら出ないという心つもりでやってます」とイキリ発言をする以外は大体祈ってました。

2日目も1日目同様に、兎に角後手ばかり引きましたが、aperyを倒し、ponanzaに対しても一瞬だけ形勢を取り戻し、やねうら王を倒しと謎の躍進を見せました。定跡をしっかり用意してるであろうやねうら王に横歩の入り口で定跡を切らす真似をするのは死ぬほど怖かったですが、Qhapaqが飛車を変な場所に動かしたお陰で早い段階で定跡を外れてくれた(これもよもしたら脆弱性なんじゃ)ため、無事に時間攻めをすることが出来ました。

 

・振り返ると振り駒運も悪くなかった

5位決定戦がelmoと聞いた時は「apery、ponanza、やねうら王、elmoって、参加ソフトのレートを上から4つ並べたのとほぼ同じじゃね」と思うと同時に「此処だけはなんとしても先手を引きたい」と考えていました。というのも、elmoもまた定跡巧者であり、先手で此方を狙撃できる定跡を沢山持っていると考えられたからです。昨日の戦いから後手パーク定跡は通用しないし、wcscの後手定跡で横歩にしてしまったら、そこから一方的に時間を削られかねなかったのです。

elmoは兎に角当たりたくない相手でしたが、同時に当たる価値がある相手でもあります。というのも、最終試合ならネタばらしをしても次の対局で対策されることがないので、ネタばらしをし放題だからです。

 

私「tkzwさーん、timemanどうしました?」

瀧澤さん「slowmoverを80 90にしました。そちらは?」(瀧澤さんより訂正いただきましたthx)

私「MoveHorizonを128にしてslowmoverは110にしてます」

 

インタビューなどで偉そうにいろいろ語りましたが、実はqhapaqのtimemanはやねうら王に比べ2バイトしか差がありません。方方の理論研究から、optimum timeを一定に保ちながら、150手前後で時間を使い切るようにするのがベストだと導出していたからです(この2バイトの改造で、なぜ上記の理想的状態に持ち込めるかの説明はまた今度...の予定)

 

2バイトで独自性とはこれ如何にですが、導出には20年近く蓄え続けた数理パワーと机の前での数十分の悶絶が伴っていますので許してください。保証は出来ないけど、少し強くなってると期待してます(強くなってなくても、他に強くなった部分はあるし、勝てたからいいんだよ!

 

・狼ヘッド

狼ヘッドはsdt4でたぬきのきぐるみを着た変な人を倒すために、ドンキのハロウィンセールの売れ残りから買った獲物なのですが、着けてると色々と縁起が良いのと、対局開始と終局時にこれを装備して挨拶してたことから、正装=狼ヘッドという図式が成り立ってしまったので、定番化してしまいそうです。

喋るときに不便だし、全く私の顔が残らないのも癪なので、早く色褪せるとか穴空くとかしないかなと思いつつ、ちょっと保存状態の悪そうな棚に閉まってあります。

 

・入賞スピーチの焼き直し

ライブラリ勢の活躍やponanzaの引退のお陰でsdtのゲームバランスに疑問の声が上がるのも然るべきことだと思います。また、Yorkieの敗退やマッチングミスなど、運営に対する不満もゼロではないかも知れません。私自身は、ライブラリ勢が嫌いなら嫌いで良いと考えています。ただ、ライブラリ祭りが嫌いだからとsdtを観るのをやめてしまう前に、それを声に出して欲しいとお願いしたいです。sdtは見てくれる人があってのイベントであり、見てくれる人のためにルールが組まれます。皆様の声にはsdtを作る力があるし、sdtが続くことは、コンピュータ将棋の発展にも重要だと信じています。

 

今後共、Qhapaq。いや、コンピュータ将棋をよろしくお願いします。

(棋力)ゼロから始める将棋ソフトを使った戦型探索(解説編、居飛車編)

2017年の升田賞は千田翔太六段が受賞しました。

将棋ファンには今更ではありますが、千田先生はコンピュータ将棋を用いた将棋研究の第一人者でもあります。受賞の原動力となった角換わり腰掛け銀4二玉・6二金・8一飛型は、2015年頃からコンピュータ同士の対戦で多用される(プロの棋譜でも65歩型の持久戦では見られたのですが、今ほどメジャーな形として扱われていなかった)ようになった戦型です。ソフトの棋譜から先見性を見出し、実戦で活用し一つの技術に昇華させるのは並大抵ことではなく、千田先生の代わりとなる人はそう居ないことは疑う余地はないです。

のですが......将棋ソフトを最も深く理解しているであろう将棋ソフト開発者勢としては

狙ってみたい、二匹目のどぜうを!!

と思ったりもするわけです。

とはいえ、今の時代、棋譜を並べてソフトで点数や指し手を解析するような研究は将棋ガチ勢の大半がやっていることでしょう。そこで、開発者ならではの技として、棋譜ではなく、評価関数自体を可視化することによる戦型探索に挑戦してみることにします。

 

【そもそも、4二玉・6二金・8一飛型をソフトはどう思ってるの?】

まずは予備実験として、msd賞受賞作品である4二玉・6二金・8一飛を解析してみます。現在のソフトの主流である、3駒系の評価関数では、玉の位置と駒二つの並びに点数をつけることで盤面の価値を測定しています。4二玉・6二金・8一飛の並びは玉、駒、駒の3つから成り立っているため、駒の並びそのものに点数が突いているはずです。

というわけで、elmo+100程度のレートを持つという評価関数を用いて、4二玉・6二金・8一飛の駒の並びの点数を求めてみましょう。

結果:32点

金底の歩の点数が60点前後であることから、極めて雑な(駒の並びの良さが評価値に比例する、他の駒との相互作用を無視する)近似をすれば、この構えは、将棋入門テキストに必ず含まれる超良形の半分くらいの価値があることになります。

上述の近似だけだと、少々説得力に欠けるので、比較実験として、昔の評価関数でも同じ解析を行ってみます。

2016年8月時点でのaperyの評価関数では28点、2016年6月時点でのqhapaq(大樹の枝野評価関数とほぼ同じレート)では8点となりました。2015年の電王トーナメントでのponanzaあたりから、4二玉・6二金・8一飛が多用され始めたことと(一応)一貫性が取れており、3駒(KPP)の高い形を新戦型として模索するという方法が(希望的観測では)可能と言えそうです。

 

【レッツ、評価値の高い駒の並びを探してmsd賞を狙おう】

というわけで、最新鋭のqhapaqの評価関数(開発者の意地で強いと言われる某評価関数より強いのを用意したはず)を用いて4二玉・6二金・8一飛並に点数の高い3駒の並びを模索し、千田先生の二匹目どじょうを目指しに行きたいと思います。

88や68の玉を相手にKPPの値を取得、ランキングにしていきます。序盤戦略ということで駒の位置を4段目以下とします。更に、KPPに相手の駒を含むものも加味してしまうと、29の相手の龍、39の金と相手の大駒を取れる形ばかりが出てきて目ムワなので、KPPの構成要素を自分の駒に固定します。

..........出てこない。4二玉・6二金・8一飛に匹敵する高得点の並びがっ!

 

32点以上の価値を持つ要素自体は沢山あります。金底の歩を始めとした、終盤の受けの手筋や馬や龍を使った受けは32点以上の価値を生み出しています。しかし、それは序盤戦術ではありません。

それならば、と、玉の位置69に変えて検索。すると......

 

おおっ、玉の位置が69、金の位置を59としたときのKPPには32点以上の並びがあるではないかっ!

このような書き方をすると、「点数が高い駒の並びから戦型を探すのはわかるけど、それなら棋譜を見て判断するのと差がないんじゃね?」と思われるかも知れません。

しかし、それは違います。69玉周りの囲いの点数が高くても、elmo+R100クラスのソフトは(私が知る限りでは)以下のような手はほぼ指しません。

f:id:qhapaq:20171005003626p:plain

(初手から、26歩、84歩、25歩、85歩、78金、32金、69玉)

この局面の評価値は-50〜0程度で先手が悪いという判断です。コンピュータの推奨手は38銀や24歩であり、何れも+50ちょいの評価値が出るため、並列化などで評価値にブレが出るとは言え、候補には上がってくれないのです。

しかし、この玉形の価値は戦いが進むことで発揮されます。69玉型は金駒をよせることで高い守備力を発揮できるので、この時点での評価値が悪くても将来性はあるのです。

ここから金を59、銀を48に動かし、必要に応じて48の銀を繰り出したり、79の銀を68に動かしたり......

 

さて、将棋ファンの方は即座にツッコミを入れられることでしょう。それ、中原囲いじゃねと

 

そのとおりです。数理パワーがあっても、棋力が足りないとこの手の罠に引っかかります。(なお、私は気づくのに数時間かかりました

 

さて、残念ながら中原囲いを使う作戦は既存戦型を大きく上回る勝率は達成できなかったようです(勝率は大体50%前後。先手のアドを加味するとやや悪い)。ただそれでも、上記局面から展開される棋譜はなかなかに面白く有意義なものだったと思いました。

 

・例:中原囲いからの浮き飛車

f:id:qhapaq:20171005005322p:plain

(初手から、26歩、84歩、25歩、85歩、78金、32金、69玉、86歩、同歩、同飛、87歩打、84飛、48銀、72銀、76歩、42玉、36歩、74歩、35歩、75歩、同歩、73銀、59金、14歩、26飛、64銀)

この局面での評価値はほぼプラスマイナス0。ここから飛車先を切ってから角交換をし、桂馬と角で33の地点に総攻撃を仕掛けて先手が優勢となりました。

 

この他にも駒組が飽和してから、銀を68、角を79に引いて嬉野流に組み替えるなど面白い棋譜が量産されるので、戦型マニアのフレンズは試してみては如何でしょう。もしかしたら、新しい戦型が見つかるかも知れません。

 

【まとめ 棋力は必要だった】

msd賞を狙おうとかいいながら、思いっきり過去のmsd賞受賞作品を再開発してしまいました。やはり戦型の大半は賢人たちによって試されているというわけです。

しかし、「ソフトは指さないけど実はいい形」というのを発見する上で、指し手や盤面全体の評価値だけでなく駒の並びの点数自体に注目してみるという戦略は意味がありそうです。

 

【次回、ゼロから始める将棋ソフトを使った戦型探索 振り飛車編】

駒の並びをベースにソフトは指さないけど実はいい形という戦略を用いるなら、居飛車よりも定跡なしでは殆ど指してもらえない振り飛車こそ、開拓の余地があるのではなかろうか(そして、ここまで工数を使った以上、簡単に負けを認めたくない)というわけで、次回は振り飛車での戦型探索を行ってみます。

先手中飛車を含めても、今のソフトの振り飛車の勝率はとても悪い(先手でも50%どころか45%も怪しい)ですが、果たしてコレを上回る戦型は見つかるのでしょうか。

 

# 今手元で回している新戦型は26-21で勝ち越していますが....果たしてコレは誤差なのでしょうか。

羽生三冠の通算勝率を5割にするのってプロ棋士のルール的に無理じゃね?

皆様知っての通り、羽生三冠はとても強いです。将棋連盟のホームページによるとこの記事の執筆時点で通算成績は1379-552だそうです。長く現役を続け、かつ、タイトルに近づくほど相手が強くなる中でこの成績をキープするには並々ならぬ努力を続けていることと思われます。

 

通算100タイトル、永世七冠など将棋ファンなら羽生三冠がどこまで記録を打ち立てるかに目が離せないと思われますが、ふと、逆に、ここから羽生三冠が全力で将棋をサボった場合、果たしてどこまで成績を下げられるのかが気になりました。

 

勝率を5割に戻すためには、現時点で827連敗しなければいけないそうです、果たしてそんなことは可能なのでしょうか......

 

注:以下、そんなに真面目に計算はしていません。興味を持たれた方は是非、ご自身で計算してみましょう(あと、結果教えて欲しいですw)

 

【愚直に連敗すると勝率5割になる前に引退してしまう】

一番愚直な戦略として、出る対局全てで負けてもらうことにします。玲瓏(ファンサイト)を見た所、羽生三冠は年間50-60局程度対局しているようです。これに全て負け続ければ、15年後に勝率が5割になります。将棋はゲームの性質上、全棋士の勝ち負け数の和は同じになるはずなのですが、15年間負け続けても大丈夫なほどの勝ち越しって一体何なのでしょう。

しかし、名人戦で連敗を続けるとA級棋士の場合、9年でフリークラスに落ちてしまいます。そして、60歳の時点でフリークラスに居ると強制的に引退となってしまいます。

羽生三冠は現在46歳。此処から先の全ての試合を負け続けたとしても、14年後には引退となってしまいます。負けると対局数も減るという致命的な補正を無視してもなお、勝率5割になるには後1年足りないのです。

負け続けても勝率が5割になる前に引退になってしまうという言葉の響きがパないですが、兎に角ただ負けるだけではダメなのです。

 

【真の敵は寿命】

単純な対局ボイコットでは勝率5割にならない以上、名人戦だけはフリークラスにならないようにしながらできるだけ多くの対局で負け続けることを考えます。

後1年余分に負ければいいかといえばそうでもありません。なぜなら、クラスが落ちるにつれて対局数が減ってしまうからです。ひふみんの此処数年の成績から推察するに、凡そ年20局程度まで減ってしまうようです。

できるだけ多くの対局で負けるために、意図的に一部の試合に勝つという手は使えないでしょうか。

現在の将棋タイトルはトーナメント戦やリーグ戦からなります。トーナメントであれば、初戦で負けるのが勝率を下げる上では最適解です。王将リーグなどは入れれば負け星を稼げるのですが、これをやるには相当な数のトーナメント型の予選を勝ち越さなければならず、結局予選のトーナメントで負けるしかありません。試合を勝ち進むことで負け星を増やすことはどうやら難しそうです。

更に、前述のようにフリークラス行きを避けるためには、C2リーグで4勝程度はしなければなりません。以上を纏めると、4-16程度の負け星で800超もある勝ち星を埋め立てていく必要があります。

A級からC2に行くまで全負け(この間にどれだけ対局が組まれるかは定かではありませんが、此処では平均30局(恐らく多く見積もり過ぎ)とし240連敗出来たと仮定します)、C2+刺青x2になってからはフリークラス行きを避けるように4-16の星をキープするとしましょう。

827 = 240 + 12 * X。 勝率5割になるにはX+8年の歳月が必要です。X=49。即ち57年後に勝率が5割になるようです。103歳まで対局を続けて勝率がやっと5割になるって、何を言ってるか解らないと思いますが、ありえなくもないと思えるのは私だけでしょうか。

 

永世竜王ループ】

改めて見ると、特に厄介なのは強制引退を避けるためにC2で4勝しなければならないことです。年間対局の半分を占める順位戦で半分ぐらいの試合に勝たねばならぬのは勝率を下げる上でとてつもなく邪魔なのです。仮にこの縛りがなければ(年間負け星を20稼げれば)、X=30となり、84歳で目標を達成することができます。

そこで、フリークラスの規定を見直すと、とてつもなく良いことが書いてありました。

 

今泉健司四段、 フリークラスからC級2組へ昇級|将棋ニュース|日本将棋連盟

より引用

 

【フリークラスからC級2組への昇級規定】フリークラスからC級2組への昇級規定は以下のうち一つを満たした場合です。ただし、「年間」は4月1日から翌年3月31日まで。宣言によるフリークラス転出者は除きます。
1.年間対局の成績で、「参加棋戦数+8」勝以上の成績を挙げ、なおかつ勝率6割以上。
2.良い所取りで、30局以上の勝率が6割5分以上であること。
3.年間対局数が「(参加棋戦+1)×3」局以上。ただし、同じ棋戦で同一年度に2度(当期と次期)対局のある場合も1棋戦として数える。
4.全棋士参加棋戦優勝、タイトル戦挑戦。

 

棋戦優勝。これです。

例えば今年の竜王戦で優勝して永世竜王になってもらうとしましょう。この場合、来年はチャンピオンとして竜王決定戦にだけ出ることになります。ここで4-3で竜王を防衛してもらいます。

するとどうでしょう。全棋士参加棋戦優勝の称号が手に入るではないですか! 相対的な負け星をわずか一つ削るだけで!!!

 

改めて纏めると

1.竜王竜王じゃなくても、チャンピオンによる防衛戦の概念がある名人以外の棋戦の王者なら良い)になる

2.他の棋戦は全て負ける

3.竜王だけ4-3で防衛し続ける

4.フリクラに落ちても竜王防衛の力でC2にすぐ戻れる

5.年間20程度、相対的な黒星を稼ぐ

6.これを84歳ぐらいまで続ける

 

寝言は寝て言えと言いたくなる超がつくほどの糞ゲーですが、上記二つの戦略に比べればきっと現実的でしょう。

 

通算勝ち星800超えの壁は厚かった!!

 

【コメントでアドバイスをいただきました 2017.12.07更新】

永世竜王ループは規約的にやはり怪しいというのを受けて、todo36氏がより洗練された負け星の稼ぎ方について考察をしてくださいました。

 

詳しくはコメント欄を参照していただきたいのですが、C2全勝で昇級、C1で2年連続全敗、C2で2年連続全敗を繰り返すことでより効率的に負け星を稼げるとのこと。言われてみれば確かに。

 

シミュレーション結果によると9288歳で勝率を5割に戻せるそうです。やったね!

 

【勝率といえば】

現在コンピュータ将棋で流行しているelmo式の学習は、深く読んだ評価値と局面の勝率を教師に浅い読みの評価値を補正していこうという戦略です。評価値が低いのにコンピュータの読み筋にしたがって指すと勝ててしまう様な局面の評価値をちゃんと高くすることがelmo式の肝ともいえます。

実は(という程でもないけど)elmo式の効果は適当な盤面を初期値に勝率を計測することで可視化することが出来ます。下のグラフはaperyの学習機に付属された局面の評価値と、そこからqhapaqを戦わせた時の勝率のグラフです。

f:id:qhapaq:20170829225323j:plain

評価値0付近にエラーが大きいことが解ります。恐らく、相手玉の詰む詰まないを正しく読めていないのでしょう。

f:id:qhapaq:20170829225557j:plain

これがelmoだとこうなります。短い持ち時間ではqhapaqはelmoよりも強いのですが、盤面全体のブレの小ささではelmoが上を行っており、これが長い持ち時間での強さの秘訣になっていると思われます。

という現象を理想的にはrelmoやまふ関数などで検証するべきなのですが、面倒なので手が出せてないです orz

 

さて、こうした将棋学習理論の詳細やコンピュータ将棋の最先端のぶつかり合いが見たい人は、是非、電王戦もよろしくお願いします(私もQhapaqとして参戦します)

(言い訳程度のコンピュータ将棋要素)