问题1:囚徒困境。两个同伙案犯被抓住了。他们被分别关押起来,不能交流。每个人可以选择招供或者抵赖,如果两个人都抵赖,那么两个人都将判刑1年;如果两个人都招供,那么两人都判刑6年;如果一人招供一人抵赖,那么招供者无罪释放,抵赖者判刑10年。
有人说那简单啊两个人都抵赖不就好了吗?但是事实是多数情况下两个人都会选择招供。为什么呢?
我们列出表如下,其中表的两个数据表示两个人会判多少年。(收益是年,越大收益越高)
A/B | 招供 | 抵赖 |
招供 | -6,-6 | 0,-10 |
抵赖 | -10,0 | -1,-1 |
这里我们不论对A而言还是B而言(对称),我们都可以发现招供对于抵赖是严格优势的。如果我们是A,如果B选择招供,那么我选择招供会比抵赖收益更高(-6>-10);如果B选择抵赖,那么我选择招供还是会比抵赖收益更高(0>1);所以如果两个人够聪明的话,他们都会选择招供。
现在是下一个问题。现在美女来和你玩个游戏,两个人各说一个数字,只能说0或者1。如果两个人都说1,那么她会给你3元;如果两个人都说0,那么她会给你1元;其余情况你给她2元。那么这个游戏你玩不玩?不玩?你就单身去吧。真正的问题是,这个游戏公平吗?
先列个表。
A/B | 0 | 1 |
0 | 3,-3 | -2,2 |
1 | -2,2 | 1,-1 |
这个表代表了所有可能的情况与收益。
如果我们进入游戏的话,假设游戏可以无限次进行,我们作为一个聪明的人,必然会有套路的说出自己的数字。具体而言就是说出0或者1的概率。我们有这样一个概率,对手也会有这样一个概率。那么当我们决定这个概率的时候,我们就必须要考虑对手的概率是多少。为了保险起见,我们会采用一个概率假设是x,在这里我们的收益最大。
首先我们要申明在x下不论对手选择什么我们的收益应当是一致的。因为如果我们的x得利于对手的1,那么必定亏损于对手的0。在不知道对手的前提下,保证相等是最稳妥的。
因此可列出式子 3x + (-2) * (1-x) = -2 * x + 1*(1-x),得x=3/8.有趣的是对于对手的数字概率y来说,概率也等于3/8.那么就是说如果我们每8局出3次1,5次0的话,收益是最好的。美女将会有优势。在这里我们可以写一段代码验证一下。
#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>
using namespace std;
int a;
int b;
void go(int c){
double aa,bb;
while(c--){
int d = 0;
aa=rand() / double(RAND_MAX);
bb=rand() / double(RAND_MAX);
if(aa>0.375) d++;
if(bb>0.375) d+=2;
switch(d){
case 0:
a+=3;b-=3;
break;
case 1:
a-=2;b+=2;
break;
case 2:
a-=2;b+=2;
break;
case 3:
a+=1;b-=1;
}
}
}
int main()
{
a=0;
b=0;
int c= 1000;
for(;c<1050;c++){
go(c);
cout<<"a="<<a<<" b="<<b<<endl;
a=0;b=0;
}
return 0;
}
a=-84 b=84
a=-106 b=106
a=-188 b=188
a=-58 b=58
a=-67 b=67
a=-181 b=181
a=-212 b=212
a=-171 b=171
a=-196 b=196
a=-133 b=133
a=-37 b=37
a=-135 b=135
a=-188 b=188
a=-223 b=223
a=-259 b=259
a=-71 b=71
a=-151 b=151
a=-63 b=63
a=-14 b=14
a=-109 b=109
a=-177 b=177
a=-135 b=135
a=-68 b=68
a=-80 b=80
a=-96 b=96
a=-156 b=156
a=-74 b=74
a=-123 b=123
a=-166 b=166
a=-181 b=181
a=-114 b=114
a=-98 b=98
a=-112 b=112
a=-97 b=97
a=-219 b=219
a=-83 b=83
a=-71 b=71
a=-146 b=146
a=-228 b=228
a=-117 b=117
a=-184 b=184
a=-84 b=84
a=-129 b=129
a=-68 b=68
a=-141 b=141
a=-213 b=213
a=-45 b=45
a=-114 b=114
a=-81 b=81
a=-168 b=168