这是博弈论里的一个经典问题:
一位陌生美女主动过来和你搭讪,并要求和你一起玩个游戏。美女提议:“让我们各自亮出硬币的一面,或正或反。如果我们都是正面,那么我给你3元,如果我们都是反面,我给你1元,剩下的情况你给我2元就可以了。”
画个表格看一下四种情况的收益,看起来游戏非常公平。
男孩 | 美女 | 男孩收益(元) |
---|---|---|
正 | 正 | +3 |
反 | 反 | +1 |
正 | 反 | -2 |
反 | 正 | -2 |
真的公平吗?先不要google,试着自己思考一下。
双方都是随机出硬币
假设两人都是随机给出硬币的正、反面,那么四种情况的概率都是1/4,收益和损失正好相等,赢的概率约等于0。
可以写个C#程序模拟一下这种情况。
先写一个Bet()函数,模拟一次赌局的情况,正面用数字0表示,反面用数字1表示。
// 一次赌局的输赢情况
// 返回值为男孩的收益
private static int Bet(int boySide, int girlSide) {
// 0正面,1反面
if (boySide == 0 && girlSide == 0) return 3;
if (boySide == 1 && girlSide == 1) return 1;
if (boySide == 0 && girlSide == 1) return -2;
if (boySide == 1 && girlSide == 0) return -2;
return 0;
}
男孩和女孩都随机出0或1,即正面或反面,模拟赌上1千万次。
private static Random boyRandom = new Random(Guid.NewGuid().GetHashCode());
private static Random girlRandom = new Random(Guid.NewGuid().GetHashCode());
private static void BetRandom(){
int boyGain = 0;
int gameCount = 10000000;
for (int i = 0; i < gameCount; i++) {
int boySide = boyRandom.Next(2);
int girlSide = girlRandom.Next(2);
boyGain += Bet(boySide, girlSide);
}
Console.WriteLine("男孩的平均收益率: " + (boyGain * 100.0 / gameCount).ToString("0.00") + "%");
}
每次运行这个程序的结果并不相同,但男孩的平均收益率大概在 -0.1% 到 0.1%之间。
美女按一定的策略出硬币
假设美女按一定的概率出正面、反面,比如每8次里有3次正面,5次反面,也就是说出正面的概率为3/8。
写个函数BoyRoll()和GirlRoll(),男孩女孩都可以按一定的概率的出硬币。
// 男孩按一定的概率出示硬币的正面
// 返回0表示正面,1表示反面
private static int BoyRoll(double probFront){
if (boyRandom.NextDouble() < probFront) return 0;
return 1;
}
// 女孩按一定的概率出示硬币的正面
// 返回0表示正面,1表示反面
private static int GirlRoll(double probFront){
if (girlRandom.NextDouble() < probFront) return 0;
return 1;
}
现在让男孩随机抛硬币,美女按3/8的概率出正面。
int boyGain = 0;
int gameCount = 10000000;
for (int i = 0; i < gameCount; i++){
int boySide = BoyRoll(0.5);
int girlSide = GirlRoll(3.0 / 8.0);
boyGain += Bet(boySide, girlSide);
}
Console.WriteLine("男孩的平均收益率: " + (boyGain * 100.0 / ameCount).ToString("0.00") + "%");
得到的结果是 -12.5%!
也就是说,每玩8次就要输1元钱!
计算过程大致是这样的:
假设男孩出正面的概率是x,反面的概率是1-x。为了使利益最大化,应该在美女出正面或反面的时候男孩的收益都相等,不然美女总是可以改变正反面出现的概率让我们的总收入减少,由此列出方程就是:
$ 3x + (-2)*(1-x) = (-2) * x + 1 * (1-x) $
这个方程通俗的说就是在对手一直出正面你得到的利益,和对手一直出反面得到利益是一样的且最大。解方程得x=3/8,也就是说平均每八次出示3次正面,5次反面是男孩的最优策略。
而将x=3/8代入到收益表达式3*x+(-2)*(1-x)中就可得到每次的期望收入,计算结果是 -1/8元。
同样,设美女出正面的概率是y,反面的概率是1-y,列方程:
$ -3y + 2(1-y)=2y+(-1)*(1-y) $
解得y也等于3/8,而美女每次的期望收益则是2(1-y)-3y=1/8元。
这告诉我们,在双方都采取最优策略的情况下,平均每次美女赢1/8元。其实只要美女采取了(3正, 5反)这个方案,不论你再采用什么方案,都是不能改变局面的。
男孩的最优策略也是(3正,5反),但只能保证自己输得最少而已。
更复杂的演算,请到知乎上搜索,美女只要出正面的概率在(1/3,2/5)区间内,男孩一定输钱。可以自行调整源程序中2个概率参数,看一下男孩最终收益结果的变化。
对于股市或币圈投资的启示
参与游戏前要搞清楚预期的收益率,有些庄家或交易所总会搞出一些新鲜的玩法,如果游戏本质是零和(zero-sum)的,甚至是负和(negative-sum)的,那么玩得越多,赔得越惨。
股价和币价的短期走势不可预测,短线乱操作,只会越玩越少。