码迷,mamicode.com
首页 > 编程语言 > 详细

电影 《决胜21点》里面的算法是怎么弄的?

时间:2017-10-03 23:29:08      阅读:305      评论:0      收藏:0      [点我收藏+]

标签:公众   私有   左右   例子   社会   胜利   dealer   管理   eal   

以下回答引自知乎

注:由于10,J,Q,K点数都为十点,故在庄家准备足够多副扑克牌时,视为等概率

则,此时摸到点数为10点(非严格为10的扑克牌面)为4/13

 

高低算牌法,在21点的游戏当中,2-9代表本身,10-K代表10,A可以做1或11。
我们将2-6当做小牌,7-9当做中立牌不算,10-A当做大牌。
一般赌场会使用4副扑克以上,其中10点的概率为4/13约等于30.76%,当前面出现的小牌多过大牌,比如多了10张,我们假设牌盒中共有4副牌,庄家已经发过了一半的牌,那么剩下的牌还有两副共104张,2-6大约为35张,10-A大约为45张,那么10点的概率为36/104约等于34.61%,你拿到20或者21点的概率会提高,你9,10,11点加倍时,拿到19,20,21的概率会提高,同样庄家爆牌的概率也会提高,我们的盈利就随之提高。
这是一个很简单的算法,当前面出现的小点越多的时候,我们的注码可以相应的加大,《决胜21点》里面的孩子就是用这个方法算牌的。


以下回答扔来自知乎
 
作者:法外伞兵Bruce
链接:https://www.zhihu.com/question/23397478/answer/184674188
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

