2009年10月16日

論理力クイズと、思考プログラム

こんにちは、ナカムラです。
突然ですが、クイズです。

今まさに決闘を始めようとする3人のガンマンがいます。
3人のガンマンには腕前に大きな差があり、命中率は次の通りです。


ガンマンA 命中率100%
ガンマンB 命中率66%
ガンマンC 命中率33%

命中率の公平を期するため、決闘は次のような順番で行われます。
・命中率の低い人から、順に射撃する。
 C→B→A→C→…
・射撃の結果倒された人の順番は(当然)スキップされて、その次の人に射撃の権利が移る。


さて、ここで問題です。
あなたがガンマンCだった場合、どういう戦略をとるのがもっとも生き残る確率を高めるでしょうか?
「決闘の場から立ち去るダッシュ(走り出すさま)」とか「ルールなんか無視して乱射するパンチ」というのは無しで!


普通に考えれば、取り得る選択肢は

1ガンマンAを狙う
2ガンマンBを狙う

のどちらかです。
しかし、ガンマンBを狙うのが間違いであるのは、明らかですよね。
運良く命中してガンマンBを倒したとしても、次の順番で命中率100%のガンマンAに撃たれ、絶命するのは明らかですふらふら

では正解は…??
→答えは20行後!



















正解は、
「ガンマンAもガンマンBも狙わずに撃つ(わざと狙いを外して撃つ)」
です。
こうする事により、次の射撃順はガンマンBに移ります。
するとガンマンBは誰を狙うでしょうか?
次に控える命中率100%のガンマンAを差し置いて、あなた(ガンマンC)を狙うと言うことはないでしょう。
そして、運良くガンマンBがガンマンAを仕留めた場合、次の順番はあなた(ガンマンC)になり、Aの存在を気にすることなくガンマンBに先制攻撃を仕掛けることが出来ますぴかぴか(新しい)

もし、ガンマンBがガンマンAを仕留められなかった場合、射撃の権利はガンマンAに移ります。
その際、ガンマンAは誰を狙うでしょうか?
やはりここでも、比較的手強いガンマンBを狙うことでしょう。先にあなた(ガンマンC)を倒しても、ガンマンAに取って得なことは何もありませんから。
これにより、次はあなたの順番になり、ガンマンAに先制攻撃を加えることができますぴかぴか(新しい)

まぁ、結局あなた(ガンマンC)の命中率が33%なので、確実に生き残れるという保証はないのですが、一番マシな戦略だと思われます。


参考文献:フェルマーの最終定理 サイモン シン (著), 青木 薫 (翻訳) (新潮文庫)


*


この問題は、ゲーム理論という考え方で解いてます。
「全員が合理的な考え方をする」という前提で推論を進めているのです。
仮にガンマンBが、あまり合理的に考えない人で、

「なんとな〜く、Cの顔が気に入らないから、あいつを先に狙っちゃえ〜ドコモポイント

なんて考えるタイプの人だったら、それだけでこの戦略は破綻します。
そして現実世界では、合理的ではなく感情的に考えるタイプの人も多くいるのが事実です。

ゲーム理論を株式投資に応用して、株価の予想を行おうとする動きもありましたが、うまくいかなかったようです。
純粋に損得勘定だけで株を買う人ばかりではなく、

「なんとな〜く、この会社が好きだから」
「知り合いに、強く勧められて…」

という理由で購入を決意する人も、数多くいるわけです。
これは株に限らず、普通の商品購入の際も同じだと思います。

では、ゲームに登場する敵キャラクターなどの思考処理(以下AI)ではどうでしょうか?
たまには合理的に考えないAIがいても人間的で面白いのでしょうが、それが意図的に行っている処理なのか、はたまたAIのクオリティが低いのか、単にバグっているだけなのか、分かりにくいのが難点です。

*


私事ですが、かつて世界的に有名な落ちゲー(○トリス)のAIを作成したことがありました。

「なんでそんな所に置くねん!バッド(下向き矢印)

という突っ込みを入れたくなるような思考をするときもありますが、

「おお、そういう意図があったのか!グッド(上向き矢印)

と驚かされることもありました。
4段消し用に空けておいた隙間をキープしたまま、不要なピースを柔軟に処理する方法などは、恥ずかしながら自分の作ったAIに教わりましたあせあせ(飛び散る汗)
自分が作成したAIと対戦して負けたときは、悔しさと共になんだか嬉しさもこみ上げてくると言う、不思議な感覚が味わえますぴかぴか(新しい)
この感覚はプログラマ独特の喜びだと思いますexclamation×2

皆さんも機会があれば、是非思考プログラムに挑戦してみて下さい。



posted by 管理人 at 15:55 | Comment(0) | いいモノづくり道
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。