協力詰めで不詰めになるバグの原因がどうやら劣等局面の判定をすること自体がおかしいのではないかという指摘をなんとかちゃんねるで頂戴した。
すなわち、以下のような局面で、後手が銀を持っているとする。
協力詰めにおいては、上図は、先手から、74角、83銀打、同角成、81玉、72銀打ちまで5手詰みである。しかし後手の手駒の銀が先手の持ち駒だったとしたらどうだろうか。なんと、83銀打ちがないため詰まないのである。いやはや、参った。
※ 別の手順で詰むようで、これは適切な例になっていないようです。(コメント欄) ただ、これで意味は伝わると思うので、とりあえずこの図のままにしておきます。
83銀打ちと犠打を放つことで、74の角の位置を83に変えさせる効果があるのだ。これによって詰むのだ。
先手にとって、後者の局面は、前者の局面から盤面の状態と手番が同じで、かつ、先手の手駒が一方的に増えているので(前者の局面に対する)優等局面と言える。逆に前者の局面は後者に対して劣等局面と言える。
普通、詰将棋でも本将棋でも劣等局面は枝刈りしてしまう。劣等局面に突入するような指し手はありえないからである。ところが協力詰めにおいては劣等局面のほうが優れているケースがあるのだ。
「劣等なのに優れている…」
お前は何を言っているんだ?って感じではあるが。
一方、普通の詰将棋や指将棋ではこのようなことは起こらない。(指し将棋の場合、連続王手による千日手の成立が絡む場合は話が違ってくるが、そういう特殊な状況はここでは除く。)
何故、普通の詰将棋では問題とならないのか?何故、優等局面は優れていると言えるのか?
きふわらべと焼き肉食ってたらこんな時間になってしまったので、証明は誰か任せた。コメント欄で。
血の盟約により贖罪の童、これより我とともに混沌の血で禁断の果実を喰らうだろう。 (訳 : 焼き肉おごってやる約束してた、きふわらべがいまから遊びに来やがるんでいまから焼き肉食べ放題(ただしデザートは一人一品のみ)に出かけるなう)
— やねうら王 (@yaneuraou) January 7, 2016
なんとかちゃんの言う通り玉方73歩ではなくて攻め方63歩では?
83銀から5手で詰んでしまいます。
が、まあそういう意味ではなかろうという事で。
修正しました(`・ω・´)ゞ
>何故、普通の詰将棋では問題とならないのか?何故、優等局面は優れていると言えるのか?
協力詰においては、先手・後手の目的が一致しているので先手の優等局面は後手の劣等局面にほかならず、手番を考慮して手番側からの劣等局面ならば枝切りしてよいのでは?(プログラム素人)
1. 先手の優等局面は後手の劣等局面にほかならず
2. 手番を考慮して手番側からの劣等局面ならば枝切りしてよい
1.は正しいですが、それは協力詰めでなくてもそう。
2.は1.の論理的な帰結になっていないです。
>後手の手駒の銀が先手の持ち駒だったとしたら
74角、83桂、同角成、91玉、92銀まで5手で詰むのでは?
ほんまや(゚д゚)
修正しました(`・ω・´)ゞ
6三の歩は何のためにあるのでしょうか
玉方に銀が無いとして
7四角 8一玉 9二角成 7二玉 8三馬 7一玉 6二歩成 8一玉 7二と
で詰みますよね?
5手では詰みませんが6二の歩を取り除いても銀が手駒にあれば似たような手順で詰みます
手数が延びるのは面白いですが玉方の持ち駒を攻め方に移しただけで詰まなくなる局面というのはあるのでしょうか
例えば、▲15銀25角26歩38玉/△18玉/互いに持駒なしの局面はどうでしょうか。
この図に、受方に桂を渡すと5手詰ですが、攻方に桂を渡すと不詰です。
うおお。図でも詰むんですね。面白いですね。
初めてコメントいたします。
一応詰将棋作家です。
>ゆうたろう様
>6三の歩は何のためにあるのでしょうか
63歩がないと、83銀、81玉、63角成以下詰んでしまいます。
>玉方の持ち駒を攻め方に移しただけで詰まなくなる局面というのはあるのでしょうか
あります。
かなり複雑ですか、例えば以下の配置を考えてみて下さい。
まず、2段目に攻方の成金を、三段目に攻方の歩を並べます。これで、三段目以上は不可侵で、攻方は持駒に歩があっても打つことができません。
次に、34玉、15竜を配置をします。この状態では攻方に歩があっても、玉方が持駒なしなら詰まないですよね。
しかし、玉方に一歩あると、14竜、24歩、25竜、44玉、34竜、55玉、54竜、46玉、56竜、35玉、46竜、25玉、36竜、14玉、16竜で詰みます。
フォローありがとうございます。非常に参考になりました。
(普通の詰将棋で)劣等局面に詰みが存在するなら優等局面にも詰みが存在することを帰納法で示す。以下では「局面」には直前の手順の情報も含まれているものとする。また、玉方の連続王手の千日手や打ち歩詰めになる手は合法手に含めないものとする。
1. 一手詰の局面の優等局面は、劣等局面と同じ手により詰ませることができる。(玉方の持ち駒が減らされて攻め方の損になる一手詰局面は存在しないため)
2. N手詰以下で命題が成立すると仮定する。劣等局面でN+2手詰が存在するとき、優等局面でこの詰みの初手と同じ手を指すことを考える。盤面の配置は劣等局面と同じなので、この手で打ち歩詰めになることはない。優等局面で一手進めた局面での玉方の合法手は、劣等局面の詰み手順で一手進めた局面でも合法手になっている(ここも同様の理由で打ち歩詰めが生じることはない)。玉方に合法手がない場合は、この局面で詰みとなる。玉方に合法手がある場合、どの手を選択したとしても、劣等局面が存在するN手以下の詰局面になる。よって、帰納法の仮定より優等局面でもN+2手詰であると言える。
1,2より、劣等局面で詰みが存在する局面は、優等局面でも必ず詰みがある。
この証明は力作ですね。まあ一言で言うと同じ手順で詰むからということですね…。
1、協力詰めにおいて幅優先探索(+反復深化)をしている
(@協力詰めsolverを並列化するとGHI問題に行き当たる件)
2、先手ならば王手の指し手(CHECKS)、後手ならば回避手(EVASIONS)を生成。
(@連載やねうら王miniを強くしよう!4日目)
3、優等局面の判定もまた協力詰めに必要・・・
(@連載やねうら王miniを強くしよう!6日目)
4、・・・かと思ったが、そうすると協力詰めで「不詰めになるバグ」が発生することがある。
(@劣等局面のほうが優れているケース)
5、従って局面の優劣判断はせずに(枝刈はせずに)探索をしている。
6、連続王手の千日手は判定でNG!
7、以上の探索条件で、一番浅い所で見つかったチェックメイトの経路が協力詰めの解になる。
以上が並列化前の「協力詰めsolver」だという認識、合ってますでしょうか。
> 以上が並列化前の「協力詰めsolver」だという認識、合ってますでしょうか。
3.と4.の間に工夫が5個ぐらいありますけどね..連載の記事で書きます。
頭の中が整理できました。
ありがとうございます。
ちなみに
>きふわらべも弟さんも凄い集中力で明後日(あさって)の方向に全力で走って行くんだな…。
ふふふふ、
人生とはそうしたものですよ。
https://twitter.com/yaneuraou/status/685464778899193856?ref_src=twsrc%5Etfw
twitterでも引用リツイートしたのですが、ご覧になられていない(?)ようなのでこちらでも。上記の帰納法のような必ずしも厳密なものとは言えませんが、よりシンプルにということで。ちなみに、将棋プログラム自体には全く詳しくありません。
劣等局面は、優等局面と盤面が同じで玉方の持ち駒が増え、攻め方の持ち駒が減っている状態。したがって、通常の詰将棋において、優等局面で攻め方の選択手に対して詰まない玉方の応手があれば、劣等局面でも同じ攻め方の選択手に対しては同じ詰まない応手が可能。これに、劣等局面の攻め方の選択手が優等局面の選択手の範囲に収まっていることを踏まえれば、優等局面で不詰みならば劣等局面でも不詰みとなり、優等局面で不詰み判定されたにも関わらず劣等局面で詰みが生じるといった判定漏れが生じることはない。
ありがとうございます。なんとなく頭のなかが整理できました。
普通の詰将棋はAND/OR木なので、攻め方はORだから選択肢が増えるのはマイナスではなく、受け方はANDなので選択肢が減っているだけなので元の解と同じ証明木が使えるということですね。
協力詰めのほうはOR/OR木なので、受け方の選択肢が減ると元の解と同じ手順に出来なくて、詰まなくなるかもってことですね。
ゲーム木でわかりやすく考えるとそういうことでしょうね。
プログラムには詳しくないのでいつもは傍観しているだけだったのですが、面白い題材を提供していただいたので思わずコメントしてしまいました。
こちらこそ楽しめました。ありがとうございました。
優等局面、劣等局面、の定義は、きちんとしているのでしょうか? 協力詰めの場合には、”犠打”も何もない、と思います。 勝ちを目指さず、負けに行っているのですから。 このような場合に、挙げた例が間違っていたのでは、意図、趣旨は、わかるでしょう、と言えるものではなく、ただ、混乱が深まるだけだと思われます。 優等局面、劣等局面の定義を教えていただけたら、ありがたいです。
> 優等局面、劣等局面、の定義は、きちんとしているのでしょうか?
はい、その用語はコンピューター将棋の世界ではきちんと定義されていて、また、以下の記事にも詳しくあります。
http://yaneuraou.yaneu.com/2016/01/07/%E9%80%A3%E8%BC%89%E3%82%84%E3%81%AD%E3%81%86%E3%82%89%E7%8E%8Bmini%E3%82%92%E5%BC%B7%E3%81%8F%E3%81%97%E3%82%88%E3%81%86%EF%BC%816%E6%97%A5%E7%9B%AE/