• ベストアンサー

弱い模範解答

以前に「教えて!」でも取り上げられましたが次のような設問があります。  2人でじゃんけんをする。グーで勝ったら3歩進み、チョキまたはパーで勝ったら6歩進むものとする。グー・チョキ・パーをどんな割合で出せばいいか。    この問題は、昨年「コマネチ大学数学科」でも出題され、N先生(T先生だったかな?)が用意した模範解答は「グー、チョキ、パーを2:2:1の割合で出す」というものでした。理由は、以下のようです。   自分が出す回数をg,t,p、相手が出す回数をx,y,zとする。   自分がグーを出した時の利得は  g(3y-6z)    自分がチョキを出した時の利得は t(-3x+6z)    自分がパーを出した時の利得は  p(6x-6y)   これらを加え、相手の手数でまとめると     (6p-3t)x+(3g-6p)y+(6t-6g)z   A=(6p-3t)、B=(3g-6p)、C=(6t-6g)とおくと次の関係が成り立つ。      2(A+B)+C=0    よってA,B,Cは、3つともゼロか少なくとも1つはマイナス。   仮にAがマイナスだとすると、相手がグー(x)ばかり出した場合にマイナスに   なって負けてしまう。B,Cについても同じ。従ってA=B=C=0    ∴6p=3t、3g=6p、6t=6g     ∴g:t:p=2:2:1   私は、模範解答の強さを確かめるために、シミュレーションでリーグ戦を行いました。エントリーメンバーは、   a:模範解答  グー、チョキ、パーを2:2:1の割合で出す   b:均等     グー、チョキ、パーを1:1:1の割合で出す   c:グーのみ  グー、チョキ、パーを1:0:0の割合で出す   d:チョキのみ グー、チョキ、パーを0:1:0の割合で出す   e:パーのみ  グー、チョキ、パーを0:0:1の割合で出す  の5人です。対戦回数を各1000回としたときの結果を以下に示します。数字は進んだ歩数です。            「 こ ち ら 」       a    b    c    d   e   ┐a: ×  1584  1170  1200  2394  相 b: 1614  ×   1077  2022  1932     c: 1332 1932  ×     0  6000  手 d: 1191  975  3000   ×    0 └  e: 2316 2160   0  6000   ×   合計  6453 6651  5247  9222  10326    なんと、模範解答はブービーです。番組中で東大生チームが出した答えであるd(チョキのみ)の方がはるかに強いです)。  ただしこれは「d、eが高得点をあげるべくc、d,eが談合したに等しい」とも思えます。そこでc、d,eの代わりに以下の2人に入ってもらいました。   f:グー、チョキ、パーを2:1:2の割合で出す   h:グー、チョキ、パーを1:2:2の割合で出す  対戦回数を同じく各1000回としたときの結果を以下に示します。         「 こ ち ら 」       a    b    f    h   ┐a: ×   1566  1794  1815  相 b: 1623  ×   1590  1824  手 f:  1458  1716   ×  2040 └  h: 1671  1659  1383   ×   合計  4752  4941  4767  5679  模範解答は最下位になってしまいました。fとの差は僅かですから、もう一度やればfに勝てる可能性はあるでしょうが、hには勝てそうにありません。番組でも必勝法とは言っていませんが、それにしても情けない結果だと思います。どうしてこうなるのでしょう。  結果の考察や、模範解答の妥当性などについて皆さんの意見を聞きたいです。

質問者が選んだベストアンサー

  • ベストアンサー
  • age_momo
  • ベストアンサー率52% (327/622)
回答No.1

明らかに模範解答がおかしいですね。 利得を計算してそれを変形して Ax+By+Cz としたのですからA=B=C=0となるよう内容を決めてしまえば 利得が0になってしまいます。つまり模範解答が出した答えを 実行すれば引き分けやすい出し方になると思います。 今、相手がランダムに手を出してくるとすると x=y=z=1/3 ですから利得をまとめると (6p-3t)/3+(3g-6p)/3+(6t-6g)/3=t-g tを出来るだけ大きくしてgを出来るだけ小さくするのが一番特になります。 もし、作戦がばれた場合に負けるというなら、ばれない程度にチョキを多く、 グーを少なくするべきでしょう。

banakona
質問者

お礼

