聖彼得堡悖論,期望與實際相差為何這麼大?

知乎首問

關於聖彼得堡悖論,知乎,百度百科似乎都有解答,但我看來那些回答針對的是

為什麼人們不願花很多錢玩一次這個遊戲?

而我想問的是

為什麼計算機多次模擬(10^9次甚至更多)得出的平均距離期望這麼遙遠?

聖彼得堡悖論:

(直接摳百科)

設定擲出正面或者反面為成功,遊戲者如果第一次投擲成功,得獎金2元,遊戲結束;第一次若不成功,繼續投擲,第二次成功得獎金4元,遊戲結束;這樣,遊戲者如果投擲不成功就反覆繼續投擲,直到成功,遊戲結束。如果第n次投擲成功,得獎金2的n次方元,遊戲結束。

第n次結束的概率是,收益是,期望收益是1

所以總的期望收益應該是

然而我用C++打了個程序模擬(因為線性同餘法周期太小,我用的是梅森旋轉)10^9次,得出來的平均只有幾十。

以下代碼:

#include&
#include&
#include&
#include&

using namespace std;

bool isInit;
int index;
int MT[624]; //624 * 32 - 31 = 19937
long long sum,t,k,x,y,T ;
int cnt[101] ;
double lld[101],Sum ;

void srand(int seed)
{
index = 0;
isInit = 1;
MT[0] = seed;
for(int i = 1; i &< 624; i++) { int t = 1812433253 * (MT[i - 1] ^ (MT[i - 1] &>&> 30)) + i;
MT[i] = t 0xffffffff;
}
}

void generate()
{
for(int i = 0; i &< 624; i++) { int y = (MT[i] 0x80000000) + (MT[(i + 1) % 624] 0x7fffffff); MT[i] = MT[(i + 397) % 624] ^ (y &>&> 1);
if (y 1)
MT[i] ^= 2567483615ULL;
}
}

int rand()
{
if(!isInit)
srand((int)time(NULL));
if(index == 0)
generate();
int y = MT[index];
y = y ^ (y &>&> 11);
y = y ^ ((y &<&< 7) 2636928640ULL); y = y ^ ((y &<&< 15) 4022730752ULL); y = y ^ (y &>&> 18);
index = (index + 1) % 624;
return y;
}

int main() {
lld[1] = 0.5 ;
for (int i = 2 ; i &<= 100 ; i++) lld[i] = lld[i - 1] / 2 ; freopen("a.txt","w",stdout) ; for (int TTT = 1 ; TTT &<= 100 ; TTT++) { T = 10000000 ; srand(time(NULL) + rand()); sum = 0 ; Sum = 0 ; for (int i = 1 ; i &<= T ; i++) { t = 1 ; k = 2 ; while (1) { x = rand() ; y = rand() ; if (x &< y) { t++ ; k &<&<= 1 ; } else if (x &> y) {
break ;
}
}
cnt[t]++ ;
sum += k ;
if (sum &< 0) { cout &<&< "ERROR" ; return 0 ; } Sum += double(t) ; } printf("%.8lf ",(double(sum) / T)) ; } }

以下是模擬的結果:

每個小格是10000000次模擬的平均值


這裡每次獨立實驗的期望都是無窮,所以一般的強大數定律確實用不了。

但是有一條特殊的大數定律,可以適用於這裡。

所以這裡的樣本均值frac{S_n}{n} 滿足frac{S_n}{n}  xrightarrow{a.s.} infty是沒有問題的,但是經過你的模擬可以發現,frac{S_n}{n} 發散到無窮的速率比較慢。

於是我們可以考慮更精細一點的刻畫。

這裡我們有frac{S_n}{nlog_2n}  xrightarrow{P} 1(注意這裡是是converge in probability,而不是之前的converge almost surely)。

於是我們知道,隨著n的增大,frac{S_n}{n} 在大概率意義下和log_2n是同一數量級的。這一點與模擬結果是吻合的。參考資料:

[1]Probability:Theory and Examples - Durrett

[2]A Probability Path - Resnick


大數律要求期望存在且有限


兄弟,按這種出法,出1,2,4然後贏8元,你是不是只賺了1塊錢?


額……這樣一個嚴肅的問題,題主不去知網看論文,跑來知乎問,似乎不太妥當吧……

推薦題主去知網搜論文。一搜索聖彼得堡悖論就有很多文章出現,題主可以看一下哪些是對自己有幫助的。我搜到的一篇名為《聖彼得堡悖論的消解與決策學意義反思》的論文,裡面就說到了對於題主提出的問題的很多解釋,也分析了各種解釋的缺陷。還有很多其它的論文,題主也可以看一看。


有一個賭博的帖子裡面一個自稱數學系的朋友提到了一個「必勝賭法」,就是每次賭上一次的兩倍。別人這個帖子下面有個回復我很喜歡。大概意思就是,很快,沒等你賭贏之前,你就沒錢再下一次了。


直觀來看,是因為試驗次數太少。通過樣本數不夠充分的統計來對概率(模型)較低的事件的概率(真實)進行估計,得到的結果不夠準確。


推薦閱讀:

Windows電腦應當採取什麼散熱策略和安全策略?
計算機模擬的無法解決一個BUG,這是什麼理論?
catia,ansys,fluent電腦需求?
假設一台量子計算機可以模擬自大爆炸開始的宇宙,那麼這台電腦能模擬出(預測)未來嗎?(詳見描述)?
國家軟考的高級項目管理師證書有啥用?據說公司在申請大項目時需要有這樣的資質,聽說還可以掛靠什麼單位,有高人了解嗎

TAG:悖論 | 數學 | 計算機 | 概率 | 概率論 |