21点算法(来源于Blackjack)
21点的优选算法,据说把输牌的概率降低到了0.5%,研究⼀下。
⾸先学的是⼆⼗⼀点的规则,具体见附⼀。我们可以看出,⼆⼗⼀点的结果很⼤程度上依赖于玩家的选择。象赌、那种游戏,玩家压上钱后,就只 好祈祷上帝,期盼好运降临,然后咣当⼀声,⼀拍两散,是死是活,当场就见分晓。⼆⼗⼀点、牌九等游戏则不同,在发下牌后,玩家可以在⼀定程度上控制⾃⼰的 最终结果,因此如果应对得当,可以使⾃⼰的损失减到最⼩。这就是所谓“基本策略(Basic Strategy)”。
⼆⼗⼀点规则
1,游戏由玩家和庄家(即的发牌员)对玩,看谁的牌⾯点数更靠近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⽤等等。
“基本策略”的内容可见附⼆,没有任何神秘之处,任何⼀个懂概率论和计算机语⾔的⼈都可以写个程序,把它推导模拟出来。如前所⾔,背会它的难度在元素周期表之上,政治课教条之下。掌握了基本策略,可在典型规则下把庄家优势减到0.5%。
有了基本策略,我再到⼤西洋城去试⼿时,就从游击战升级到阵地战,不再玩⼀把就跑,⽽是坐下来和庄家周旋到底。⼀开 始我还有些紧张,使出⼤学⾥对付政治考试的必备招数:把基本策略表塞在裤袋⾥,玩不了⼏⼿就借⼝上厕所,掏出表来仔细对照⼀番。——后来我在看见⼀个⽼太太,堂⽽皇之地把基本策略表放在⼿边,发牌后就拿⼿指颤巍巍地在表上游⾛,到对应的那⼀格,然后抬头转告发牌员。的⼯作⼈员或熟视⽆睹,或和她 开些⽆伤⼤雅的玩笑。其他⼈有不确定的地⽅也问⽼太太,⽼太太这时就特⾃豪地查⼀番,然后摆出副权威的样⼦说:“你该要牌!”我才恍然⾃⼰当初太做贼⼼ 虚了。
当然,我们⼤学⾥也有些监考⽼师对在政治考试⾥的作弊睁⼀只眼闭⼀只眼,但允许⼈们⽤基本策略,并不是同样地出于天良未泯,⽽是精确地计算出了,就算你⽤基本策略玩,优势仍然在庄家那边。
不过对于庄家这0.5%的优势,我也实在没什么要抱怨的了。假设⼀⼩时玩⼀百⼿,每⼿压⼗块钱,平均下来,⼀⼩时也 就输五块钱——坐在富丽堂皇的⾥,享受着⼯作⼈员笑容可掬的服务、穿着⾼叉低胸的⼥侍们提供的免费酒⽔,以及赌博带来的精神刺激,每⼩时才付五块钱, 难道不是很合算的买卖吗?⼀场两⼩时的电影还要⼗块钱呢,有⼏部电影能象赌博那么刺激?
更妙的是,感谢众多“萝⼘”的存在,认为平均每个顾客在⼆⼗⼀点上会输得远多于0.5%,于是会返回⼀定的“谢 礼
(Comp,Complimentary的简称)”给顾客,⽐如餐券、戏票、旅馆房间等。我经常玩了四个⼩时下来,只输了⼆⼗块钱,但会按照你输两 百块钱的标准来给你谢礼,⽐如⼀张价值⼗元的餐券。那就相当于我只花⼗块钱,就在⾥玩了半天。
⽽且基本策略也可以⽤来挣钱,那就是赚⽹络的红利。⽹络的成本远低于现实,他们不需要起豪华⾼楼,不需 要买设备器具,不需要雇⼈,也不需要⽩送酒⽔,因此⼀进⼊⽹络时代,⽹络就如⾬后春笋般,争先恐后地冒出在⼴阔⽆垠的⽹络沃⼟。为了竞争客源,每家⽹络都会推出五花⼋门的优惠,其中最普及的⼀种是,新会员加⼊时,可以得到⼀笔红利作为奖励。数额因⽽异,⼀般在50到200美元之间。
当然,这笔钱不会让你⽩⽩拿到,规定,要在他们那⾥累计下注到⼀定数⽬,⽐如⼆⼗倍,才可
以把那笔红利提出来。 他们的如意算盘是,⼀般赌客每把平均会输5%,累计下⼆⼗倍的注,也就把⽩送的红利已经输回来了。这相当于⽤玩家⾃⼰的钱把他们吸引过来成为顾客。反正他 们的成本不过是⼀台服务器、⼀套软件、⼀点带宽,最适合薄利多销。
显然,⼀个懂基本策略的⼈马上就会发现其中的漏洞:如果运⽤基本策略玩⼆⼗⼀点,只输0.5%,赌⼆⼗倍下来,才输 10%,那就能⽩赚到90%的红利。——当然这么做的⼈只是少数,⽹络的⼤多数顾客还是萝⼘,使仍然⼤赚特赚,乐此不疲地推出各种红利来,让我们 这
多一点就不准些“获利玩家(Advantage Player)”能⼀家家挨个揩油。
对我们⾃然也有防范措施,⽐如常规定红利不准取出,只能在⾥赌掉。这种红利,在⽹络赌徒圈⾥有个浑名,叫 “粘利(Sticky)”。不过⼈民众⾃然也有对付它的办法:把剩下的红利拿到上去赌⼀把,输了就算了,赢了的话把多出的那部分取出,剩下的再拿去 赌,这样能拿回的期望值是:
a + a^2 + a^3 + …… = a/(1-a)
其中a为每把赢的概率,是⼀个略⼩于1/2的常数,那么上式也就趋向于略⼩于1。
另⼀个有趣的规定是:⼀般⼈只要累计下注⼆⼗倍就可以取出红利了,但来⾃中国⼤陆的玩家则需要
累计下到⼆百倍。看来国内同胞早已威震⽹络界、横扫抢红包,吓得都要专门把他们列为⾼危⼈,让我觉得如果我不在⽹络⾥赢上⼀把,简直要愧为中国⼈了。
于是我带着崇⾼的国家荣誉感,集中玩了⼀批⽹络,三个⽉下来,也赚了有三千多块钱。然后我就对⽹络失去了兴 趣,因为⽐较好的我都差不多玩遍了,但更重要的原因是,我已经逐步掌握了算牌的⽅法,揩⽹络油与算牌所能带来的刺激和成就感⽐起来,便如河⽔之于沧海,完全不值⼀提。
⼆⼗⼀点算牌法的原理,可见附三。我趁着放寒假,练了两个星期的“⾼低算牌法”,到快开学前的那个星期,租了⼀辆车,揣着⽹络揩来的3600美元,直奔⼤西洋城⽽去。
⼆⼗⼀点基本策略
规则为:庄家在软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 H H H H H H H H H H
9 H D D D D H H H H H
10 D D D D D D D D H H
11 D D D D D D D D D H
12 H H S S S H H H H H
13 S S S S S H H H H H
14 S S S S S H H H H H
15 S S S S S H H H R H
16 S S S S S H H R R R
>=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