すみません。VBAプログラムで、変数iの宣言を忘れています。 このままでも動きますが、始めの方に Dim i As Integer を入れてください。aとともにIntegerをやめてLongにした方がいいかも。 この場を借りてお詫びします。よい子は真似しないように。

banakona
質問者

補足

早速のご回答ありがとうございます。 なるほど、確かに利得がゼロになる戦法になっていますね。うかつでした。 いろいろな方の意見を伺いたいので、私が使ったVBAプログラムを示します。 Sub janken() Dim a As Integer, b As Integer, c As Integer Dim x As Integer, y As Integer, z As Integer Dim igth As Single, icth As Single, rndn As Single Dim ygth As Single, ycth As Single Randomize a = InputBox("こちらの出し方") ' 3桁の数を分解 x = Int(a / 100) y = Int((a - x * 100) / 10) z = a - 100 * x - 10 * y ' しきい値を算出 igth = x / (x + y + z) icth = (x + y) / (x + y + z) a = InputBox("相手の出し方") x = Int(a / 100) y = Int((a - x * 100) / 10) z = a - 100 * x - 10 * y ygth = x / (x + y + z) ycth = (x + y) / (x + y + z) a = InputBox("対戦回数") Cells(1, "C") = "こちら" Cells(1, "E") = "相手" Cells(2, "B") = "グー" Cells(3, "B") = "チョキ" Cells(4, "B") = "パー" Cells(5, "B") = "得点" ' 初期化 For i = 2 To 5 Cells(i, "C") = 0 Cells(i, "E") = 0 Next For i = 1 To a ' こちらの手を決める。グー・・・1 チョキ・・・2 パー・・・3 rndn = Rnd() If rndn < igth Then b = 1 Cells(2, "C") = Cells(2, "C") + 1 ElseIf rndn < icth Then b = 2 Cells(3, "C") = Cells(3, "C") + 1 Else b = 3 Cells(4, "C") = Cells(4, "C") + 1 End If ' 相手の手を決める rndn = Rnd() If rndn < ygth Then c = 1 Cells(2, "E") = Cells(2, "E") + 1 ElseIf rndn < ycth Then c = 2 Cells(3, "E") = Cells(3, "E") + 1 Else c = 3 Cells(4, "E") = Cells(4, "E") + 1 End If ' じゃんけん If b = 3 And c = 1 Then Cells(5, "C") = Cells(5, "C") + 6 ElseIf b = 1 And c = 3 Then Cells(5, "E") = Cells(5, "E") + 6 ElseIf b = 2 And c = 3 Then Cells(5, "C") = Cells(5, "C") + 6 ElseIf c = 2 And b = 3 Then Cells(5, "E") = Cells(5, "E") + 6 ElseIf c = 1 And b = 2 Then Cells(5, "E") = Cells(5, "E") + 3 ElseIf b = 1 And c = 2 Then Cells(5, "C") = Cells(5, "C") + 3 End If Next End Sub <使い方> 1vs1の対戦用です。「こちらの出し方」と表示されたらグー、チョキ、パーの比率を3桁の数で入力して下さい。例えばグー:チョキ:パー=4:7:1なら471と、0:1:1なら11と入力してください。同様にして「相手の出し方」を入力し、更に対戦回数を入力すると、「こちら」と「相手」の双方について、出したグー、チョキ、パーの各回数と得点(歩数)が表示されます。プログラムはここまでです。 T_T   得点を適当な位置に移動させて、様々な対戦をさせて、集計してください。 ^_^ゞ  なお「あいこ」も対戦回数にカウントしていますが、カウントしなくても大差ないと思います。私のプログラムミスだったら申し訳ないな・・・・

その他の回答 (4)

  • Ishiwara
  • ベストアンサー率24% (462/1914)
回答No.5

あなたの疑問は「模範解答」という、まったく数学的に意味をなさない用語に、その根元があります。 例えば、「相手がランダムに出してくる場合の最適戦略」ならば、意味をなします。また、相手の戦略が当方の戦略に対して(相手にとって)最も有利である場合に、当方の損失を最小限にする戦略(いわゆるMINI-MAX戦略)という定義であれば、やはり意味をなします。 相手の戦略が何であっても勝てるという戦略は存在しません。例えば、当方の戦略が石/紙/鋏=1/3/2 である場合、相手が 0/0/1 であれば絶対に勝てません。 いわゆる模範解答なるものが、あなたの実験で下位の成績を取っても、すこしも不思議なことではありません。あなたがこの実験で選んだ戦略が、すべての戦略の公平な代表ではないからです。また、MINI-MAX戦略が、常に期待値が正であるとは限らないことにも注目してください。

