その打ち歩詰めの定義、間違ってません?

まず、「◯◯角不成」となる1手詰め問題が作れるかについて考えてもらいたい。普通に考えると、(1手詰めで)例えば5二角不成で詰むなら、5二角成でも詰むはずであって、5二角不成でなければならないという状況は考えられない。ところが、それに挑戦する非常に面白い詰将棋問題が出題された。

作意としては、68角不成。対して、77歩のあと、先手に合法手がない。つまり、歩を打つことで相手を合法手のない状態にしているので、これは打ち歩詰めであり、77歩は禁じ手であると言うのだ。(68角不成に代えて68角成だと、77歩のあと、先手はこの成った馬を移動させる合法手があるので77歩が打ち歩詰めにならない。)

ちなみに77歩と指した局面、やねうら王は、後手勝ちとして扱うし、ShogiGUIも将棋所も後手勝ちと判定する。(77歩を禁じ手扱いはしない)

それで、打ち歩詰めのルールが本当にこれで合ってるのかと言うことなんだけど、Wikipediaを見るとこう書いてある。

「相手の玉頭(王将の頭)に歩で王手して」という条件が抜けているように思う。そして、この定義を打ち歩詰めの定義として説明している人、世の中にはわりと多い。18年前に発売されたコンピューター将棋のバイブルとも言える、うさ親さんの『コンピュータ将棋のアルゴリズム―最強アルゴリズムの探求とプログラミング (I・O BOOKS) 』でも、「持ち駒の歩を打った状態で相手玉が詰む場合、その歩を打つ手は反則である。」という記述がある。

これらの定義だと、確かに上の図の局面は68角不成の1手詰めなのだ。

しかし将棋のルールならば日本将棋連盟発行の『将棋ガイドブック』を必ず確認しなければならない。(絶版になっているが、まだマーケットプレイスから購入可能である。大切な資料なので、Kindleで出版していつまでも買える状態になっていて欲しいものだ。)

この『将棋ガイドブック』の記述は次のようになっている。

ということで、Wikipediaの説明が間違っているのだ。誰か修正しておいてくれ。
以上、打ち歩詰めのコーナーケースについてでした。

P.S.
『将棋ガイドブック』にこの記述があることについてはうさ親さんに教えていただいた。うさ親さん曰く、「(自分の将棋)プログラムの方は、玉の頭に歩を打つ手しか打ち歩詰めのチェックしてないんですけどねぇw (自著の記述で)やらかしていたことに 20年近く経ってから気が付いたわ…」とのことでした。

■ 2023/11/16 11:00追記

「stalemateは(負けだけど)詰みではない」ゆえに、Wikipediaの「打ち歩詰め」の書き方でも問題ないとする立場があって、この解釈が正解である気はします。(ただ、その場合でもstalemateが負けであるというのはルール上、明記されていて欲しいですが。)

詰みとステイルメイトは別物
https://note.com/meikomai_tsume/n/na24193cfb35f

