号称「永远不会输钱」的马丁格尔策略

点进来,说明你想赢,那我们直入主题。


所谓「马丁格尔(Martingale)策略」是在某个赌盘里,当每次「输钱」时就以 2 的倍数再增加赌金,直到赢钱为止。

假设在一个公平赌大小的赌盘,开大与开小都是 50% 的概率,所以在任何一个时间点上,我们赢一次的概率是 50%,连赢两次的概率是 25%,连赢三次的概率 12.5%,连赢四次的概率 6.25%,以此类推。因此,以概率来算,如果连赢四次的概率 6.25%,也就是说连输四次的概率一样也只有6.25%。

假设我们有 63 元,按照马丁格尔策略理论来算的话,63 元的连续亏损如下:

所以只能容许「连续亏损」6 次,概率是:

假如我们玩「押大小」,当我们与庄家对赌 73 次,在某个点「连续亏损 6 次」的概率是 41.7%,算法为(证明可以跳过不看,不影响阅读):

同理:

  • 当我们押大小 150 次当中有一次会超过「连续亏损 6 次」的概率是 69.2%
  • 当我们押大小 250 次当中有一次会超过「连续亏损 6 次」的概率是 85.9%

所以马丁格尔策略风险相当高,别别别,客官先别走,其实今天介绍的不是马丁格尔策略,而是「反马丁格尔策略(Anti-Martingale)」。


「反马丁格尔(Anti-Martingale)策略」,是在某个赌盘里,当每次赌金「赢钱」时就以 2 的倍数再增加赌金,若一直赢,就再加倍赌注。(直到某个目标次数,再重新开始)

再假设我们有 63 元,第一次我们都从 1 元开始押注,我们选择使用「反马丁格尔策略」,每赢一次赌注都以 2 的倍数递增。也就是 1,2,4,8,16,32 一直递增的方式来押注。因此,当我们连押四次都输钱的概率是 6.25%(前面算过),我们会输掉 4 元。同样,同样的概率下,连赢四次,那我们将会赢得:

所以在「同一个概率点」上,我们会「输掉 4 元」或「赢得 15 元」,我们看看其他概率点;

  • 连赢三次或亏三次的概率是 12.5%,你会「输掉 3 元」或「赢得 7 元」
  • 连赢两次或亏两次的概率是 25%,你会「输掉 2 元」或「赢得 3 元」

是不是有点迷糊,我们一步一步看:

假如目标是连赢四次才会从头押注(我们称为一轮),没到达连赢目标之前输都算失败,第一次都从 1 元开始(达到目标前输掉都会重新从 1 元开始押注)。只赢一次、两次、三次后输掉的情况如下:

可以看出:

不管设置赢得目标次数是几,每次失败,都是亏损「第一次押注的金额」

继续以 63 元赌金为例,以「反马丁格尔策略」的操作方法来操作,你要输光,就必须让庄家连开 63 次与你押注相反的盘,这种情况一百万兆次才会发生一次 ?

有点懵逼?没关系,我们再通过感性认识去理解一下


想象一下,我们站在一座山丘上,堆了四个雪球(1 元开始押注),我们同一时间将雪球往下推,假设其中三个雪球都在途中被石头啦、树木啦撞坏了(此轮失败),只有一个顺利滚到山下(达成目标连赢),那么它现在已经变得非常的大,可能是当初雪球大小的十倍或百倍大小(获利)

滚雪球~

有没有好理解一些?

传统的「马丁格尔」以及「反马丁格尔」策略都是以

为乘积,但是实际上

的递增操作方式还是风险挺大的,我们可以使

之间,当然在赌场算起来就不方便了 ?

总结一下,这个策略有两点比较关键:

  1. 趋势
  2. 趋势的长度

分别对应

  1. 达成目标(连赢)的概率
  2. 连赢次数的设置

看到这里是不是有点蠢蠢欲动?笔者也是,所以我用 Python 写了个小程序

定义一个赌局

参数

  1. pocket:开始玩时兜里里的钱
  2. pay:单次赌注

返回:

  1. result:1(赢)或者 0(输)
  2. pocket:玩完一把后兜里的钱
import random
WIN  = 1
LOSE = 0

def gambling_50_percent(pocket, pay):
    result = random.randint(0, 1)
    if result == WIN:
        pocket += pay
    else:
        pocket -= pay
    return result, pocket

注解:赢了会赢押注相同的钱,输了赌注被庄家收走