banakona
質問者

お礼

ご回答ありがとうございます。 私も「相手の戦略が何であっても勝てる戦略がある」とは思っていません。もし思っていたら私はリーグ戦をやらずに「(略)強さを確かめるためにシミュレーションを行いました。以下がその結果です。        a   ┐a: ×  相 b: 勝ち    c: 勝ち  手 d: 負け └  e: 負け 模範解答が2勝2敗とはナニゴトでしょう。(以下略)」と質問した筈です。#3さんへのお礼でも言いましたが、 >対戦を繰り返せば模範解答がそこそこの成績をあげて、トータルで優勝する                      ~~~~~~~~~~          ~~~~~~~~~~ 言葉を補えば、「他の選手同士がつぶし合いをして、その結果、模範解答が勝つ」ということを私は期待していたのです。そのために「総当りの検証」をしたことをご理解ください(エントリー数が少なすぎたのは反省しますが)。 出典は忘れましたが、「囚人のジレンマ」において色々な大学や研究機関が考え出したアルゴリズムを集めて対戦させたところ、「しっぺ返し戦略」が優勝したと聞きます。これを踏まえてルールを変更し、アルゴリズムを再募集し対戦させたら、再び「しっぺ返し」が優勝したそうです。他のチームが打倒「しっぺ返し」のアルゴリズムを送り込んだにもかかわらずです。もし本問で、じゃんけんの代わりに、囚人のジレンマが対象とされたら、その「模範解答」は、しっぺ返しだと言ってよいと思います。 ゼロ和と非ゼロ和の違いはありますが、そのような結果を番組の模範解答に期待して私はリーグ戦を行いました。

  • age_momo
  • ベストアンサー率52% (327/622)
回答No.4

#1です。確かに#3さんの言われるように前提がずれているのでしょうね。 相手がどんな手を出してきても引き分けになる手の出し方が『良い作戦』なのかどうかだと思います。 VBAですが試行回数が少ないのと手の配分が少しずれているのが気になります。 私のほうでも確認してみましたが、予想通り、相手がどのような作戦でもほぼ引き分けでした。 手を決める関数(teKime)に渡す値を変更して試してみてください。 Const Goh = 0, Choki = 1, Pah = 2 '0をグー、1をチョキ、2をパーとする Sub janken2() Dim ct As Long Dim aite As Long Dim watasi As Long Dim MyTe As Integer Dim YouTe As Integer Dim TeAna(1, 2) As Long Randomize For ct = 0 To 1000000 MyTe = teKime(2, 2, 1): TeAna(0, MyTe) = TeAna(0, MyTe) + 1 'グー、チョキ、パーの比率 YouTe = teKime(1, 1, 1): TeAna(1, YouTe) = TeAna(1, YouTe) + 1 Select Case MyTe Case Goh If YouTe = Choki Then watasi = watasi + 3 If YouTe = Pah Then aite = aite + 6 Case Choki If YouTe = Pah Then watasi = watasi + 6 If YouTe = Goh Then aite = aite + 3 Case Pah If YouTe = Choki Then aite = aite + 6 If YouTe = Goh Then watasi = watasi + 6 End Select Next Range(Cells(1, 2), Cells(1, 6)) = Array("得点", "", "グー", "チョキ", "パー") Cells(2, 1) = "私": Cells(3, 1) = "相手" Cells(2, 2) = watasi Cells(3, 2) = aite Range(Cells(2, 4), Cells(3, 6)) = TeAna() End Sub Private Function teKime(x As Integer, y As Integer, z As Integer) As Integer Dim rndNo As Double rndNo = Rnd() If rndNo < x / (x + y + z) Then teKime = Goh: Exit Function If rndNo < (x + y) / (x + y + z) Then teKime = Choki: Exit Function teKime = Pah End Function

banakona
質問者

お礼

再びのご回答ありがとうございます。 私もやってみました。私のプログラム(我ながら頑固だね)がセル上で行っていた計算を取りやめて高速化し、100万回ずつ行ったところ、確かに多数のチームとほぼ引き分けになりました。 うすうす感じてはいたのですが、模範解答は、あらゆる戦略に負けないようにした結果、あらゆる戦略に勝てなくなったということですね。

  • ryn
  • ベストアンサー率42% (156/364)