その打ち歩詰めの定義、間違ってません?」への15件のフィードバック

  1. wikipediaの打ち歩詰めの定義が間違ってるのか「詰め」の定義自体が間違ってるのかは実は曖昧ではないだろうか。
    将棋連盟HPは「次に王が獲られる状態を詰み」である、と書いていて
    次に有効手がない状態(上の作例では77歩打ちの局面)のことは詰みとは言っていない。
    詰んでないけど違法手しか残ってなくて投了するべき局面がありうると受け止めるか、違法手しか残ってない投了するべき局面が全て「詰み」であるかは実は誰も決めてないように思われる。

    • それはそうなんですよね…。その問題、いずれ取り上げようかと思ってました。

      『将棋ガイドブック』の定義もそれに近い説明になってて、要するにstalemateの存在忘れてるんですよね…。stalemateをどう扱うかはルール上、決めておくべきことで(例えば全駒するとこの状態に誘導できるので初心者同士の実戦ではわりとなりうる)、まあ、将棋でパスは合法手ではないので、自分の手番で自分の手が指せない以上、少なくとも時間切れまで何もできないことは確定で、切れ負けルールにおいては負けが確定しますな…。(切れ負けルールじゃない時は知らん)

      まあ、慣例としてはstalemateは負けでしょうから、これはルール記述上の不備だと私は考えます。

  2. 「◯◯不成」となる1手詰め問題が作れるか

    速攻で23桂不成が頭に浮かんでしまったので、具体的に角不成と飛不成と列挙したほうがよさそう

  3. これは詰みや打ち歩詰めの定義以前にステイルメイトの扱いの問題では?
    ステイルメイトを「詰み」として扱うなら作意が成立する余地がある
    「詰みではないが合法手が無くなった方の負け」とするなら成立しない(大抵のコンピュータ将棋はこの扱い?)
    チェスに倣って引き分けとする場合も成立しない

    実際には将棋ではステイルメイトの扱いがルールで決まっていないのでこの問題が成立するかも決定できない、となるように思います

    • Wikipediaの「打ち歩詰め」の定義ですと、そうなりますね。

      『将棋ガイドブック』の定義ですと、「打ち歩詰め」は「歩を打って王手をした局面で」とあるので、王手になっていないといけませんので、この問題の77歩は王手になっていなくて「打ち歩詰め」の前提条件から外れ、(stalemateがどういう扱いであれ)禁じ手ではありません。(ShogiGUIや将棋所、やねうら王はこの解釈)

  4. 大山康晴と谷川浩二との対局で角不成の手を指して谷川さんが勝った対局があったんじゃないかな?

  5. このブログの内容とは関係ないのですが、やねうら王探索部の最新の「GENERATE_PRO_PLUS追加。Nov 28, 2023」のコミットをビルドして1億局面の教師データを追加学習中に99966308局面で
    停止するという不具合が発生しましたので報告します。

    99600000 sfens , at Wed Nov 29 05:04:11 2023
    ………………………………….
    99800000 sfens , at Wed Nov 29 05:05:52 2023
    ………………………………….
    99966308 sfens , at Wed Nov 29 05:07:08 2023
    ……….

    本来であれば2023年11月29日05:07:10頃に完了するのですが、 33分後の05:40:00頃になっても完了せず停止中のままです。
    タスクマネージャーで見たらターミナル(3)、メモリWindowsコマンドプロセッサ メモリ1.3MB、YaneuraOu-evallearn.exe CPU(約)5.1% メモリ3052.3MBの状態で停止中です。
    このまま停止中ではまずいのでWindowsコマンドプロセッサを閉じたらgenerated_sfens.binの1億局面のサイズは100KBほど少なめで3906150KBです。
    前回の追加学習で使用した「MAX_REPETITION_PLY導入。 Nov 23, 2023」のコミットをビルドしたものは正常に完了しgenerated_sfens.binのサイズは1億局面で3906250KBです。このコミットまでは追加学習中に停止する不具合は一度もありませんでした。「reformat some comment Nov 25, 2023」から「NON_CAPTURES_ALL、CAPTURES_ALL追加。この2つの指し手生成追加。Nov 28, 2023」のコミットまでは
    ビルドして追加学習していないので同様の不具合が出るかは不明です。

    • Discordに招待するので、そちらでご報告いただいた方がよろしいかと思います。私宛(yaneurao@gmail.com)にメールいただけますでしょぅか。

      なお、本文と関係ないコメントは手動的に削除されるです。。。

  6. すみません、先ほどのは説明不足だったので訂正したものを再度送信します。
    このブログの内容とは関係ないのですが、やねうら王探索部の最新の「GENERATE_PRO_PLUS追加。Nov 28, 2023」のコミットをhalfkp_1024x2-8-32のアーキテクチャでビルドして1億局面の教師データを作成した後に
    やねうら王v4.83のソースコードからhalfkp_1024x2-8-32のアーキテクチャでビルドした探索部で追加学習中に99966308局面で
    停止するという不具合が発生しましたので報告します。

    99600000 sfens , at Wed Nov 29 05:04:11 2023
    ………………………………….
    99800000 sfens , at Wed Nov 29 05:05:52 2023
    ………………………………….
    99966308 sfens , at Wed Nov 29 05:07:08 2023
    ……….

    本来であれば2023年11月29日05:07:10頃に完了するのですが、 33分後の05:40:00頃になっても完了せず停止中のままです。
    タスクマネージャーで見たらターミナル(3)、メモリWindowsコマンドプロセッサ メモリ1.3MB、YaneuraOu-evallearn.exe CPU(約)5.1% メモリ3052.3MBの状態で停止中です。
    このまま停止中ではまずいのでWindowsコマンドプロセッサを閉じたらgenerated_sfens.binの1億局面のサイズは100KBほど少なめで3906150KBです。
    前回の1億局面の教師データの作成に使用した「MAX_REPETITION_PLY導入。 Nov 23, 2023」のコミットをhalfkp_1024x2-8-32のアーキテクチャでビルドしたものから、やねうら王v4.83のソースコードからhalfkp_1024x2-8-32のアーキテクチャでビルドした探索部で追加学習したものは正常に完了しgenerated_sfens.binのサイズは1億局面で3906250KBです。このコミットまではhalfkp_1024x2-8-32のアーキテクチャで追加学習中に停止する不具合は一度もありませんでした。「reformat some comment Nov 25, 2023」から「NON_CAPTURES_ALL、CAPTURES_ALL追加。この2つの指し手生成追加。Nov 28, 2023」のコミットまでは
    halfkp_1024x2-8-32のアーキテクチャでビルドして教師データの作成はしていないので同様の不具合が出るかは不明です。私のmsys2の環境ではhalfkp_1024x2-8-32のアーキテクチャではやねうら王探索部V4.83の「BookDirを変更したときに、Aperyの定跡ファイル(book.bin)が
    読み込めなくなるのを修正。(ohtaroさんの報告) (… on Oct 4, 2018」からV5.33あたりまではビルドでエラーになるので現在はV4.83を追加学習で使用しています。

  7. 追記
    YO4.83のソースコード以降では「MSYS2上でNNUE型の評価関数の実行ファイルがビルドできない件を解説.txtに追記 Sep 24, 2018」まではhalfkp_1024x2-8-32のアーキテクチャでビルド出来ますが「BookDirを変更したときに、Aperyの定跡ファイル(book.bin)が
    読み込めなくなるのを修正。(ohtaroさんの報告) (… on Oct 4, 2018」と「GenAllLegalMovesオプション追加。Nov 8, 2018」のソースコードのどちらも単独で取り入れてビルドした場合でもhalfkp_1024x2-8-32のアーキテクチャではエラーが出てビルド出来ません。tanukiの野田さんのブログを見てV5.33以前でないと追加学習で弱くなるそうなのでV5.33以前だと私のmsys2の環境では最後にビルド可能な「MSYS2上でNNUE型の評価関数の実行ファイルがビルドできない件を解説.txtに追記 Sep 24, 2018」のコミットを取り入れたhalfkp_1024x2-8-32のアーキテクチャの探索部を教師データの作成に使用しています。ビルドではこのコマンドを入力しています。make clean YANEURAOU_EDITION=YANEURAOU_ENGINE_NNUE_HALFKP_1024X2_8_32
    make -j8 evallearn COMPILER=clang++ YANEURAOU_EDITION=YANEURAOU_ENGINE_NNUE_HALFKP_1024X2_8_32 ENGINE_NAME=”YaneuraOu\(dev\)” TARGET_CPU=AVXVNNI EXTRA_CPPFLAGS=”-DHASH_KEY_BITS=128 -DTT_CLUSTER_SIZE=4″

  8. すみません。先ほどの説明で正しくは追加学習を、教師データの作成と間違いがあったので訂正します。

    V5.33以前だと私のmsys2の環境では最後にビルド可能な「MSYS2上でNNUE型の評価関数の実行ファイルがビルドできない件を解説.txtに追記 Sep 24, 2018」のコミットを取り入れたhalfkp_1024x2-8-32のアーキテクチャの探索部を追加学習に使用しています。

  9. すみません、先ほどのコマンドは最新コミットを取り入れた対戦用で、追加学習用にYO4.83でビルドしたコマンドはこちらが正しいので訂正します。
    YANEURAOU_EDITION=YANEURAOU_ENGINE_NNUE_HALFKP_1024X2_8_32
    make -j8 evallearn COMPILER=clang++ YANEURAOU_EDITION=YANEURAOU_ENGINE_NNUE_HALFKP_1024X2_8_32 ENGINE_NAME=”YaneuraOu\(dev\)” TARGET_CPU=AVX2

  10. 度々すみません。朝方に早く起きてまだ頭が回らないときに文章を書いたので間違いがまだありましたので、訂正します。

    このブログの内容とは関係ないのですが、やねうら王探索部の最新の「GENERATE_PRO_PLUS追加。Nov 28, 2023」のコミットをhalfkp_1024x2-8-32のアーキテクチャでビルドして1億局面の教師データを作成中に99966308局面で停止するという不具合が発生しましたので報告します。

    99600000 sfens , at Wed Nov 29 05:04:11 2023
    ………………………………….
    99800000 sfens , at Wed Nov 29 05:05:52 2023
    ………………………………….
    99966308 sfens , at Wed Nov 29 05:07:08 2023
    ……….

    本来であれば2023年11月29日05:07:10頃に完了するのですが、 33分後の05:40:00頃になっても完了せず停止中のままです。
    タスクマネージャーで見たらターミナル(3)、メモリWindowsコマンドプロセッサ メモリ1.3MB、YaneuraOu-evallearn.exe CPU(約)5.1% メモリ3052.3MBの状態で停止中です。
    このまま停止中ではまずいのでWindowsコマンドプロセッサを閉じたらgenerated_sfens.binの1億局面のサイズは100KBほど少なめで3906150KBです。
    前回の1億局面の教師データの作成に使用した「MAX_REPETITION_PLY導入。 Nov 23, 2023」のコミットをhalfkp_1024x2-8-32のアーキテクチャでビルドしたものは正常に完了しgenerated_sfens.binのサイズは1億局面で3906250KBです。このコミットまではhalfkp_1024x2-8-32のアーキテクチャで教師データを作成中に停止する不具合は一度もありませんでした。「reformat some comment Nov 25, 2023」から「NON_CAPTURES_ALL、CAPTURES_ALL追加。この2つの指し手生成追加。Nov 28, 2023」のコミットまでは
    halfkp_1024x2-8-32のアーキテクチャでビルドして教師データの作成はしていないので同様の不具合が出るかは不明です。またこれとは別に私のmsys2の環境ではhalfkp_1024x2-8-32のアーキテクチャではやねうら王探索部V4.83の「BookDirを変更したときに、Aperyの定跡ファイル(book.bin)が
    読み込めなくなるのを修正。(ohtaroさんの報告) (… on Oct 4, 2018」からV5.33あたりまではビルドでエラーになるので現在はV4.83を追加学習で使用しています。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です