赌徒都应该明白的道理:通过简单计算告诉你为什么久赌必输

今天在知乎看到一个有趣的话题,”假设赌博输赢的概率都是50%,那么长期赌博的人为什么仍然会更容易倾家荡产而不是收益均衡?"

问:即使绝对公平的赌局(50%赢,50%输),赌到最后,我为什么会输? 答:你输给的不是运气,你输给的是大数定律。 问:什么是大数定律,我为什么输给她? 答:假设你有本金10元,每次1元,一次你可能输1元, 也可能赢1元,概率各为50%。即输赢的概率各为1/2。假设你连输十次,连输10次的概率是2的十次方,1/1000 (千分之一)。也就是说,你有千分之一的概率连输十次,输完所有本金,没有资本来翻盘了,必须退场了。(而这也意味着, 你玩一千次,连输十次出现的概率等于1,也就是说,玩100次,你输完的数学期望等于100%)。

下面用matlab仿真来看看这个问题,每次产生随机数来判断输赢,大于0.5就算赢,硬币个数为10,如果硬币个数为0,就停止游戏,

代码语言:javascript
复制
clc
close all
clear
%% 
MaxIters = 1000;
coins = 10;
for i = 1:MaxIters
    flag = rand;
    if flag>0.5
        coins = coins+1;
    else
        coins = coins-1;
    end
    if coins<=0
        break
    end
end
disp(['游戏结束:', num2str(i)])

仿真结果如下

代码语言:javascript
复制
>> dutuTest
游戏结束:202
>> dutuTest
游戏结束:1000
>> dutuTest
游戏结束:68
>> dutuTest
游戏结束:192
>> dutuTest
游戏结束:88
>> dutuTest
游戏结束:1000
>> dutuTest
游戏结束:262
>> dutuTest
游戏结束:108
>> dutuTest
游戏结束:50
>> dutuTest
游戏结束:224
>> dutuTest
游戏结束:76
>> dutuTest
游戏结束:1000
>> dutuTest
游戏结束:1000
>> dutuTest
游戏结束:672

从结果看出来,也有1000次后游戏继续的,输出金币个数再看一下

代码语言:javascript
复制
% clc
close all
clear
%% 
MaxIters = 1000;
coins = 10;
for i = 1:MaxIters
    flag = rand;
    if flag>0.5
        coins = coins+1;
    else
        coins = coins-1;
    end
    if coins<=0
        break
    end
end
disp(['游戏结束:', num2str(i),',剩余金币个数为:',num2str(coins)])

结果为

代码语言:javascript
复制
>> dutuTest
游戏结束:50,剩余金币个数为:0
>> dutuTest
游戏结束:68,剩余金币个数为:0
>> dutuTest
游戏结束:64,剩余金币个数为:0
>> dutuTest
游戏结束:1000,剩余金币个数为:58
>> dutuTest
游戏结束:104,剩余金币个数为:0
>> dutuTest
游戏结束:78,剩余金币个数为:0
>> dutuTest
游戏结束:328,剩余金币个数为:0
>> dutuTest
游戏结束:1000,剩余金币个数为:46
>> dutuTest
游戏结束:76,剩余金币个数为:0
>> dutuTest
游戏结束:184,剩余金币个数为:0
>> dutuTest
游戏结束:768,剩余金币个数为:0
>> dutuTest
游戏结束:1000,剩余金币个数为:44
>> dutuTest
游戏结束:62,剩余金币个数为:0

增大仿真次数再来看下,仿真10000次来看下结果

代码语言:javascript
复制
loop = 100000;
stop_index = zeros(1,loop);
coin_left = zeros(1,loop);
MaxIters = 1000;

for j = 1:loop
coins = 10;
for i = 1:MaxIters
flag = rand;
if flag>0.5
coins = coins+1;
else
coins = coins-1;
end
if coins<=0
break
end
end
disp(['游戏结束:', num2str(i),',剩余金币个数为:',num2str(coins)])
stop_index(j) = i;
coin_left(j) = coins;
end
disp(['金币输光的个数:', num2str(length(find(coin_left==0)))])

代码语言:javascript
复制
金币输光的个数:75101

期望还有点靠不住,没有100%输光,

我们增加一下游戏的次数

代码语言:javascript
复制
MaxIters = 5000;
代码语言:javascript
复制
金币输光的个数:88976

再增加次数

代码语言:javascript
复制
MaxIters = 50000;
代码语言:javascript
复制
金币输光的个数:96465

假如这个游戏者永远不满足,想一直玩下去,那么MaxIters 的取值接着增大,输光的概率接近是100%,这就是我们所说的久赌无赢家。而人性的贪婪决定了赌性,抛开网络赌博的大数据猫腻不说,就算是最公平的对赌游戏,我们最终也是输光收场。