2年2ヵ月2週間(12手詰全解の数を知るまで)

初期配置から6手目の全局面 21,882,684個を10万個ずつ219グループに分けて(219番目は10万個ではなく82,684個)、7手目からの6手詰として12手詰手順をNoCheck5.exeを使って解いた。解があった解図開始局面は8,378,961個だったので全体の38%しかなかったことになる。
解図には、10万行のバッチファイルを準備して、コマンドプロンプト上で実行。同時実行数はPCのスペック次第。2021年4月に購入したIntel Corei7-10870H 8コア16スレッドの32GBメモリのノートPCだと11個の同時実行でCPU使用が100%。Core i7-8550Uの16GBメモリのノートPCでは同時実行は7つでCPU100%。

12手詰の解の数は203,509,892,443 20,350,989,652 203,510,100,771個。

(以下のファイルサイズ等に関する記載は、全解数が208,328個増えているので正しい値ではない。2022/6/23)

解図結果のファイルサイズが最小になるように、SJIS形式にして改行コードはLFで生成して、即、GZIP圧縮した。これらの総ファイルサイズは671,596,613,913バイト(625.5GB)なので1TBのSSDに格納可能。
もしこれらの圧縮ファイルをテキストファイルへ展開した場合、13,343,203,094,954バイト(12TB強)になる。
GZIPの圧縮率は4.7%~5.5%で平均5.0%だったので圧縮ファイルを展開すると20倍のサイズになる。

1手順の棋譜には、12手詰の場合は地点の数字の文字(1バイト)が24個と区切り文字のタブが11個、改行コードのLFが1個の計24バイトがある。棋譜の駒種や補助記号(成、右、上、引、直など)や"同"の漢字はSJISでは1文字は2バイトだがUTFの場合は漢字1文字が3バイト。これらのことからUTF形式のテキスト形式へ展開した場合のサイズを算出すると 17,572,685,933,115 バイトなので、サイズは15.98TBの約16TBになる。Windows標準の改行コードのCRLFにすると更に 203,509,892,443バイト(約190GB)増えることになる。(約16.2TB)もし将来16TBのSSDが出たとしても、実用サイズは16TBより小さくなはずなのでテキストファイルへの展開は20TBの容量のストレージが出て来なければ使えなさそう。
もちろん、圧縮済みファイルをテキストファイルへ展開しないままで内容を利用するコマンド、たとえば zcat や zgrep がある。11手詰の全手順は3,947,385,940通りで、UTFテキスト:290,964,544,647バイトのgzip圧縮した圧縮ファイルのサイズは14,488,464,946バイトになっていて、昨年購入したPCではテキストファイル全域を舐める時間と同じ内容の圧縮ファイル全域を舐める時間は圧縮ファイルの方が2.5倍長くかかった。(grep "99歩" でテキストファイルを検索すると4分34秒、zgrep "99歩" で圧縮ファイルを検索すると11分35秒)この速度で12手詰全手順の圧縮ファイルを1回スキャンするのなら9時間弱かかることになる。検索条件が複雑になればもっと時間がかかるし、検索結果の出力サイズが非常に大きくなればストレージの容量不足で検索実行に失敗する可能性もあるだろう。

解析図を10万個ずつの219ブロックに分けたが、解図してできた各ブロックの圧縮ファイルのサイズは最小は27MBで最大は150GBとファイルサイズには大きな差がある。テキスト形式に展開した時のサイズが500GB程度とか100GB程度になるように圧縮ファイルサイズを均等化するとか、圧縮ファイルサイズを2~5GB単位にするなどの再構成作業をしたほうがいいかも。圧縮ファイルを小分けにしたところで、zgrepの実施回数が増えるだけで、必要な検索時間のトータルが簡単な検索でも9時間かかることにかわりはない。

(2022/3/24追記)

圧縮ファイルをテキスト形式(SJIS、改行はLF)で展開した際に100GBくらいになるように、圧縮ファイルサイズを5GB未満(5,368,709,120バイト未満)になるようにすると、全部で126個の圧縮ファイル(最後のファイルは約1.5GB)に分けることができた。圧縮率が異なるので、テキスト形式に展開した場合の最小と最大は、96GBと106GBになる。

 

(2022/4/8追記)

12手詰解は6手目局面からの6手詰で解いたが、同じく6手目局面からの7手詰で13手詰手順を解くにはどのくらいの時間がかかりそうかテストしてみた。

現在、3000局面を解いて、その時間を比較してみたところ、12手詰手順に掛かった時間よりも13手詰手順を解く時間は総計比較で18倍くらいになっていた。1年前に購入したノートのCPUはi7-10870Hの第10世代で、これから発売されてくる第12世代の一番速いCPUのi9-12900KSだとベンチマークが3倍くらい速いので、このCPUが組み込まれるタワー型パソコンを6台購入すれば、3×6=18なので12手詰の解図にかかった2年2ヵ月で解けるかもしれない、

同じPCを6台購入するなんてことは無いから、i9-12900KSのパソコンへ1台だけグレードアップするだけなら、13手詰を解くのに13年掛かることになる。(あと13年は生きられない可能性の方が高そう)

毎年、新製品に買い替えて計算を継続すれば総時間は短くなっていくので10年くらいで済むかも。でも年金生活者では毎年PCを買い替えるなんてことは経済的に無理だな。

6手目局面からのスタートだと解く手数は少なくて済むけど、解かなければいけない6手目局面数が21,882,684個もある。4手目局面からの9手詰で13手詰手順を解けば、解図開始局面数は大幅に少なくて済む。トータルの時間はどっちが少ないのかな?CPUが速くなっているので9手詰全解を解くのに1週間くらいかかっていたものが今では2~3時間で解けるので、4手目局面からの9手詰として13手詰を解いた方が、プログラムの起動時間のオーバーラップを削減できるので、この方が良いかも。

試してみようかな。

⇒ 7週間動かしっぱなしでも1局面の解図が終わらない。Windows Updateによる再起動を2ヵ月分先送りにしていたが、コマンドプロンプトが落ちてしまってお釈迦になった。2~3週間で解けるような局面でなければ、せっかくの解図時間が無駄になるので13手詰の解を求めるのは無理そう。(今の50倍くらい速いPCが出てきたらできそうだけど)

 

12手詰の全解数は集計の仕方によって数字が違うことに気付いた。

203,509,892,851
203,509,892,652

どちらが正しいのかを再検査するには時間がかかりそう。

6手目の局面 21,882,684個を解図した結果、解があった8,378,961個の解図結果ファイルは圧縮してあるので、解凍して解が何個見つかったと記載されているのかを取り出して、解の行だけ取り出した行数と見比べる必要がある。

(2022/6/12追記)

 

12手詰の全解数は、203,510,100,771通り。(2022/6/.23追記)