アカウント名:
パスワード:
ああいうソフトウェアってどういうアルゴリズムで動いてるのかと思ってたけど、ひたすら盤面のデータだけ持ってて、それだけで判定しているのか。てっきり、過去のデータがある場合はそれで、なかったら別のアルゴリズムで…みたいな感じでやってるのかと思った。設計ミスだよなぁ。(いやそんな状況じゃどのみち勝てないから、設計から落とすのは方針として正しいのかもしれんけど。)
単純に言えば、1 何らかの方法で盤面に点数をつける方法を用意しておく2 現在の盤面から可能な指し手をすべて列挙する3 2の指し手を指した後の局面すべてについて1を適用し、点数が最大となる指し手を選ぶというのが(この手のゲームの)最も基本的な処理です。
今回は2について高速化のための省略があり、全てを列挙していなかった。これだけなら問題ないのですが、相手の指し手の入力にも2を用いていたことで、省略された手の入力により内部の処理で不具合が生じた、ということのようです。
将棋は詳しくないので良く分かりませんが、基本的な処理のなかでは、(1) 王手を認識して、(2) 「現在の盤面から可能な指し手」の中から「王手を回避する指し手」に限定する、という手順が含まれないのでしょうか?今回の場合、成っても成らなくても王手は変わらないので「角成らず」で混乱したという説明が良く分からないのです。(まあ、そこがバグなんで、ありえないロジックで動いてしまったということだといわれればそれだけなんでしょうけど)
> 基本的な処理のなかでは、~、という手順が含まれないのでしょうか?王手を回避しない差し手はそもそも反則で可能な指し手に含まれません。回避する機能がなくてもそんな状況は評価結果が恐ろしく低いのが普通なので他の手が優先されるのが普通です。
> 今回の場合、成っても成らなくても王手は変わらない試合中の時点では詰みまで読み切れていないので無関係です。
> 「角成らず」で混乱したという説明が良く分からないのです。今回のは最終的にはバグだったということなので、混乱というよりは開発者の想定しない入力によりどこかしらの処理が暴走したという話です。例えば、相手が持ってないはずの駒を打ったとか、相手が反則手を打ったとか、そんな入力が来たのにゲームが進行してたらAIは次の手を決めることは出来ません。本来なら何らかのエラーを出すところですがそういう所が甘かったりすると、盤面の認識が狂ったまま予測を続けて見当違いな手を出力したりします。
閑話休題。
バグとは関係なく「角成らずで『混乱させる』」という場合の話ですが・・・通常、対局中は常に先読みを続けてその結果をある程度覚えておきます。基本的に双方悪手を避けると仮定して先読みするため、相手が悪手を打った場合のその先は計算を後回しにして放置します。そのため実際に悪手を打たれると先読みしていない状況が発生するため、それなりに安全そうな手を打つ為には時間を掛けて先読みし直したくなります。この「考慮していなかった先読みのやり直し」に掛かる時間を「混乱」と例えたりもします。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
海軍に入るくらいなら海賊になった方がいい -- Steven Paul Jobs
盤面だけで処理してるんだ (スコア:0)
ああいうソフトウェアってどういうアルゴリズムで動いてるのかと思ってたけど、ひたすら盤面のデータだけ持ってて、それだけで判定しているのか。
てっきり、過去のデータがある場合はそれで、なかったら別のアルゴリズムで…みたいな感じでやってるのかと思った。
設計ミスだよなぁ。
(いやそんな状況じゃどのみち勝てないから、設計から落とすのは方針として正しいのかもしれんけど。)
Re: (スコア:4, 参考になる)
単純に言えば、
1 何らかの方法で盤面に点数をつける方法を用意しておく
2 現在の盤面から可能な指し手をすべて列挙する
3 2の指し手を指した後の局面すべてについて1を適用し、点数が最大となる指し手を選ぶ
というのが(この手のゲームの)最も基本的な処理です。
今回は2について高速化のための省略があり、全てを列挙していなかった。
これだけなら問題ないのですが、相手の指し手の入力にも2を用いていたことで、
省略された手の入力により内部の処理で不具合が生じた、ということのようです。
Re: (スコア:0)
将棋は詳しくないので良く分かりませんが、基本的な処理のなかでは、(1) 王手を認識して、(2) 「現在の盤面から可能な指し手」の中から「王手を回避する指し手」に限定する、という手順が含まれないのでしょうか?
今回の場合、成っても成らなくても王手は変わらないので「角成らず」で混乱したという説明が良く分からないのです。
(まあ、そこがバグなんで、ありえないロジックで動いてしまったということだといわれればそれだけなんでしょうけど)
Re:盤面だけで処理してるんだ (スコア:0)
> 基本的な処理のなかでは、~、という手順が含まれないのでしょうか?
王手を回避しない差し手はそもそも反則で可能な指し手に含まれません。回避する機能がなくてもそんな状況は評価結果が恐ろしく低いのが普通なので他の手が優先されるのが普通です。
> 今回の場合、成っても成らなくても王手は変わらない
試合中の時点では詰みまで読み切れていないので無関係です。
> 「角成らず」で混乱したという説明が良く分からないのです。
今回のは最終的にはバグだったということなので、混乱というよりは
開発者の想定しない入力によりどこかしらの処理が暴走したという話です。
例えば、相手が持ってないはずの駒を打ったとか、相手が反則手を打ったとか、
そんな入力が来たのにゲームが進行してたらAIは次の手を決めることは出来ません。
本来なら何らかのエラーを出すところですがそういう所が甘かったりすると、
盤面の認識が狂ったまま予測を続けて見当違いな手を出力したりします。
閑話休題。
バグとは関係なく「角成らずで『混乱させる』」という場合の話ですが・・・
通常、対局中は常に先読みを続けてその結果をある程度覚えておきます。
基本的に双方悪手を避けると仮定して先読みするため、
相手が悪手を打った場合のその先は計算を後回しにして放置します。
そのため実際に悪手を打たれると先読みしていない状況が発生するため、
それなりに安全そうな手を打つ為には時間を掛けて先読みし直したくなります。
この「考慮していなかった先読みのやり直し」に掛かる時間を「混乱」と例えたりもします。