游戏由玩家和庄家(即赌场的发牌员)对玩,看谁的牌面点数更靠近21点。但如果超过了21点,则称为“爆掉”,算输。其中花牌(J,Q,K)都算10点,A可以算1点,也可以算11点,看哪种情况更有利。玩家之间不做比较。
2,游戏开始时,所有玩家和庄家各拿两张牌,一般来说,是玩家两张牌牌面朝上,庄家一张牌面朝上,一张牌面朝下。
3,两张牌的点数,肯定介于2到21点之间。21点只可能是一张10(包括J,Q,K,下同)和一张A,这叫“天成(BlackJack,以下简称BJ)”,除非庄家也拿到了BJ,不然赢一倍半的赌注。
4,玩家在游戏中有如下选择:
(1)要牌,直到他(或她,下同)认为自己的牌面离21点足够近了。比如手头的牌是4和5,加起来才9点,那么无论再加张什么牌,都不会爆掉,当然应该要牌。
(2)停牌,即不再要牌,比如手头是张10和9,已经很接近21点了,就不用再要牌了。
(3)加倍,即加一倍赌注,再要且仅要一张牌。比如手头是张4和7,这时要牌是肯定安全的,而且很可能拿到10或者其他点数较大的牌,一张就够了,值得加倍。这只能在刚拿到两张牌时使用,要过牌后就不能加倍。
(4)分牌,即拿到两张点数相同的牌时,可以加一份赌注,把牌分为两份,比如手头是两张8,加起来是16,非常糟糕的点数,这时就应该把牌分为两个8,再要两张牌来,很可能拿到10形成18点,就把坏牌变成好牌了。
(5)保险,即在庄家亮着的牌是A时,由于他拿到BJ的几率很大,玩家可以下赌注一半的保险。如果庄家没有拿到BJ,保险金就输掉了,如果庄家拿到了BJ,付给玩家两倍保险金。很多玩家在自己拿到BJ的情况下,会下赌注一半的保险,以保证自己能赢回一倍赌注,因为如果庄家没有BJ,那他能赢赌注的一倍半,去掉输掉的半倍保险,还赢一倍赌注;如果庄家有BJ,那他们牌面打平,但保险能赚回一倍赌注。
(6)投降,这时只输一半赌注。如果自己的牌是10和6,庄家亮着的牌是A,那还是趁早投降好。
5,庄家在手头的牌是A时,会问大家是否要保险,然后检查自己的牌是否BJ。如果手头的牌是10,也会检查是否BJ,但这时玩家就不能买保险了。
6,如果玩家要牌爆掉,算输,庄家当场收掉他的赌注。
7,当所有的玩家都做出选择后,庄家的玩法是固定的:亮 出底牌,如果点数不到17点,则必须要牌,直到超过了16点或爆掉为止。
6,如果双方都还没有爆掉,则更接近21点的那个胜,如果双方点数相同,则算打平。
在这些基本规则之上,各地的赌场还会有些变动,比如有的赌场在软17点(A算11点时的点数称为“软”,比如A和6,就是软17点)时停下,有的则必须继续要;有的赌场连续分牌最多只能有四次,有的可以无限分下去;有的A分牌只能一次;有的赌场分牌后不许加倍;有的赌场不许投降;等等等等。
还有些变种的二十一点游戏,比如“双亮(Double Exposure)二十一点”,就是庄家的两张底牌都亮着,但如果双方点数相同,算庄家赢。又如带大小鬼(Joker)的二十一点,庄家拿到鬼牌得扔掉,玩家拿到鬼牌却可以指定它的点数,比如凑成11点,或者当A用等等。
二十一点基本策略
规则为:庄家在软17点时停止、无限分牌加倍、允许投降。
为了方便分析,我们先假设52张牌出现的概率始终相同,也就是说每张牌都是从一个无穷多副牌组成的牌盒里抽出来的,或者说前面出过的牌不影响后面的牌,换句话说,每张牌相互之间都是独立的。
首先,一个明显的结论是,每个点数出现的概率都是1/13,除了10出现的概率是4/13。这样,如果庄家的亮牌是A,他实际拿到BJ的可能性是4/13,拿不到的可能性是9/13。玩家投保险,保中了的回报是双倍保险金,没中的话输掉保险金,因此总预期收益是:
4/13 * 2 + 9 * 1/13 * (-1) = -1/13
也就是说,从概率上讲,投保险是得不偿失的,平均13次保险中,赢4次,输9次,庄家占7.7%的优势。所以,永远不要买保险。
在二十一点中,玩家最大的劣势来自于,如果玩家的牌爆掉的话,赌注当场输掉,哪怕庄家随后也爆掉。因此,如果玩家模仿庄家的玩法:16点或以下要牌,17点或以上停住,必输无疑。
为此赌场在游戏里加入了各种功能:分牌、加倍、投降、玩家拿了BJ后赢一倍半,以吸引赌客。如果用正确的玩法,可以把庄家的优势缩小到0.5%。这就是所谓“基本策略”。
在上述规则下,基本策略为:
庄家:2 3 4 5 6 7 8 9 10 A
玩家点数
<8>=17 S S S S S S S S S S
其中H表示“要牌(Hit)”,S表示“停牌(Stand)”,D表示“加倍(Double down)”,R表示“投降(suRrender)”。
以上的点数都是所谓“硬点数”,即不包括A或A算1点,以后如果不特别指明,各点都指“硬点数”。手中有A,而且A算11也不会爆掉,就是所谓“软点数”,应该运用下面这个表格:
庄家:2 3 4 5 6 7 8 9 10 A
玩家
13 H H H D D H H H H H
14 H H H D D H H H H H
15 H H D D D H H H H H
16 H H D D D H H H H H
17 H D D D D H H H H H
18 S DS DS DS DS S S H H H
>=19 S S S S S S S S S S
“D”和“DS”都表示加倍,在不可以加倍的情况下,“D”表示要牌,“DS”表示停牌。
最后是分牌策略:
庄家:2 3 4 5 6 7 8 9 10 A
玩家
A,A P P P P P P P P P P
2,2 H H P P P P H H H H
3,3 H H P P P P H H H H
4,4 H H H P P H H H H H
5,5 D D D D D D D D H H
6,6 H P P P P H H H H H
7,7 P P P P P P H H H H
8,8 P P P P P P P P P P
9,9 P P P P P S P P S S
10,10 S S S S S S S S S S
其中P表示“分牌(Split)”。
这三张表并不难背,因为里面有许多规律,最显著的就是有个分界线,横亘于庄家亮牌是6点和7点之间。6点以下是庄家的坏牌,比较容易爆掉,对玩家有利,7点以上则对玩家不太利。我写了个小程序,算了下庄家的各个亮牌所可能导致的最终结果的百分比:
亮牌 2 3 4 5 6 7 8 9 10 A
17: 13.9 13.5 13.0 12.5 16.8 37.0 12.9 12.0 11.1 13.0
18: 13.4 12.9 12.5 12.1 10.9 13.9 35.9 12.0 11.1 13.1
19: 12.8 12.4 12.0 11.6 10.3 8.0 12.9 35.1 11.1 13.1
20: 12.1 11.8 11.4 11.0 9.9 7.6 7.0 12.0 34.3 13.1
21: 11.4 11.2 10.8 10.5 9.4 7.0 6.6 6.1 11.2 36.2
爆掉: 36.4 38.3 40.3 42.2 42.8 26.4 24.6 22.8 21.2 11.5
由此再来看基本策略,就很好理解,也很好背了:
1,11点或更小时,总可以要牌,如果9点时庄家亮牌是3到6,10或11点时庄家亮牌比自己差,还可以加倍。
2,17点或更多时,总该停住。
3,12点到16点间,如果庄家亮牌是6或更小,就该停住,不然就该要牌。唯一的例外是12点对庄家亮牌2和3点时也该要牌。另外在自己拿到16点而庄家是9、10、A,或自己拿到15点,而庄家是10点时,应该投降。
对于嫌麻烦的人,记住以上三点,就已经够了,因为这张表涵盖了大多数情况,拿到A和两张同样点数的牌的可能性不是那么大。但是如果想少输点钱,还是必须把后两张表也背下来。好在它们也很有规律,比如软13到18点对庄家6点或更小的亮牌时,可以考虑加倍,其判断梯形为:不太有把握的软13、14点只对庄家的5、6点加倍,软15、16扩展到庄家的4点,软17、18则扩展到3点。
二十一点算牌法
二十一点能够算牌,是因为我们在讨论“基本策略”时提出的一个假设不成立:
假设52张牌出现的概率始终相同,也就是说每张牌都是从一个无穷多副牌组成的牌盒里抽出来的,或者说前面出过的牌不影响后面的牌,换句话说,每张牌相互之间都是独立的。
显然,不可能有这样的由无穷多副牌组成的牌盒,前面出过的牌总会影响后面的牌。在算牌法刚出现的时代,赌场仍然使用一副牌来玩二十一点,那么这个影响就更明显。比如,发牌员发出牌来,你拿到两个10(包括J、Q、K),庄家亮牌也是10,翻出底牌来还是10,那么下一轮里10出现的概率已不再是4/13,而是12/48,即1/4,略低于4/13。同样的,其他点数出现的概率也已不再是1/13,而是1/12。
象轮盘赌这类游戏,每次轮盘转出什么结果,和上一次完全没有关系。还有牌九这类游戏,每玩过一轮,就重新洗牌。这些游戏里,每把赌博之间都是互相独立的。而二十一点的各把之间,在重新洗牌之前,不是独立的。前一把出现了什么牌,会影响到下一把。因此,如果我们能记住前面出过什么牌,就能大致预测以后的赌局走势,从而调整自己的赌注,在对自己有利时下大注,在对庄家有利时下小注或不下注,就能在这个游戏里占到优势。
UCLA的数学教授爱德华·索普(Edward Thorp)在六十年代初发明了二十一点算牌法。他注意到,如果二十一点里10出现的概率增高,对庄家是不利的,因为庄家在十六点及更低时必须要牌,10越多,就越容易爆掉,而对玩家来说,则更容易拿到BJ,赢一倍半的钱。所以他用一种“算10法(10-Count)”,计算剩下的牌中10的比例。正常情况下,这个比例应该是4/13,庄家占优势。但当前面出掉很多小牌,10的比例达到1/3时,优势就转移到玩家这边来了。
索普的运气不错,那时计算机也发明出来了,他找到IBM公司里的朋友,写了个程序来验证自己的算牌方法。那时的计算机跟今天比起来,还是速度低下、体积庞大的蠢物,足足运转了七天七夜,终于证明了这个方法是可行的。索普又自己到赌场里亲自实践,结果果然大赢特赢。
1962年他出版了《打败庄家(Beat the Dealer)》一书,向公众介绍了自己的算牌法。这不再是我们惯见的萝卜赌经,而是有数学基础的方法,因为它在不同的赢牌概率P(i)时下不同的赌注B(i),虽然总的胜利概率之和ΣP(i)仍然小于1/2,但只要在P(i)大时下大的B(i),P(i)小时下小的B(i),就能使总回报ΣR(i)P(i)大于ΣB(i)。
“算10法”比较难操作,需要极高的心智和注意力。好在群众的智慧是无穷的,算牌手们沿着索普指定的方向走下去,已经把算牌方法演进得越来越简单实用(索普本人在60年代后期就淡出了赌博界,带着他在赌场赢来的大笔资金,进入股票市场,运用他的数学知识,现在已成为超级巨富)。
我使用的是一种叫“高低法(High-Low)”的算牌法。在游戏过程中,我们把每一张出现的2,3,4,5,6都算+1点,7,8,9算0点,10,J,Q,K,A算-1点,将各点相加,结果越大,就表示前面出现过的小牌越多,对玩家越有利。反过来,如果结果是个负数,就表示前面出过的大牌比小牌多,对庄家有利。
比如前面出现的牌是:
4,9,10,5,J,A,8,10,Q,2,6,K,J,7
那么点数就是4张小牌减7张大牌,是-3。当然,在游戏过程中,你不可能叫庄家把牌局暂停,让你从容加减。你必须在每张牌出来时,就在心里默算点数。比如在上面的例子里,从第一张牌出现开始,你就应该在心里默算出:
1,1,0,1,0,-1,0,-2,-3,-2,-1,-2,-3,-3
在实际运用中,还可以采取两张牌一计的技巧,因为庄家发牌时一般速度较快,这样可以方便地把很多同时出现的大牌和小牌抵消不计,提高了算牌速度,减少了可能的计算错误。比如在上面的例子里,如果两张牌一计,那就是:
1,1,-1,-2,-2,-2,-3
如果是一副牌,-3已经是很糟糕的点数了,这时应该下最小注,或者停止不玩。不过一般来说,现在的赌场都使用六到八副牌,那么在六副牌312张牌内,发出14张牌,还剩298张牌,平均每副牌的点数是(-3)×52/298=-0.5,还算可以忍受。
显然,在每一盒牌(“盒(shoe)”是指一盒牌从开始发牌到洗牌的过程,这一盒牌里可能有六副、四副、八副或其他副数的牌)的开始,由于大部分牌还未发出,因此平均点数总是在0左右。要到牌盒里剩下的牌不多时,平均点数才可能比较显著地偏离0。所以算牌手在算牌时都会寻找合适的赌桌,一方面要找人少的桌子,因为人越少,你在单位时间内玩的次数越多,实际收益才会更逼近期望值;另一方面要找切牌少的发牌员,因为该切多少牌,赌场只有个大概的规定,具体执行还是要靠发牌员的觉悟,所以同一家赌场里,不同的发牌员切出的牌来常会差很多。
在点数变大时,该怎么提高赌注,每个算牌手都有自己的习惯和算度。贝尔实验室的J.L.Kelly推导出,在理论上,如果你占A的优势,本钱总数为R,那么最优赌注是B = A * R。
比如你有一万块钱的本钱,现在你占1%的优势,那么就应该在这把压下一百块钱。这种下注法称为Kelly法,是在理论上可以获得最大回报的方法。但在实践中,Kelly法过于冒险,只可视为下注时的上限。
斯坦福·王(Stanford Wong)在《二十一点的秘密(Blackjack Secrets)》里说,平均点数每高一点,可增加约0.5%的优势。他是二十一点算牌界里最有名的祖师爷级人物之一,甚至排在爱德华·索普之前,第一个进入了“二十一点名人堂(Blackjack Hall of Fame)”。我第一次看到他的名字时,还以为他是个华裔,后来在电视上看到他,才发现他是个白人老头。斯坦福·王其实是他的艺名:他毕业于斯坦福大学,再加上“王”这个很有气势的东方姓氏。他对中国文化好像很感兴趣,自己创办了一家出版社,就叫“Pi Yee”——念念看吧:什么?辟易?便宜?别数典忘祖了,人家这叫“牌艺出版社”!
按照他的说法,在0点时,庄家占0.5%的优势。到了1点,双方差不多扯平。平均点数升到2时,玩家就已经占0.5%的优势,可以提高赌注了。如果按照Kelly法,平均点数为7时,玩家占3%的优势,就得将自己全部本钱的3%投进去,显然太过冒险了。
在点数为0或负数时,玩家应当下最小赌注。当然,最好是干脆不玩,坐等点数变正。早期的那些算牌手就是这么做的,但现在的赌场里,从游弋在各桌间的桌面经理,到高悬在天花板上的监视器,都虎视耽耽地监视着每个赌徒的行为。如果总是点坏不压、点好猛压,还不如直接在脸上写五个大字:“我是算牌手”,说不定还暴露得晚些。
算牌本身并不难练,难的是和赌场的斗智斗勇。在《打败庄家》刚出版时,它轰动一时,很快成为畅销书,激励了无数赌徒涌向赌场,一试身手。赌场对此大为恐慌,有些赌场甚至关闭了二十一点赌桌。但是,很快他们就又恢复了镇定,因为他们发现,涌来的大批赌徒中,只有极少数人真正掌握了算牌法,其他大多数人只不过是一知半解、道听途说的萝卜。索普这本书为极少数人提供了打败庄家的方法,但对大多数人来说,实际效果却是个二十一点的广告,让他们自以为也能够在二十一点上赢钱。这是个赌场梦寐以求的广告,是他们自己无论花多少钱都做不来的广告。
在刚开始时,算牌还是个新鲜事物,没有这方面的法律规定,开赌场的又多是黑社会,一旦发现算牌手,一律当老千处理,痛打一顿后扔到臭水沟里。后来大家总算对算牌达成了共识:这是样技术活儿,是在遵守赌场规则的情况下,靠自己的聪明才智来赌博的一种方式;同时各大赌场也多被华尔街的金融巨头接管,开始西装领带的管理方式,摆开堂堂之阵来赚钱,于是算牌手总算不再有人身危险,但赌场既然是人家的私有财产,就有权把某些他们不欢迎的人拒之门外。因此,对一个算牌手来说,难的不是算牌,而是如何不被赌场弄进黑名单
 
 
附上击败庄家 中文版 由某博主翻译
http://blog.sina.com.cn/s/blog_7643a1bf0101d9dv.html

电影 《决胜21点》里面的算法是怎么弄的?

标签:公众   私有   左右   例子   社会   胜利   dealer   管理   eal   

原文地址:http://www.cnblogs.com/linkzijun/p/7624707.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!