这是博弈论里的一个经典问题:

一位陌生美女主动过来和你搭讪,并要求和你一起玩个游戏。美女提议:“让我们各自亮出硬币的一面,或正或反。如果我们都是正面,那么我给你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)的,那么玩得越多,赔得越惨。

股价和币价的短期走势不可预测,短线乱操作,只会越玩越少。