【世界のアソビ大全51】ヨットを数学的に考える③:合計点数の期待値を最大化する

こんにちは。
ヨットを数学的に考えるシリーズ第三回は「合計点数の期待値を最大化する」というテーマでお話しします。前回記事はこちら

ヨットのイメージ。公式サイトより引用
ヨットのイメージ。公式サイトより引用

前回の「②:役の期待値を最大化する」では、12回目の手番で獲得できる点数を最大化する方法を考えました。コンピューターの力を借りて、それぞれの役でどれぐらいの点数が期待できるのか計算しました。

今回はさらに進んで、ゲーム全体で獲得できる合計の点数の期待値を最大化する方法についてお話ししていきます。

この記事は #じゃぱねっと夏の自由研究 に参加しています。

前回の記事で分かったこと

改めて、前回の記事で分かったことを整理しておきます。

前回は12回目の手番始まって「さあ今からサイコロを投げるぞ!」というタイミングでの期待値の最大値を計算しました。12回目の手番が始まるタイミングでもいろいろ状況があって、少なくとも2つの変数がありました。

  • 最後に残っている役はどれか
  • (ボーナスが狙える場合) ボーナス獲得まであとサイコロ何個分か

これらをまとめるために以下のような表を準備します。

役↓小計→ 0点 1点 2点 ... 62点 63点以上
エース                  
デュース                  
トレイ                  
フォー                  
ファイブ                  
シックス                  
チョイス                  
フォーダイス                  
フルハウス                  
S.ストレート                  
B.ストレート                  
ヨット                  

縦軸は役、横軸は12回目の手番の開始時点での小計です。小計が63点以上の場合はすでにボーナス獲得済みのため、新規のボーナスが見込めないものたちとしてひとつにまとめています。

記入が面倒なので省略しますが、前回の記事の計算結果はこの表に記入することでまとめることができます。

ゲーム全体の最大期待値を求めるにはどうする?

ゲーム開始時点での最大期待値を求めるために必要なことを考えます。

ゲーム開始時点ということは、1回目の手番の開始時点での最大期待値を求めるということです。前回は12回目の手番開始時の最大期待値を求めたので、順番に11回目の開始時→10回目の開始時→...→2回目の開始時と辿って、最終的に1回目の開始時にたどり着けるとしたら、結果が出そうです。

でもそんなことは可能なのでしょうか?手がかりがなくて分からないときは、とりあえず手を動かすことが大事です。まずは11回目の手番開始時の期待値を求める方法について考えてみます。

11回目の手番開始時での最大期待値を求める

前回の方法にならって、11回目の手番の最後の状態から始めます。11回目の手番の最後は、ある出目パターンが確定していて、どの役にするか選ぶことになります。残りの役は2つのはずなので、出目パターンを見てどちらを選ぶべきか考えることになりますね。

いくつかの具体例を考えて、練習してみましょう。

【具体例1】
残りの役がチョイスとB.ストレートだとします。サイコロは 1 2 3 4 5 となっていて、もう振りなおしはできない状況だとします。このとき、チョイスとB.ストレートのどちらを選ぶのがより良い選択でしょうか?

まず、12回目の手番におけるチョイスとB.ストレートの最大期待値を確認します。

期待値
チョイス 23.333...
B.ストレート 7.83285...

次に、それぞれの役を選んだ場合に分けて考えます。

  1. チョイスを選んだ場合
    チョイスの点数が15点に確定します。次の手番での点数の期待値は7.83...なので、2回合わせて22.83...点が期待されます。
  2. B.ストレートを選んだ場合
    B.ストレートの点数が30点に確定します。次の手番での点数の期待値は23.333...点なので、2回あわせて53.333...点が期待されます。

これらから、B.ストレートを選んだ方が良い、となります。

【具体例2】
残りの役がフルハウスとヨットで、出目が 1 1 1 2 2 だったとします。どちらの役を選ぶのが良いでしょうか?

先ほどと同様に、12回目の手番が終わった時点でのフルハウスとヨットの期待値を確認します。

期待値
フルハウス 7.01355...
ヨット 2.30143...
  1. フルハウスを選んだ場合
    フルハウスの点数が7点に確定します。次の手番での点数の期待値は2.301...なので、2回合わせて9.301...点が期待されます。
  2. ヨットを選んだ場合
    ヨットの点数が0点に確定します。次の手番での点数の期待値は7.01...なので、2回合わせて7.01...点が期待されます。

これらから、フルハウスを選んだ方が良い、となります*1

【具体例3】
次は少しだけ複雑なケースを考えます。残りの役はファイブとシックスで、現時点での小計は50点とします。出目は 1 4 5 5 6 だとします。

この場合は、どちらの役を選ぶかによって、12回目の手番の時点での小計が異なります。ファイブを選んだ場合は60点、シックスを選んだ場合は56点となります。そこで、この2つのケースの期待値を確認しておきます*2

役↓小計→ 56点 60点
ファイブ 34.99 43.26
シックス 37.10 45.37
  1. ファイブを選んだ場合
    ファイブの点数が10点に確定します。12回目の手番開始時点での小計は60点となります。このときシックスの期待値は45.37なので、2回合わせて55.37点が期待されます。
  2. シックスを選んだ場合
    シックスの点数が6点に確定します。12回目の手番開始時点での小計は56点となります。このときファイブの期待値は34.99なので、2回合わせて40.99点が期待されます。

これらから、ファイブを選んだ方が良い、となります。


