こんにちは。
ヨットを数学的に考えるシリーズ第二回は「役の期待値を最大化する」というテーマでお話しします。前回記事はこちら。
前回の「①:基礎知識編」では、期待値の考え方を導入し、ゲームの途中で選択の権利があるような状況において、期待値を基準に比較することを行いました。具体的に簡単なサイコロのゲームを考えて、点数の期待値を最も大きくするような戦略について考察しました。
今回はその考え方をベースに、ヨットにあるそれぞれの役に着目し、その点数の期待値の最大値を計算する方法について説明します。
この記事は #じゃぱねっと夏の自由研究 に参加しています。
- ヨットのルール
- 最大の期待値を求めるための方針
- 用語の導入
- 計算の手順1: 振りなおしの確率の整理
- 計算の手順2: 各出目パターンに対する点数の計算
- 計算の手順3: 振りなおしが残り1回の時点の最大期待値を求める
- 計算の手順4: 振り直しが残り2回の時点の最大期待値を求める
- 計算の手順5: サイコロを振る前の最大の期待値を求める
- 計算結果
- まとめ
ヨットのルール
具体的な話に入る前に『世界のアソビ大全51』でのヨットのルールを整理しておきます*1。
目的
サイコロを使った2人対戦のゲームです。高い得点を取ったプレイヤーの勝利です。
用いる道具
1. スコアカードと筆記具
2. サイコロ5個
スコアカードは以下のようなものを用います。
役 | Player 1 | Player 2 |
---|---|---|
エース | ||
デュース | ||
トレイ | ||
フォー | ||
ファイブ | ||
シックス | ||
(小計) | ( ) | ( ) |
☆ボーナス | ||
チョイス | ||
フォーダイス | ||
フルハウス | ||
S.ストレート | ||
B.ストレート | ||
ヨット | ||
【合計】 |
「役」の欄のうち、「(小計)」「☆ボーナス」「【合計】」以外の12個が役の名前です。
ゲームの流れ
2人のプレイヤーは交互に手番を行います。手番では以下を順に行います。
- 5個のサイコロを振る
- 5個のサイコロのうち、振りなおすサイコロを選ぶ (0個でもよい)
- 選んだサイコロを振りなおす
- 2., 3. をもう一度行う
- スコアカードで空欄になっている役から1つ選ぶ
- 役に応じて、出た目から点数を計算し、スコアカードの欄 (役の行とプレイヤー名の列の交わるマス) にその点数を記入する
以上の手番を各プレイヤー12回ずつ行います。
すべての手番が終了した時点で、次を行います。
- (小計) の欄に、エース・デュース・トレイ・フォー・ファイブ・シックスの欄に書かれた点数の合計を記入する
- (小計) の値が63以上なら「☆ボーナス」の欄に35と記入し、62以下なら0と記入する
- 【合計】の欄に、(小計) の欄以外のすべての欄に書かれた点数の合計を記入する
【合計】に書かれた数字が最終的な点数となります。
役ごとの点数の計算方法
「役の成立条件」と「点数の計算式」からなります。役の成立条件が満たされたときのみ、点数の計算式によって点数が計算されます。成立条件が満たされない場合は、点数は0となります。
役の名前 | 役の成立条件 | 点数の計算式 |
---|---|---|
エース | 常に成立 | 1の目の和 |
デュース | 常に成立 | 2の目の和 |
トレイ | 常に成立 | 3の目の和 |
フォー | 常に成立 | 4の目の和 |
ファイブ | 常に成立 | 5の目の和 |
シックス | 常に成立 | 6の目の和 |
チョイス | 常に成立 | すべての目の和 |
フォーダイス | 同じ目が4つ以上 | すべての目の和 |
フルハウス | 同じ目が2つ+同じ目が3つ*2 | すべての目の和 |
S.ストレート | 4つ以上の目が連続 | 15 |
B.ストレート | 5つの目が連続 | 30 |
ヨット | すべての目が同じ | 50 |
最大の期待値を求めるための方針
さて、いよいよ期待値の最大値を求める方法について説明します。ここで「最大値」とは、いろいろな戦略がある中で、最も期待値が大きくなるような戦略を選んだ場合での、期待値を求める、という意味です。
実は、具体的な戦略を頭で考えるという方針は採用しません。前回の記事のようなシンプルなゲームであれば、具体的な戦略を考えることはさほど大変なことではありませんでした。しかし、ヨットにおいては「どうサイコロを残すのか」の選択肢が膨大にあり、またサイコロの目の出方の種類も多いため、人力で考えるのはかなり大変な作業となります。
人力では大変なとき、頼りになるのは?そう、コンピューターです。先ほど「膨大にある」と言いましたが、それは人間から見た場合の話です。少し工夫してプログラムを作成したところ、どうやらコンピューターにとっては大した計算量ではないようでした。
そこで、コンピューターにどうやって期待値の最大値を計算させたか、順を追って説明したいと思います。
この記事では、12回目の手番、つまり残りの役が1つになった状況での、追加の点数の期待値の最大値について考えます。
用語の導入
いくつか用語を導入しておきます。
- 出目パターン
...サイコロ5個の目の組み合わせのこと。例えば や など。ルール上、サイコロの順番は意味を持たないので、昇順に並べることとする。 - 部分出目パターン
...サイコロ5個以下の目の組み合わせのこと。例えば や など。0個や5個の場合も含む。 - (ある部分出目パターンがある出目パターンに) 含まれる
...出目パターンのうちいくつかをうまく選ぶと、部分出目パターンを作れること。例えば、部分出目パターン は出目パターン に含まれる。特にサイコロ0個の部分出目パターンはすべての出目パターンに含まれる。
計算の手順1: 振りなおしの確率の整理
まず、サイコロの振りなおしに関する確率を整理することから始めます。
例で考えます。 と出たとして、このうち を残してそれ以外を振りなおすとしましょう。すると、例えば という出目パターンが得られます。
さて と残したあとに、振りなおした結果 となる確率はいくらでしょうか?答えは です。サイコロを2回振って、一方が , もう一方が となる確率と一致するからです*3。
このように、部分出目パターンに対して、振りなおしによってある出目パターンが得られる確率を求めることができます。これを表にまとめていきます。部分的にいくつか書き出してみると、こんな感じです。
部分出目パターン | 出目パターン | 確率 |
---|---|---|
|
|
|
|
|
|
ちなみにこの表は全部書くと4368行あります。人間からするととんでもないサイズですが、コンピューターにとってはほんのちょっとです。
計算の手順2: 各出目パターンに対する点数の計算
出目パターンは全部で252通りあります*4。それぞれに対して点数を計算し、表にまとめていきます。
例えばフルハウスに対して作るとこんな感じです。
出目パターン | 点数 |
---|---|
これを役の数だけ作っておきます。
計算の手順3: 振りなおしが残り1回の時点の最大期待値を求める
ヨットの醍醐味、振りなおしの判断の部分を考えてみます。ここでは仮に、空欄として最後に残っている役がフルハウスとして考えてみます。
あと1回の振り直しが残っている時点で、仮に という出目パターンだったとします。プレイヤーは、このうちどのサイコロを残すか選択することになります。
例えばこんな選択肢があります。
- 選択肢A: を残す
- 選択肢B: を残す
- 選択肢C: 全部振りなおす
他にもたくさん選択肢があります。ではどれが最も良い戦略でしょうか?
選択権がある場合に、期待値を使って選択肢を比較する方法は、まさに前回の記事で紹介しましたね。各選択肢を選んだ場合での期待値を計算し、その期待値が最も大きいものを最良の選択肢とする、という方法でした。今回もその方法を使います。
具体的に、選択肢Aを選んだ場合の期待値を計算してみます。
まず「手順1」で作った表が役に立ちます。この表のうち、部分出目パターンが である部分を抜き出すと、以下のようになります。
部分出目パターン | 出目パターン | 確率 |
---|---|---|
次に「手順2」で作った表が役に立ちます。この表を参照しながら、先ほどの表に「点数」のカラムを追加してみます。
部分出目パターン | 出目パターン | 確率 | 点数 |
---|---|---|---|
これで、すべての事象に対して、その事象が起こる確率とそのときの点数がすべて求まりました。この表から期待値を計算すると
となります。
同様にして、選択肢Bや選択肢C、その他の選択肢に対しても、「手順1」「手順2」で作った表を組み合わせることで、それぞれ期待値を求めることができます。さらにこれらのうち最大のものを選べば、これが「 から振りなおしを1回残している状態のときの最大の期待値」となるわけです。
に含まれる部分出目パターンはかなりの数があるため、この計算は手計算ではとても実行できないほどの量になります。ですが、コンピューターはとても計算が速いので、真正面から全パターンを計算させることができます。
さて、ある出目パターンに対して、最大の期待値を求めることができました。この計算をすべての出目パターンに対して行います。つまり「この出目パターンで1回振りなおせるなら期待値はこの値」「次のこの出目パターンで1回振りなおせるなら期待値はこの値」「次の...」...と、すべてのケースで繰り返します。すごい計算量になりそうですね。でもコンピューターなら余裕です。計算結果を表にすると、以下のようになります。
出目パターン | 期待値 |
---|---|
これを、フルハウスに限らずすべての役について実行します (!)
計算の手順4: 振り直しが残り2回の時点の最大期待値を求める
ヨットのルールでは2回振りなおしできます。その場合の期待値はどう計算するのでしょうか?
ヒントは前回の記事の最後に行った考察にあります。考察の結果分かったことは「途中以降の期待値が分かっているのであれば、対応する部分をその期待値で置き換えることで、効率的に期待値を求めることができる」ということでした。
今回もそのケースにあたります。つまり、2回のうち1回振りなおしたあとの点数の期待値は、直前の「手順3」で作った表にまとめられているので、これを活用すればよいわけです。具体的には、途中まで「手順3」と同じ手続きを行い、点数のカラムを追加するタイミングで「手順3」で得られた表を使って、代わりに「1回振りなおしの期待値」という欄をつくればよいわけです。
部分出目パターン | 出目パターン | 確率 | 1振期待値 |
---|---|---|---|
あとは「手順3」と全く同じです。各出目パターンに対して、最大期待値が求まります。
出目パターン | 期待値 |
---|---|
やはりこれを役の数だけ行います。
計算の手順5: サイコロを振る前の最大の期待値を求める
ここまでで、一回目のサイコロを振り終わった直後での、各状態に対する期待値がすべて求まりました。最後に、各出目パターンが出る確率を使って、最終的な期待値を求めます。まず「手順4」の表に、各出目パターンが出る確率のカラムを追加します。
出目パターン | 2振期待値 | 確率 |
---|---|---|
最後に、(2振期待値)×(確率) の和を求めればOKです。この値は 7.01355... という値になりました。これが最後にフルハウスだけが残っていたときの、サイコロを振る前の時点での追加点数の期待値です。これを他の役に対してもすべて実行すればゴールです!
計算結果
手順の説明は以上です。最後に、この記事で説明した手順に沿って計算した期待値をお見せします。
まず、ボーナスを考慮に入れない場合の期待値です。
役 | 期待値 |
---|---|
エース | 2.10648...*6 |
デュース | 4.21296... |
トレイ | 6.31944... |
フォー | 8.42592... |
ファイブ | 10.53240... |
シックス | 12.63888... |
チョイス | 23.333...*7 |
フォーダイス | 5.61126... |
フルハウス | 7.01355... |
B.ストレート | 7.83285... |
S.ストレート | 9.23163... |
ヨット | 2.30143... |
グラフにしてみると、こんな感じになりました。
この結果からいろいろなことが分かりそうです。自分なりに考察してみるとこんな感じになりました。
- チョイスが圧倒的に最大期待値が高い。チョイスを最後に残せるとかなり強そう。
- S. ストレートの期待値が意外に高い。揃えにくさの割に点数が高めということか。
- ヨットの期待値はエースの期待値とほぼ差がない。最後にヨットを残すのは相当な大博打らしい。
次に、ボーナスを考慮に入れた期待値です。最後の手番の開始時点で小計が62以下のとき、最後の手番でボーナス条件を満たすチャンスが残っていることがあります。
エース・デュース・トレイ・フォー・ファイブ・シックスが最後に残っていて、対応する目が何個でればボーナスが確定するかによって、期待値が異なります。
役の名前 | あと1個 | あと2個 | あと3個 | あと4個 | あと5個 |
---|---|---|---|---|---|
エース | 34.83 | 26.57 | 14.53 | 5.76 | 2.57 |
デュース | 36.94 | 28.67 | 16.63 | 7.87 | 4.68 |
トレイ | 39.05 | 30.78 | 18.74 | 9.97 | 6.78 |
フォー | 41.15 | 32.89 | 20.85 | 12.08 | 8.89 |
ファイブ | 43.26 | 34.99 | 22.95 | 14.19 | 11.00 |
シックス | 45.37 | 37.10 | 25.06 | 16.29 | 13.10 |
※見やすさのために小数点以下第3位で四捨五入しています。
ボーナスなしの場合の期待値との差を取ると、役によらず以下の値になります。
ボーナスまで | ボーナス期待値 |
---|---|
あと1個 | 32.72830... |
あと2個 | 24.45935... |
あと3個 | 12.41974... |
あと4個 | 3.65492... |
あと5個 | 0.46452... |
これもグラフにしてみると、こんな感じになりました。
1個出せばボーナスという状況であれば、ボーナス分だけで33点ぐらい期待できますが、ボーナスまでの距離が1個遠のくごとに約10点ぐらい期待値が下がるようです。
まとめ
前回の期待値のお話を踏まえて、今回は12回目の手番における期待値の計算方法を紹介しました。コンピューターの絶大な計算力を借りて、各役の最大期待値を求めることができました。きっと、最終手番に近づいたときの判断材料として役に立つのではないでしょうか。
この記事では期待値の求め方とその結果を紹介しましたが、実際にその最大の期待値を実現するためには、出目に応じて適切に振りなおすサイコロを選択する必要があります。今回はコンピューターによる力任せの計算を行ったため、個々の状況でどう振りなおすべきかについては整理できませんでした。ただし、簡単な言葉でまとめられるかはともかく、データ上では最も有効な振りなおし方が定まっている訳なので、コンピューターに「こんな目が出たんだけど、どのサイコロを振りなおした方がいい?」と聞いて「これだよ!」と教えてくれるプログラムは作れるはずです。
次回は、ゲーム開始時点での点数の期待値を求める方法について説明したいと思います。
ではまた。
次回:
smooth-pudding.hatenablog.com
サイコロのイラストはこちらからお借りしました:かわいい&かっこいい無料イラスト素材集|イラストイメージ