ブラックジャックの期待値をセル関数だけで計算する

以下の記事の続編となります。

https://qiita.com/takahasinaoki/items/a345bd145f9fa281b352

# はじめに
ブラックジャックの子のハンドについて、Stayした場合とHitした場合のそれぞれの期待値を表計算ソフトのセル関数のみで計算してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411106/b6be45db-bbf1-5b69-3c85-be29777fff69.png)

E3セルで親のオープンカードを選択することが出来て、そのオープンカード時の子のハンドのそれぞれの値の期待値をStayした場合とHitした場合のそれぞれにおいて動的に計算します。
サンプルの以下の図では、親のオープンカードが5で、子の手札が仮にソフトハンドの16の時、Stayした時の期待値は-0.17、Hitした時の期待値は0.07というように見ることが出来ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411106/5d696405-d00d-3f64-0a93-11197cf5eeae.png)

表計算ソフトの結果はこちらの[Googleスプレッドシート](https://docs.google.com/spreadsheets/d/1PsVrXkwfYL4SsMwgB6K-kt0UO0rii1cL1PymV0Hes0A/)で公開しています。
ただし、クリックしても閲覧しかできませんので、中身をいじったり確認したい方は、[Googleスプレッドシート]のメニューの[ファイル]から[ダウンロード]を選択し、[Microsoft Excel形式]でダウンロードしてください。
Excelソフトをお持ちでない方は、再度自身のアカウントの[Google Drive]にアップロードすれば、[Googleスプレッドシート]で開くことが出来るのではないかと思います。

# ルール
ブラックジャックの細かいルールは他に譲るとして、子は親のカードが１枚だけオープンされた状態で、自分の番の時にStayまたはHitのいずれかを選択します。
**※実際のルールでは、スプリットやダブルダウンなどのオプションを選択することが出来ますが、ここではシンプルにするためにそれらのオプションは無しとします。**

2021.6.15 追記
以下の記事で、スプリットやダブルダウンに対応した期待値を計算しましたので、興味のある方はあわせてご覧ください。

https://qiita.com/takahasinaoki/items/1d4eedfdda5ae10fb40b

Stayとは、現在のカードの合計で手を確定させます。
Hitとは、もう１枚カードを引きます。

カードの数え方
10,J,Q,Kはすべて10として計算します。
Aは11として計算し、22以上になってしまった場合は1として計算します。

勝敗の判定
以下の順番で勝敗を判定します
・子のカードの合計が、Aと10のカードの2枚のみで21となった場合は特別にブラックジャックと呼び、親がブラックジャックの時は引き分けとし、以外の時は掛け金の1.5倍のチップを受け取ります。
・子のカードの合計が、22以上となった場合はバーストと呼び親のカードの結果に関わらず掛け金を没収されます。
・親がバーストした場合は、掛け金と同額のチップを受け取ります。
・親の合計値と同じ場合は引き分けとし、掛け金がそのまま戻ってきます。（ただし、親がブラックジャックの21の場合は、子の負けとなり掛け金を没収されます）
・親の合計値より大きい場合は、掛け金と同額のチップを受け取ります。
・親の合計値より小さい場合は、掛け金を没収されます。

# 計算方法
期待値は、1チップ掛けた場合にいくらの損得になるかの理論値を計算します。
プラスの場合は勝ち、マイナスの場合は負けとなります。

各値の期待値は、以下で説明するStayした場合の期待値とHitした場合の期待値のいずれか大きい方を、その値の期待値とします。

Stayした場合の期待値は、以下の計算式で計算します
期待値 = 勝つ確率 × 1.0 ＋ 引き分けの確率 × 0.0 ＋ 負ける確率 × (-1.0)
ただし、ブラックジャックの時は以下の計算式となります。
ブラックジャックの期待値 = 勝つ確率 × 1.5 ＋ 引き分けの確率 × 0.0

勝つ確率と負ける確率は、以下のように計算します
例えば、子の手札が19の時の場合を例にとると
勝つ確率 = 親がバーストする確率 ＋ 親が18以下になる確率
負ける確率 = 親が20以上になる確率
引き分ける確率 = 親が19になる確率
※親の手札の確率については、[先の記事](https://qiita.com/takahasinaoki/items/a345bd145f9fa281b352)を参照ください。

Hitした場合の期待値は、ハードハンド[^1]とソフトハンド[^2]それぞれに分けて計算します。
例えば、ソフトハンド15のHitした場合の期待値は以下の期待値の合計で計算します。
10のカードを引いてハードハンド15になる確率 × ハードハンド15の時の期待値 ＋
9のカードを引いてハードハンド14になる確率 × ハードハンド14の時の期待値 ＋
･･･ 省略 ･･･
6のカードを引いて21になる確率 × 21の時の期待値 ＋
5のカードを引いてソフトハンド20になる確率 × ソフトハンド20の時の期待値 ＋
･･･ 省略 ･･･
2のカードを引いてソフトハンド17になる確率 × ソフトハンド17の時の期待値 ＋
Aのカードを引いてソフトハンド16になる確率 × ソフトハンド16の時の期待値

ハードハンドの16のように、引くカードによってはバーストしてしまう場合の期待値は
バーストするカードを引く確率 × (-1.0)をバーストした場合の期待値として加算します。

ただし、計算過程において、すでに引いてしまったカードの出現確率の減少は考慮していません。
例えばAを立て続けに3枚引いてソフトハンドの13になっていても、次にAを引く確率はかわらず約7.7%(4/52)で計算しています。それでも、考慮した場合の計算に対して無視できるほどの誤差の範囲だと考えています。

[^1]: ハードハンド：Aを含まない　または Aを1として計算した手
[^2]: ソフトハンド：Aを11として計算した手(10を引いてもバーストしない)

# 計算結果
画像をクリックすればリンクを開きます
[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/411106/5fd9c22b-8f3f-6085-3136-79e983ca8c29.png)](https://docs.google.com/spreadsheets/d/e/2PACX-1vQod0pEban4j9m7DGrn3328IO6LpJEMGHvj1k-0HxcQ6Ib4Dub3hlR8nrAHuCLLbQ/pubhtml?gid=673458997&single=true)
セルの書式がオレンジ色の部分は、StayとHitのうち期待値が大きくなるもので、いわゆる**基本戦略**といわれるものとなります。

# 参考
2024.01.20
以下の記事で全体の期待値を計算してみました

https://qiita.com/takahasinaoki/items/d031a4e7076953ab069f

# 関連記事
https://qiita.com/takahasinaoki/items/a345bd145f9fa281b352

https://qiita.com/takahasinaoki/items/1d4eedfdda5ae10fb40b

https://qiita.com/takahasinaoki/items/d031a4e7076953ab069f

https://qiita.com/takahasinaoki/items/f92b4cc3d41ac22a7ae3

https://qiita.com/takahasinaoki/items/a3e023ede0545582cf52