回答No.3

前提が間違っている(わけではないですが)だけではないでしょうか. たしか番組ではゲーム理論の例題のような形で ご質問の問題が取り上げられていたと思います. 1:1:1の戦術にしても,グーのみなどの戦術にしても その戦術にこちらが気づけば対応が出来るわけです. グーのみの戦術を取る人がいればこちらはパーのみを出せばよい. 1:1:1の戦術を取る人がいれば,例えば前半にグーパーが多いと, だんだんチョキしか出せなくなってくる. とすると,これらの戦術は相手に読まれた時点で使い物にならなくなる. そのように,2人ともが相手のことも考慮して切磋琢磨した結果, 最終的に行き着くのはリスクを負わないこと, 言い換えると,利得を0にして負けない戦術を取る ということになっていたと思います. なので,質問者さんや No.1 さん,No.2 さんの 相手がランダムに 1/3 の確率でグーチョキパーを出す, という状況は番組の模範解答の前提とずれているだけではないかと. ただし,現実にはグー、チョキ、パーを1:1:1の割合で出す というような戦術を取る人も出てくる可能性があるので, 番組の模範解答はこういう考え方もあります,という程度のものでしょう.

banakona
質問者

お礼

ご回答ありがとうございます。 私は、番組の中で「相手がグー(x)ばかり出した場合にマイナスになって負けてしまう」旨の表現があったので、どんなクセを持った相手でも、対戦を繰り返せば模範解答がそこそこの成績をあげて、トータルで優勝することを期待していました。 私は決して「相手がランダムに 1/3 の確率でグーチョキパーを出す,」という状況(これは選手bです)のみを想定してはいません。それに、模範解答も選手bのみが相手なら両リーグ戦で勝っていますね。

  • mgsinx
  • ベストアンサー率36% (83/228)
回答No.2

僕が勝手に出した答えは以下の通りです。 問題文についてわざわざ2通りの解釈をし、2つの答えを出しました。 考え方として、相手はグー・チョキ・パーをそれぞれ同じ確率(1/3)で出すものと仮定します。 (1)確率的に、相手との距離が最も離れてこちらが勝利するときの比 グー:チョキ:パー=0:1:0 <理由>こちらがグー・チョキ・パーを出す確率をそれぞれx,y,zとおく。(x+y+z=1) 一回のじゃんけんで相手から相対的に見た自分の進む量をGとする。 (i)G=-6のとき その確率は(x+z)/3 (ii)G=-3のとき その確率はy/3 (iii)G=0のとき その確率は(x+y+z)/3 (iv)G=3のとき その確率はx/3 (v)G=6のとき その確率は(y+z)/3 (i)~(v)より、Pの期待値はy-x y-xが最大になるためにはx:y:z=0:1:0 (2)確率的に、なるべく少ない数でより遠くまで進むときの比 x:y:z=0:a:b (a,bは任意の正の実数) (つまり、グー以外の任意の手を出すということ) <理由>こちらがグー・チョキ・パーを出す確率をそれぞれx,y,zとおく。(x+y+z=1) 一回のじゃんけんで絶対的に(止まっている第3者から見て)自分の進む量をG'とする。 (i)G'=0のとき その確率は2(x+y+z)/3 (ii)G'=3のとき その確率はx/3 (iii)G'=6のとき その確率は(y+z)/3 (i)~(iii)より、G'の期待値はx+2(y+z) x+2(y+z)が最大になるためにはx=0

banakona
質問者

お礼

ご回答ありがとうございます。 お礼のついでといってはナンですが、#2さんも含めておそらく多くの方が持ったであろう「なぜ今頃こんな質問をするのか」という疑問にお答えします。 1.私が住む地方では、この番組の放送がかなり遅れているのです(つい最近、マス1グランプリが放送されました)。 2.実は最初にリーグ戦をやったのはかなり前なのですが、それは超古いパソコン上でu-basicで作ったプログラムでした。最近やっとVBAを習い始め、皆さんも簡単に実行できるものになったので、リストの公開(済み)も想定しつつ質問した次第です。 3.gooの会員につい最近なりました。(面白いですね。「教えて!goo数学」は。) 今後ともよろしくお願いします。

関連するQ&A