原题在这里

如果在一个赌场里,每次下注的金额都是之前输的金额的2.5倍,只要赢一把就可以翻本,是不是必赢???

www.zhihu.com
图标

我特意用R写了段代码来说明这个问题。

在题主原来的问题上,为了尽可能真实,我们构造一个每晚去赌场赌博的场景!关于具体赌博游戏呢,其实什么都可以,这不是关键所在。为了简单,我们只考虑一种规则,那就是:单次游戏里,投注x元,赢了拿回本金加x元,输了呢就输掉本金x元。

我还必须要加上两个条件

  1. 本金不是无底洞!每晚只带有限本金,输光就只能回家
  2. 一晚上单次游戏不能玩无限次,也有最多限制(你就是打麻将一晚上能搓多少圈?)

这里还要准确定义一下什么是单次游戏:

  1. 第一局下注一元
  2. 一旦实现正的盈利(哪怕一元),或者输光当晚携带的本金,就立即终止本次游戏
  3. 每一次下注都是前面输的金额总和的2.5倍。

程序在下面

gamble <- function(principal, prob){
# 这个函数代表一次游戏!
# 我们输入两个数
# principal 你携带的本金数,不可以赊账
# prob 你每次赌博赢的概率

profit = 0 # 这个变数代表你的盈利情况,一开始是零

# 这个循环条件很直观
# 当你本次游戏欠债超过的你携带的本金,今晚游戏结束,你光著屁股回家
# 另外,当你本次游戏一旦盈利,就立即退出这个函数,并开始下一个游戏
while(profit + principal > 0 && profit <= 0){
if(profit == 0) bet = 1 #初始下注一元
else bet = -profit * 2.5 #初始之后每次下注都是损失的钱乘以2.5

if(runif(1) < prob){
# 如果你赢了
profit = profit + bet
}else{
# 如果你输了
profit = profit - bet
}
}
# 最后,本次游戏结束,返回你的盈利
return(profit)
}

# 这里调节你今晚携带的本金数
principal = 100
# 这里调节你今晚最多可以玩几次游戏
# 一百属于比较正常的
n_times = 100

# 这个会存下所有结果
sums = NULL

# 为了你可以重复实验结果而设定的种子
set.seed(0)

# 让我们调整时光机,重复今晚5000次
for(nter in 1:5000){
# 开始整个游戏,sum是你的当前总盈利
sum = 0
# 今晚你最晚只能玩一百次游戏
for(iter in 1:n_times){
# 总盈利是单次游戏盈利之和
sum= sum + gamble(principal,.5)
# 如果你的总盈利欠债把本金都输光了
# 剩下的游戏也别玩了,回家吧!
if(sum + principal < 0) break
}
sums = c(sums, sum)
}

hist(sums)
summary(sums)

把代码复制粘贴到R里试试就知道了。

最后会得到这样一张直方图

相关统计量自己看吧。

可以看出五千个晚上,超过半数是输光了打了欠条回家的。而盈利超过800的是极少数极端情况。这还是在获胜概率为二分之一的公平游戏前提下。总体的平均盈利虽然是正的,但是是可怜个位数六元不到。。。你有五千个晚上每晚100的本金,做点什么投资不比这个回报率高啊?


然后让我们假设题主是富二代,有个愿意每晚给他10000元去赌博的好爸爸,还连续给5000个晚上,跑程序如下

gamble <- function(principal, prob){
# 这个函数代表一次游戏!
# 我们输入两个数
# principal 你携带的本金数,不可以赊账
# prob 你每次赌博赢的概率

profit = 0 # 这个变数代表你的盈利情况,一开始是零

# 这个循环条件很直观
# 当你本次游戏欠债超过的你携带的本金,今晚游戏结束,你光著屁股回家
# 另外,当你本次游戏一旦盈利,就立即退出这个函数,并开始下一个游戏
while(profit + principal > 0 && profit <= 0){
if(profit == 0) bet = 1 #初始下注一元
else bet = -profit * 2.5 #初始之后每次下注都是损失的钱乘以2.5

if(runif(1) < prob){
# 如果你赢了
profit = profit + bet
}else{
# 如果你输了
profit = profit - bet
}
}
# 最后,本次游戏结束,返回你的盈利
return(profit)
}

# 这里调节你今晚携带的本金数
principal = 10000
# 这里调节你今晚最多可以玩几次游戏
# 一百属于比较正常的
n_times = 100

# 这个会存下所有结果
sums = NULL

# 为了你可以重复实验结果而设定的种子
set.seed(0)

# 让我们调整时光机,重复今晚5000次
for(nter in 1:5000){
# 开始整个游戏,sum是你的当前总盈利
sum = 0
# 今晚你最晚只能玩一百次游戏
for(iter in 1:n_times){
# 总盈利是单次游戏盈利之和
sum= sum + gamble(principal,.5)
# 如果你的总盈利欠债把本金都输光了
# 剩下的游戏也别玩了,回家吧!
if(sum + principal < 0) break
}
sums = c(sums, sum)
}

hist(sums)
summary(sums)

直方图在这里

虽然比上面那张图好看一些,但只是在说,超过半数是基本上不输不赢的。但请注意,有超过五百次以上是带著一万去然后光著屁股回家的。。。五千次平均盈利是146元。。。你可是揣著一万元去的。。。10000元本金只赚了146,回报率只有1.46%,还是用了五千个晚上,年化回报率只有 0.1%... 做点什么不好啊?


有没有发现什么规律呢?有!

  1. 在其他条件不变的前提下提高本金,其实就是等价于提高赌博的「容错率」,或者说,让你可以多输几次不至于打道回府,这可以显著减少亏光回家的次数。
  2. 但是无论如何减少亏光回家的次数,都无法改变一个现实,那就是,亏光了回家的次数肯定比赢钱回家的次数多,而赢大钱永远是小概率事件。
  3. 如果游戏公平,胜率在50%,长期平均盈利可以不亏,但是,这肯定是一种很差劲的投资,负盈利严重肥尾,期望回报还巨低,所以只能是大资本才能做的事,可是大资本也不会愿意做这个。。。

所以,这游戏不好玩。。。

推荐阅读:

相关文章