ブラックジャックでの戦略をほんの少しだけ考えてみる
こんにちは。まだまだブラックジャックで考えてみます。
一応書いておきますが、高校生が考えたものではありません。
戦略を一つだけ考えてみる
前回は、17以上になるまでヒットし続けるというディーラーと同じ戦略をとってみました。
ディーラーに勝てない理由は簡単で、バーストしたら負けてしまうというルールのせいです。
だったら「バーストしなきゃいいんじゃね?」という発想です。
単純ですね。
バーストする確率は前々回の投稿で求めていました。
バーストしない確率=1-バーストする確率
ということで、この確率でヒットしてみます。
あまりにも何も考えていなさすぎて、胡散臭さ過ぎます・・・
プログラムしてみる
とりあえず、プログラムを変えてみます。
strategyという変数にバーストしない確率を記憶して、乱数がこの確率を下回ったときにヒットするようにしました。
import random
def draw():
x = random.randint( 0, 51 )
while x in ca:
x = random.randint( 0, 51 )
ca.append(x)
return x
def calc( hand ):
s = 0
flag = False
for h in hand:
s += 10 if ( h % 13 ) > 9 else ( ( h % 13 ) + 1 )
if h % 13 ==0:
flag = True
if s < 12 and flag:
s += 10
return s
strategy = [ 0 , 0 , 0 , 0 , 1.0000,
1.0000, 1.0000, 1.0000, 1.0000, 1.0000,
1.0000, 1.0000, 0.6884, 0.6137, 0.5397,
0.4629, 0.4005, 0.3210, 0.2446, 0.1633,
0.0813, 0.0000 ]
point = 0
cnt = {}
wi = 0
lo = 0
dr = 0
tr = 1000000
for i in range( 0, tr ):
ca = []
c_hand = [ draw() ]
d_hand = [ draw() ]
c_hand.append( draw() )
d_hand.append( draw() )
cp = calc( c_hand )
dp = calc( d_hand )
if cp==21 and dp!=21:
wi += 1
point += 1.5
continue
elif cp!=21 and dp==21:
lo += 1
point -= 1.0
continue
while cp < 21 and random.random() < strategy[cp]:
c_hand.append( draw() )
cp = calc( c_hand )
if cp > 21:
lo += 1
point -= 1.0
continue
while dp < 17:
d_hand.append( draw() )
dp = calc( d_hand )
if dp > 21:
wi += 1
point += 1.0
continue
if cp > dp:
wi += 1
point += 1.0
elif cp < dp:
lo += 1
point -= 1.0
else:
dr += 1
print('プレーヤー: 勝ち{}回 引き分け{}回 負け{}回'.format( wi, dr, lo ))
print('プレーヤー: 勝ち{:0.2f}% 引き分け{:0.2f}% 負け{:0.2f}% 掛金{:0.1f}'
.format( wi*100/tr, dr*100/tr, lo*100/tr , point ))
実行結果は・・・
それでは実行してみます。
プレーヤー: 勝ち394546回 引き分け67538回 負け537916回
プレーヤー: 勝ち39.45% 引き分け6.75% 負け53.79% 掛金-120042.0
悪化しました・・・(゚∀゚)
ディーラーがバーストするかしないか考えないとダメですよね・・・
顔を洗って出直してくることにします。
今回はこれでおしまいにします。それではまた。
ディスカッション
コメント一覧
まだ、コメントがありません