定义一轮游戏

参数解释:

  1. win_time_to_stop:目标连赢次数
  2. pocket:钱包里面的钱
  3. pay:单次赌注
  4. n:押注递增系数
def play_a_round(win_time_to_stop, pocket, pay, n):
    money_when_start = pocket
    root_pay = pay

    for i in xrange(win_time_to_stop):
        win_or_lose, pocket = gambling_50_percent(pocket, pay)
        if win_or_lose == WIN:
            pay *= n
        else:
            pay = root_pay
            break
    print pocket, pay
    return pocket - money_when_start, pocket > money_when_start

注解:此方法是模拟一轮(win_time_to_stop 次)游戏,只有两种结果,即:

  1. 达到「目标连赢次数」
  2. 未达到「目标连赢次数」

循环中,如果输一次,那么直接跳出循环,结束此轮;没输就继续玩直到「目标连赢次数」,最终返回金额变动(pocket - money_when_start)和输赢结果(pocket > money_when_start

玩几把

兜里:63 元

首次赌注:1 元

押注递增系数:2 倍

目标连赢次数:4 次

连输 10 轮

根据我们前文的分析,每输一轮,只会亏损「第一次押注的金额」

十个雪球全部滚失败,损失:

元(这种情况比较常见 ?)

一个雪球滚成功啦

一个雪球滚成功,获利:

九个雪球滚失败,损失:

最终结果:

,符合计算结果

两个雪球,不可思议!

两个雪球滚成功,获利:

八个雪球滚失败,损失:

最终结果:

,符合计算结果

完整源码:

https://gist.github.com/tmpbook/957a41aee344789a67a7e8201c4ae617

原文发布于微信公众号 - 随心DevOps(heart-devops)

原文发表时间:2018-02-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏瓜大三哥

基于FPGA的Canny算子设计(一)

Canny算子计算流程: 高斯滤波和Sobel算子已经在前面讲过,所以这里主要讨论非最大值抑制和滞后分割电路设计。 非最大值一直电路设计 非最大值抑制主要是对...

2117
来自专栏IT派

从框架优缺点说起,这是一份TensorFlow入门极简教程

这一系列教程分为 6 部分,从为什么选择 TensorFlow 到卷积神经网络的实现,介绍了初学者所需要的技能。机器之心在本文介绍了 PyTorch 和 Caf...

892
来自专栏华章科技

一位数学专业女生大学毕业前的感慨:不好意思,是我天真了

问自己永远有多远!!!! 已知X是非平方数,证明X开根号是无理数 TM这还需要证明 学完定与不定积分后

551
来自专栏机器学习养成记

数据分析小案例(一):商业街抽奖(python)

最近有很多以小说的方式讲解数据分析的书,比如在看的这本《菜鸟侦探挑战数据分析》。里面的程序以R语言实现,案例都很简单,正巧最近在学习python,就尝试把里面的...

3508

基于Apache Spark机器学习的客户流失预测

流失预测是个重要的业务,通过预测哪些客户可能取消对服务的订阅来最大限度地减少客户流失。虽然最初在电信行业使用,但它已经成为银行,互联网服务提供商,...

4457
来自专栏YoungGy

机器翻译之Facebook的CNN与Google的Attention

传统的seq2seq facebook的cnn 结构 特点 position embedding 卷积的引入 GLU控制信息的流动 attention goog...

2459
来自专栏企鹅号快讯

使用机器学习预测天气

作者:笨熊 本章是使用机器学习预测天气系列教程的第一部分,使用Python和机器学习来构建模型,根据从Weather Underground收集的数据来预测天气...

2115
来自专栏郭耀华‘s Blog

DSSM:深度语义匹配模型(及其变体CLSM、LSTM-DSSM)

2395
来自专栏PPV课数据科学社区

【学习】如何用SPSS和Clementine处理缺失值、离群值、极值?

一、什么是预处理、预分析? 高质量数据是数据分析的前提和分析结论可靠性的保障。尽管在获取数据源时数据分析师格外谨慎,耗费大量的时间,但数据质量仍然需持续关注。不...

4065
来自专栏闪电gogogo的专栏

压缩感知重构算法之子空间追踪(SP)

SP的提出时间比CoSaMP提出时间稍晚一些,但和压缩采样匹配追踪(CoSaMP)的方法几乎是一样的。SP与CoSaMP主要区别在于“In each itera...

1817

扫描关注云+社区