ブラックジャックのカウンティングシミュレーションのExcelツールを公開
世界中でこういうツールありそう。何番煎じかわからないけど。
どうも、ハイエナおじさんです。
最近(というか以前から)このブログの読者さんから、私が作ったブラックジャックのツールの改善要望とかを頂いていまして。
折に触れて改良を加えながら今まで来ているのですが、先日、カウンティングを使いながらベーシックストラテジーで挑んだ場合、長期的なプレイでどんな結果になるか知りたい(そこまで含めてツール化して欲しい)という話がありまして。
で、ツール化まではしてませんが、こっちの記事でブラックジャックでカウンティングをシミュレーションした結果を公開しています。(いまの私のスキルではツールが作れない‥)
で、今日のブログ記事では次のことを紹介しようと思いました。
・ベーシックストラテジーシミュレーターで出力した結果のCSVファイルをカウンティングExcelツールに入れてシミュレーションする手順
・読者さんがご自身でご自身のカウンティングをシミュレーションできますよっていう話
ではいってみましょう。
カウンティングのExcelでシミュレーション
以下の手順です。
1.ベーシックストラテジーシミュレーターを動かす
まず、このページでブラックジャックの繰り返しプレイのシミュレーションが出来ます。PCでアクセスしてください。
遷移先で以下の画面が出ます。
・デッキ数を指定して(8デッキがオンラインカジノでよく使われるので良いと思う)
・試行回数は1001回以上を指定してください。(そうするとCSVファイルダウンロードになる)
とりあえず動かしてみたい方は1001回で出力してください。
・いつシャッフルには52~416までの数値を入力。これは残カード枚数が何枚になればシャッフルするかのタイミングを指定するのに使います。ベラジョンカジノだとだいたい残200枚前後でシャッフルされてるように思う。
これで次のような形式のCSVファイルをダウンロードできます。***①
列 | 意味 |
---|---|
Pハンド | プレイヤーハンド |
P点 | プレイヤー点数 |
Dハンド | ディーラハンド |
D点 | ディーラー点数 |
ベット | ベット額(基本1、ダブルは2) |
ox | 勝敗判定 |
リターン | 獲得額 |
損益 | 今回の損益 |
累計 | 累計の損益 |
備考 | 備考 |
残枚数 | カードシューにある残カード数 |
シャッフル | シャッフルのタイミングならo |
そもそもこれはプレイヤーvsディーラーの1対1の勝負を想定し、ランダムに配られるカードで、ベーシックストラテジーを基にプレイを繰り返した場合の結果を出力しています。
だから勝ち負けとか損益とかも出力されちゃってる。
このCSVをカウンティングにも流用しようって話。
2.カウンティング用のエクセルを開く
以下にカウンティングをシミュレーションするためのエクセルを用意したので、ダウンロードしてください。***②
https://a-taichi.com/download/bjcounting-simu-tool.zip
予め私の方で数式を入力してあって、①シミュレーション結果のCSVをコピペするだけで動くようにしてあります。
①のCSVをエクセルで開く
②のエクセルを開く
bjcounting-simu-tool.xlsx
①の2行目~最終行(今回は1001プレイ)まで。列は A列~M列までを範囲選択してコピー。
②エクセルの、A3セルをクリックして貼り付け。こうすれば1001プレイまで全部コピペできます。
↓すると自動で計算が入ります
3.カウンティングのエクセルの見方
エクセルですがN列~AY列まではカウンティングするための前準備の数式が入ってるだけなので、見なくてOKです。(この列を非表示にしておいてもよい。気になる方はどんな数式が入ってるか見てみてください)
BA列にランニングカウント、BB列に真のカウントが自動計算して表示されます。
カウンティングにも色々システムがあると思いますが、いわゆる標準的なHiLoシステムでカウントしています。
この真のカウントが3以上になると、ベット額を増額(あるいはゲームに参加)するタイミングとするのが定説でしょうか。
いつプレイに参加するか、いくらのベット額にするかはプレイヤーの裁量に任せますね。
ベット増額じゃなくて真カウントが3以上のときだけベットに参加する、としてもよいでしょう。(ベラジョンカジノのライブブラックジャックだと参加しないで見てるだけ‥という事も可能なので。とはいえ5分ぐらい見てるだけだとテーブルから追い出されてしまうので、実際にプレイするときはそのあたりを勘案しなきゃいけない)
BC列を見てください。
とりあえずエクセルではタイミング(BC2のセル)を「3」にしました。
真カウントが3以上になると、この列にoが表示されます。
タイミング=「参加するタイミング」とか「増額のタイミング」と捉えてください。
今回のエクセルでは真カウントが3以上で有利な時だけベットに参加するように想定しました。
BC2のセルのタイミングを「3」じゃなく他の数字に変えてもよいです。3.5や4にすればよりPlayerに有利な状況でのみベットするようなことを想定できるでしょう。その代わりベットするチャンスは減るでしょうけど。
次にBD列ですが、これはゲームに参加する時のベット額です。BD2セルに額を10として入力しました。カウンティングで有利な時だけベット額10でゲームに参加。
なのでゲームに参加しないときはベット額が0になってるはずです。もし通常時はベット額1でプレイし、タイミングが来たらベット額を10に増やすようなことをしたい場合は、あなた自身でエクセルを改変する必要があります。
BE列~BH列はほとんどG列~J列の転記です。既に行われているベーシックストラテジーを使って1001回プレイした時の勝敗とかをそのまま流用。
最終的に儲かったのかどうかは1001プレイ目のBH列を見てください。
今回は運よく125のプラスで終えたようですね。
出力する①のCSVファイルは毎回ランダムな結果を吐くので何回やっても異なる結果になるでしょう。(カウンティングを使ってもマイナスで終えることもあります。)
もっと多くのプレイ数をいっぺんにシミュレーションしたい場合
出力する①のCSVファイルですが1万回プレイでも出力できます。(処理にかなり時間がかかる)このCSVを②エクセルにコピペしてもよいです。ただし数式が入ってるのは1500行目までなので、N列~BH列の数式が入ってる行を1万プレイ分の行を増やさないといけないですね。
1500行目をマウスでクリックして選択して、右クリックコピー。
1501行目から下へぐいっと増やしたい行だけ選択して、右クリック貼り付け。これで行を増やせます。
確認してないけど成功すれば1万回分のカウンティングの結果が表示されるはずです。
エクセルはあんまり動作確認してません(笑)なのでどこかで不具合とかあるかもしれません。お許しを。。
あなただけのカウンティングを実装して動きをチェックしてもよいでしょう
多少エクセルを使える人なら(いくつかの関数を使える程度でOK)、これを改変してカウンティングをしていけばよいと思います。
例えば今回お問い合わせいただいた方は、10~Aのハイカードが使われた数だけをカウントして比率を出しているご様子でした。
あるいは2~7のローカードが使われた数をカウントしてもいいですね。
デッキに含まれる2~7のローカードの比率が少なくなれば、Dealerのドロー時の小刻み回数が少なくなってバストしやすくなるからPlayer有利だと捉えることができます。
初期状態だと2~7のカードの比率は、デッキ全体の46.15%もあります。例えばこれが(45%未満/44%未満/43%未満/42%未満)になったらPlayer有利としてベットに参加するようなことを想定してみます。
何パーセントにするか閾値をどう決めるかはPlayerの裁量です。
それではエクセルに数式を入れる手順をお見せしておきます。
黄色で塗ったBA列から右側は一旦全部削除して、そこに数式などを入れていけばよいです。
(1)BA列に2-7使用数を入れる
=SUM(AM3:AR3)
と入力。これで2-7のカードが使われた枚数をカウントします。
(2)BB列に2-7累計使用数を入れる
BB3セルに
=BA3
を入力。最初の1回目なので、累計はその左のセルの値そのもの。
(3)BC列に残2-7を入れる
2~7の初期の総数は6種類×4絵柄×8デッキですから、
=6*4*8-BB3
とします。これで初期の2~7の総数から使用済み枚数を引いた残数が出ます。
(4)BD列に2-7比率を入れる
これはBC3/L3とします。
L3に何が入ってるかと言うと、全体のカードシューに残ってるカード数です。これで2~7の比率が出ます。
この数値が少ないほどローカードがデッキに少ないことをになってきます。
(5)タイミングを入れる
4で計算した比率が42%未満になったらoを表示するようにしたいと思います。
タイミングの下に0.42と入力しておいて、これを使いまわします。
BE3セルに
=IF(BD3<$BE$2,"o","") と入力。
これが何を表してるかというと、BD3<BE2だったらという条件文です。
BD3<BE2だったらoを表示、そうでなければ何も表示しないという指示をしています。
(6)BA3~BE3をコピーして、その下の行に張り付け
(7)BB列の2-7累計使用数のとこだけちょっと手を加える
BB4セルには、
=IF(M3=”o”,0,BB3)+BA4
と入力。
これが意味するのはM3セルがoだったら。つまり1つ前のプレイでシャッフルがされてたらと言う条件文。シャッフルされたらカウンティングはリセットされるので。
シャッフルされてたら2-7累計使用数は0になってるので0を。そうでなければ1つ前の累計使用数(BB3)を、今回の使用数(BA4)に足し算しています。
(8)BA4~BE4をコピーして全行に張り付け
これでカウンティングの実装は完成です。
タイミングがoになった次の行でベットに参加しましょう。
長くなってきました。この記事読んでくれてる人いるんだろうか(不安)。ですが続けていきます。
もっとスマートなやり方あると思うんだけど、工程をすべてお伝えすることでわかりやすくはなるかなと思いまして。
(9)ベットするタイミングでベット額を入力
ベット額は10を入れておいてこれを使いまわす。
前回「タイミング」がoになった次の行でベット額を10にしてみましょう。
BF3のセルに
=IF(BE2=”o”,$BF$2,0)
これでベットのタイミングで10を賭けるような感じになる。
ダブルの時は倍賭けにしないといけないから、BF3のセルは
=F3*IF(BE2=”o”,$BF$2,0)
としてF3セルを掛け算しておく。これはダブルの判定をしてるんじゃなくて、
ベーシックストラテジーを使ってプレイした時のベット額F41を流用することでダブル判定の代用としている。めんどくさい。
シミュレーションの出力を流用してエクセル上でカウンティングしようという試みなので、こうなってる。仕方がない。
全部ワンボタンで出来ればいいんだけど、それができないからこうなってる。(´・ω・`)
これも縦に全コピー。
(10)勝敗判定を転記する
BG3セルには
=G3
を入力G41には勝敗判定が入ってるので、それを転記してる。
(11)リターンを入れる
BH3には
=IF(BF3=0,0,H3*$BF$2)
としている。
これはBF3=0なら(つまり賭けをしてないなら)リターンは無いので0を表示、
賭けをしているならH3のリターンにベット額BF2を掛け算している。
このセルも縦にコピー。
(12)損益を入れる
リターン - ベット額で計算できるからBI3には
=BH3-BF3
と入力。
これも縦にコピー。
(13)最後は累計の列
BJ3はBI3をそのまま入れる
=BI3
BJ3の次の行BJ4には、累計BJ3に今回の損益BI4を入れる。なのでBJ4は
=BJ3+BI4
となる。
このBJ4の式を縦にコピー。
これで完成。
閾値0.42にしたときの1001回プレイ後の損益は・・・?
累計の列の一番最後を見れば+15になってるから微プラスで終了した様子です。
★そういえばスプリット時の判定を実装してない‥判定が大変だから修正なしでいいや。気になる方は修正してください。
それからエクセルは改変自由ですので読者の方の自由に使ってください。
ツールに不具合があればお知らせください🙇
エクセルの操作方法とか数式の使い方とかは私からはお伝え出来ないのでご自身で調べてやってください。
ツールを利用したことで何か不都合が発生しても保証はできませんのでご自身の責任でご利用ください。
ベラジョンカジノのブラックジャックに応用
もしカウンティングが上手く行きそうだ、カジノにも使えるかもしれない、と思った方は「ライブカジノ」で実践してもいいと思います。
今のところベラジョンカジノの利用規約やヘルプセンターにはブラックジャックのカウンティングが禁止にされてるような記述は見つかりませんでした。(けどご自身で問題ないか確認してカウンティング実践の可否を判断してください)
ライブブラックジャックはテーブルに7人のプレイヤーが同時着席し(つまりハンドが7つ)で進行するタイプか、プレイヤー側の共通ハンドは1つで無限にオンラインプレイヤーが参加できるタイプか2種類あります。
どっちで応用するか、これもプレイヤー次第です。
では。以上です!