以上から「残りの役のペア」「現時点での小計」「出目パターン」をそろえれば、自動的にどちらの役を選ぶべきかが決まり、期待値も定まる、ということが分かります。すべてのパターンで計算すれば、以下のような表が作れそうです。

残りの役 小計 出目パターン 期待値
\vdots
\vdots
\vdots
\vdots
チョ&B.ス - 1 2 3 4 5 53.333...
フル&ヨッ - 1 1 1 2 2 8.301...
ファ&シッ 50 1 4 5 5 6 55.37
\vdots
\vdots
\vdots
\vdots

あとは振りなおしの部分を考えるのですが、これは前回と全く同じです。例えば、先ほどの表で残りの役が「ファイブ&シックス」で、小計が「50」の欄だけを抜き出してみると、こんな見た目になるはずです。

出目パターン 期待値
1 1 1 1 1 25.06
\vdots
\vdots
1 4 5 5 6 55.37
\vdots
\vdots
6 6 6 6 6 75.53

これに対して前回同様に処理すると、残りの役が「ファイブ&シックス」で、小計が「50」の場合での、最初にサイコロを振る前の時点での期待値が出ます。

最終的に以下のような表が得られます。

残りの役 小計 期待値
\vdots
\vdots
\vdots
チョ&B.ス - 34.27...
フル&ヨッ - 13.17...
ファ&シッ 50 31.396...
\vdots
\vdots
\vdots

あるいはこのような形にもできます。

残りの役↓小計→ 0点 1点 2点 ... 62点 63点以上
チョ&B.ス                  
フル&ヨッ                  
ファ&シッ                  
\vdots
\vdots
\vdots
\vdots
\vdots
\vdots
\vdots

これで11回目の手番の開始時点での最大期待値が求まりました!

ゲーム全体の最大期待値を求める

ここまでで、12回目の手番開始時点での期待値を前提にして、11回目の手番開始時点での期待値を求めることができました。この手順を一般化して、11回目→10回目→9回目→...→1回目とリレーしていきたいところです。

例えば6回目の手番開始時の期待値が分かっている状態で、5回目の手番開始時の期待値を求めることはできそうでしょうか?

これは次のようにすればよさそうです。まず6回目の手番開始時の期待値が分かっているということは、残りの役が6つの場合でのすべての期待値が求まっているということです。つまり以下の表がすでに埋められています。

残りの役↓小計→ 0点 1点 2点 ... 62点 63点以上
(6つの組み合わせ1)                  
(6つの組み合わせ2)                  
(6つの組み合わせ3)                  
\vdots
\vdots
\vdots
\vdots
\vdots
\vdots
\vdots

5回目の手番開始時点の期待値を求めるには、残りの役が7つの場合での期待値を求める必要があります。これは以下の手順をたどれば求めることができます。

  • 各出目パターンに対して、残りの役の選び方をすべて試して、期待値の最大値を求める。これをすべての役の組み合わせ & 小計に対して行う。
  • 前回の記事のやり方を使って、2回の振りなおし分を考慮し、最後に各出目が出る確率から期待値を計算する。

この手順をたどれば、以下の表が完成することになります。

残りの役↓小計→ 0点 1点 2点 ... 62点 63点以上
(7つの組み合わせ1)                  
(7つの組み合わせ2)                  
(7つの組み合わせ3)                  
\vdots
\vdots
\vdots
\vdots
\vdots
\vdots
\vdots

これでリレーをする方法が分かりました!同じやりかたで手番を遡っていくと、最終的に以下の表にたどり着きます。

残りの役↓小計→ 0点 1点 2点 ... 62点 63点以上
(12個の組み合わせ=全部)                  

ゲーム開始時点は小計は0点ですから、この表の「0点」の欄がゲーム全体での最大の期待値となります!

計算結果

コンピューターで計算したところ、最終的な最大期待値は191.7743...点となりました。計算時間は2分15秒でした。コンピューターすごい。

ところで、この記事を書き終えたタイミングで検索してみると、このシリーズで行った全く同じことを行っている記事を見つけてしまいました。どうしてこのタイミングで???
qiita.com

記事を読んでみましたが、行っている計算自体は全く同じのようです。この記事によると期待値は 191.76 点で、私の計算と一致していると言ってよいでしょう。自分の計算にミスがなさそうと分かってすこし安心しました。

またこちらの記事では、期待値を最大化する戦略で何度もプレイした場合での点数の分布も調べているようです。気になる方はぜひ読んでみてください。

ヨットについて数学的に考えるシリーズは、今回で一旦完結としたいと思います。もし気が向いたら、なにかしらのテーマで続編をいつか書くかもしれません。

ではまた。


追記: 自分でも最大期待値の戦略で100万回プレーさせてみて、ヒストグラムをプロットしてみました。いくつもコブができているようなので、それぞれ何に対応するか考えるのも面白そうですね。

100万回プレーのヒストグラム
100万回プレーのヒストグラム

次回: ↑の話でシリーズ続編を書きました。
smooth-pudding.hatenablog.com


サイコロのイラストはこちらからお借りしました:かわいい&かっこいい無料イラスト素材集|イラストイメージ

*1:もっとも、フルハウスを選んだ場合、7点以上獲得できる確率は極めて低いですから、例えば「あと8点ぐらい取れば勝てそう」といった状況ならヨットを選ぶほうが良いかもしれません。本文中での比較はあくまで期待値を基準にした比較です。

*2:56点のときはいずれもボーナスまで2個の目が必要で、60点のときはいずれもボーナスまで1個の目が必要です。