房間內有 100 人,每人有 100 塊,每分鐘隨機給另一個人 1 塊,最後這個房間內的財富分布怎樣?

前註:本回答適用於 「房間內 100 個人,每人有 100 塊,每分鐘隨機一個人給另一個人 1 塊,最後這個房間內的財富分布怎樣?」這個問題的答案。具體兩者的區別及討論請參考評論區 -w-

---------------這裡是正文---------------------

這明顯是一道熱力學問題啊。看了大家的回答都在往每次交換後的狀態變化來思考,只有 @WXM 童鞋提到了Maxwell–Boltzmann statistics。這裡就從熱力學的角度展開思考一下

這個體系用一句熱力學的語言來描述的話是:對於一個孤立系統,有恆定數量的粒子和能量(對應人和金錢),這些能量是怎麼在粒子之間分布的?

對於這個系統的任意一瞬間,每個人處在某一金錢數狀態 i ,記其概率為 p_i ,能量即為金錢數 varepsilon _i = i (此能量跟彼能量不是一個能量,只是借用其概念,原因下述)。由Boltzmann"s equation可得其熵為 S_i = -p_iln p_i ,系統總熵則為 S = -sum p_i ln p_i

由熱力學第二定律(熵增定律)可得,當系統處於平衡態時,其熵最大,即求 S_{max}

從此處開始,首先可以排除掉的便是均勻分布,因為均勻分布對於一個體系來說,狀態數只有1(全同粒子),是整個系統里最"整齊","熵最小"的狀態。具體這個體系例子是怎樣分布的,需要我們求解整個方程, 解法如下:

代入系統中的兩個限制條件:1. 所有狀態的概率和為 sum p_i =1 , 即 sum d p_i = 0 ,2. 整個系統總能量(金錢數)恆定  sum varepsilon _i p_i = E/N , 即 sum varepsilon _i d p_i =0 ,利用拉格朗日乘因子法可解得 -ln (p_i) - 1-alpha-etavarepsilon_i = 0,帶入公式 sum p_i =1化簡可得p_i = frac{e^{-eta varepsilon_i}}{sum e^{-eta varepsilon_i}}

在系統中 sum e^{-eta varepsilon_i} 為一常量,可以看出在粒子數量足夠大,系統處於平衡態時,粒子處在某一狀態下的概率應呈指數形式分布。計算機模擬得到的結果也符合這一結論:

以下是500人每人初始250元,經過200,000,000次交易的模擬結果:

可以看出,在系統趨於穩定後,指數形式分布特徵明顯:

最後,代碼在這裡,模擬過程大家可以自行享用:

p_amount = int(500)
init_gold = int(250)
array = np.ones(p_amount) * init_gold

def update(j):
for i in range(int(5e3)):
donor = np.random.choice(p_amount, size=200, replace=False)
invalid = np.argwhere(array &< 1) donor = np.setdiff1d(donor, invalid, assume_unique=True) acceptor = np.random.choice(p_amount, size=len(donor), replace=False) array[donor] -= 1 array[acceptor] += 1 fig.clear() x = np.linspace(0, 500, 500) plt.vlines(x, 0, array, color="b", alpha=0.6) plt.xlim(0, 500) plt.ylim(0, 2000) plt.draw() anim = animation.FuncAnimation(fig, update, 200) anim.save(r"samp.mp4", fps=15)


(最後更新:大家的直覺是對的,這個問題實際上就是平均分布的)

看了團支書的回答,一開始覺得比較反直覺,對這個問題感到很好奇。相比最後的財富分布,我對每個人的財富變化更感興趣,於是模擬了一遍。

為簡單起見,我模擬了25人的情況,每人初始100元,分配10000輪,25個人的財富變化如下(允許負債/負值):

Y軸為財富值,X軸為分配的次數。可以看到大家的財富分布是趨於發散的,雖然每個人每次分到錢的概率都相同,但是總體來看大家的財富差距越來越大。

這個財富分配的變化圖,讓我聯想到學概率時的一個經典圖片(高爾頓釘板):

只要把上面的曲線圖順時針旋轉90度,就會發現曲線的走向和釘板上小球的行進路線很類似:都源於同一個起點,最後卻越來越偏離原點。唯一的區別是財富分配時分配給每個人的概率是相同的,而釘板上小球落到不同格子里的概率不同。

既然我們發現了它們之間的共同點,我們再來看一下題目:

房間內有 100 人,每人有 100 塊,每分鐘隨機給另一個人 1 塊

每分鐘,每個人都會送出去 1 塊錢,每分鐘 100 人共送出 100 元;每人送出鈔票後財富值都 -1,而是否得到別人送出的鈔票全看運氣。

這實際上等效於:每1分鐘,天上都掉下100張1元鈔票,每張鈔票都隨機掉到一個人面前;每分鐘每個人的財富值都 -1。所以實際上,每個人的財富值是否 -1 並不重要,因為大家都 -1,並不影響財富的分布;影響財富分配的只是掉下的鈔票掉到了誰面前。

再轉換一下,這個問題實際上等於:每分鐘給你100個小球,每個小球都隨機扔進100個箱子中的一個,問這100個箱子里的小球數量如何變化?

所以,這實際上是一個非常簡單的概率問題,和現實世界的財富分布並不是一回事,並沒有類比性。這個問題倒再一次提示我們:一些看似不合常理的事情,其實背後的邏輯很簡單。

補充更新:

一直有小夥伴糾結不允許負債的情況,我又更新了一下程序,這次不允許負債了,具體規則為:

當財富降為 0 時,相應玩家將破產出局;

未破產玩家的錢不會分配到已破產出局的玩家手中;

玩家每輪必須把一塊錢分出去,並且目標不能是自己。

依然是初始25個人,100元,模擬結果如下:

2萬輪分配:

當曲線與X軸相交時,表明財富降為 0 ,那麼相應的玩家會出局。可以看到,隨著時間的推進,不斷有玩家出局。由於財富總量不變,那麼顯然,剩下玩家的財富平均值會增加。不過從上面的圖片看,增加得還不是很明顯。

10萬輪分配:

20萬輪分配:

50萬輪分配:

由上面幾張圖片可見,越到後期,越多的玩家被淘汰,剩餘的玩家越少。原因很簡單:每個人財富增加或減少的概率都相同,每個人的財富都有降為 0 的可能,而降為 0 後就破產出局了,並且沒有新的玩家補充進來。所以隨著玩家的不斷淘汰,財富越來越聚集在少數人手中。

最終的結果將會是這樣:

最後會只剩兩名玩家,並且財富穩定不變。原因是當還剩3名玩家時,由於每個人的財富總有降為 0 的可能,當那個財富不幸降為 0 的玩家破產出局後,整個遊戲就之剩兩名玩家了。而根據規則,這兩名玩家都只能把錢分給對方:我給你一塊,你給我一塊。這樣,兩人的財富就不會再變化了。

由於最後會出現這種分配情況,所以我在之前就說,這個模型和現實世界的財富分配並不一樣,我覺得它們沒有類比性。(感覺這個說法不大好,還是有一定參考意義的)

就這樣了。(圖片都是Excel生成的,效果不大好,將就看吧)

-----------------更新的分割線-----------------

另外還有人覺得這是電腦隨機數不平均導致的問題,實際上也不是。來看一個跑了10萬輪的模擬(允許負債):

模擬結束時,25人的財富情況如下:

看起來差距很大對不對?實際上,這是因為10萬輪中每一輪每個人都送出去了一塊錢,最終每個人累計都送出去了10萬元,所以,每個人實際上分配到的錢是最終的財富值加上10萬,也就是這樣:

看起來差距也很大。不過你被騙了,因為這張圖的Y軸不是從 0 開始的,這相當於只截取標準柱形圖的一部分,然後拉伸Y軸,放大了差距。

標準的Y軸起始值為 0 的柱形圖是這樣:

可見每個人實際分配到的財富異常均衡!之前我們看到的巨大差距只不過是被放大了而已,並不是電腦隨機數的問題。每個人之間財富的差距,相比分配到的財富總值,簡直微乎其微。所以最後我們發現,我們的直覺還是對的,之前我們被表象欺騙了而已。這是一個活生生的「數據會說謊」的例子。


時間就是金錢


「所有人依然有100塊」這個預測只是「數學期望」,是所有可能性的平均值,任選一個人,他在多次實驗中,最後擁有的錢數平均下來應該是100塊左右。

實際上對一個人而言,一次循環就相當於將個人財產-1,然後進行一個p=1/99的99重伯努利試驗。當循環次數足夠多,每次循環後一百人的財產大致相當於從一個跨度極大的二項分布里抽了100個取樣點,必然有多有少。

(也可能是正態分布,代碼多次模擬的結果偏度係數都很小,不像超幾何分布的結果,很費解)

其實排序展示也有一定的誤導性,給人一種富者恆富的感覺,其實第一名一直在變化,這個實驗中不會有馬太效應。

我覺得這個實驗的意義就是教育我們學好數學,不然很容易被精心處理過的真實數據蒙蔽雙眼。


之前看成每次隨機給其中一個人一塊了。。

然後用excel試了幾次,第一名和最後一名差別不算太大,兩倍都不到。

而且隨著時間的推延,相對差距越來越小。

幾天之後才發現是把問題看錯了,

然後再模擬了一遍。。。。

由於用的是excel,每次隨機的過程都是可以看到的。。

然後發現,

按照題設,必然就是個「內耗模型」啊,

必然會出現運氣好的和運氣不好的。

而且差距必然會越來越大啊。。。

這其實和現實中一樣,

人類社會是在一直內耗呢,還是在一直隨機撿取命運隨機給你的機會?

具體的問題還是要具體分析滴。


既然要求分布,為連續性不妨考慮10^23人分配大數N個10^23元,交換方式是近乎無窮快地交換1元

持有X元的人數對應能級。總錢數總人數不變對應孤立系統;

由於兩人錢數對換顯然是兩種狀態,對應可區分粒子;

各態遍歷假設:隨機交換1元顯然可以令系統歷經所有可能的狀態;

(這個條件亦令初始條件100人100元變得無關緊要,因為同時也是任意初條件無限演化途中必然歷經的狀態)

最後看求的到底是不是最概然分布:

原題是無窮時間問【人數(錢數)】分布期望值,對應平衡狀態的熱力學量,在人數足夠忽略漲落的情況下顯然。

以上條件唯一地確定該分布為近獨立可區分粒子的最概然分布——玻爾茲曼分布:

a=exp(-α-βε) ,

其中ε為持有資金數,α、β為由總資金、總人數兩個歸一化條件確定的兩個參數,推導過程參見任意一本統計力學教材。

回到原條件,100人各100元,對應漲落巨大(平均值偏離最可幾)可能伴隨凝聚(可觀0元人數)的玻爾茲曼分布,但本質不變。

對題主的回答:該狀態不是最穩定,而是背後對應的微觀狀態數最多。

譬如宏觀上看起來一人持有所有錢和兩人各持有一半錢都是一種「分布狀態」,但前者對應100種情況,後者對應9900種情況。而由於無限時間的演化遍歷了所有的微觀「情況」,其中玻爾茲曼分布所對應的數量多到完全忽略類似前述兩者的存在。


那個排序根本就是誤導。因為在那個排序中,每個人的位置是隨機變化的。

最後出現不了一個穩定的分布,任何一個人的錢數都在隨機變化。


強烈反對引用原文及團支書的高票答案。

-----------------寫在前面--------------------

1. 也不講數學直接上程序算吧

2. 真的勇士敢於公開全部源碼(在末尾),用python不用R是因為想藉機熟悉python(其實R更熟一點)。python基本不會, 所以可能寫得很爛,隨意拍磚。

3.關於圖例用英文。其實一開始是用中文的,寫的可爽了,但是我搞不定python2的編碼問題。盡量寫的很口語化了,就是希望花時間讀的各位可以看懂,你看我都沒用類似empirical distribution這種詞。

4.沒有在知乎回答的經驗,平常也挺忙,不想寫太多,而且不擅長排版展示,您湊合看吧,我儘力了……

-----------------先給結論----------------------

反對引用原文及團支書的高票答案。

理由主要2個:

1.模型設定(見正文第一段)。

2.數據分布的謬讀(見圖1解釋)。

正確的結論是:

1. 公平的平民隨機分配。財富集中於初始值對稱分布,你可以成為任何人。

2. 有貧富初始差距,有貧富收益率差距分配。資本意味著可能性,越窮越難改變命運。

3. 有貧富初始差距,相同的收益率產生不同絕對值的複利。少數的富人和越來越多的窮人,窮人還是很難改變命運,但是中等收入人群可能突出重圍。

這說到底是經濟學模型,經濟學不是很懂,模型結論不一定真實適用,只是想說明引用的原文從數學邏輯的角度講肯定是錯的。

---------------正文--------------------

一、平民的隨機分布

先來講模型。通讀下來原文的所謂公平隨機分配的模型是:均等付出(每次第人1元)+ 隨機收益(每次每人0元或1元)。這一點都不公平,公平是付出和收益對等。極簡模型是,均等付出+均等收益,結果肯定是永遠所有人都一直是100元。加入運氣隨機成分應該是,隨機付出+隨機收益。

我採取了後者的模型,即隨機付出+隨機收益。既然是財富的分配而不是創造,總收益=總付出,此處每輪總付出設定為100元(人均每輪1元,但是由於隨機性,每人付出佔總付出的比值隨機,所有人的比值相加為1),運氣的隨機性導致每個人付出的值不一樣(不用原文的0元或1元因為擔心不夠平滑,收益部分同理不論)。

總結模型條件:(1)100人,每人初始100元,允許負債。(2)每輪遊戲總付出100元,每輪每人隨機承擔100元中部分付出。(3),每輪遊戲總收益100元,每輪每人隨機增加100元中部分收益。(4)遊戲進行20000次。

開始跑循環,結束,也按照原文作者的方法把財富值排序畫了柱狀圖。

圖1跟原作者的圖很相似,他就是這樣說財富的分布呈現冪函數分布,因為看起來Y值隨著X的增大呈現曲線上升的趨勢。可是X軸的數字其實只是100個人的序號,相當於是名字ABCD,財富值隨名字的變化趨勢並說明不了什麼問題。

以上圖2才是真正的財富分布圖,描述對於不同財富值,人口的集中和分散程度。超過20人擁有接近100元,臨近值也集中較多的人。即大多數人擁有100元左右的財富,少數有極高和極少的財富。這是因為100元是初始值,完全的公平隨機分配必然導致以初始值為中心的對稱分布。這是符合預期和常識的。(沒有做正態檢驗,不確定是否服從正態分布)

但是我知道你們真正關心的並不是這個。

其實大家想知道的是,出身對於發展的影響,即初始財富值和最終財富值的關係。我們的模型設定是所有人都是平民擁有均等的100元作為初始值,X只有一個值就是100元,所以散點圖排成了一條線(0.000 +1e2=100,這是科學計數法),Y值以100元為中心向兩邊對稱開。相同出身公平隨機分配情況下,財富的分布是完全對稱隨機的,你有機會成為任何人。

二、初始貧富差距導致貧富損益率分化

原文後續放寬條件的模型是,初始財富出現差異,高財富者的收益率比低財富者收益率高。延用這個模型,以及上文我們講到的付出和收益對稱的原則來模擬該模型,窮人付出率小收益率小(小投資小回報),富人付出率大收益率大(大投資大回報)。以下所有結果只給出真正的分布圖(類似圖2)和出身對發展的影響圖(類似圖3)。

總結模型條件:(1)100人,20人初始50元,20人初始150元,60人初始100元,允許負債。(2)每輪遊戲總付出100元,每輪每人隨機承擔100元中部分付出,窮人付出率權值減半,富人的付出率權值加倍。(3),每輪遊戲總收益100元,每輪每人隨機增加100元中部分收益,窮人收益率權值減半,富人的收益率權值加倍。(4)遊戲進行20000次。

有趣的現象出現了,財富的分布依然集中在中間值100附近,但是向低財富方向移動。

不同財富初始值以各自初始值為中心對稱,隨著初始財富的增大而增大浮動區間(即更大的標準差)。在這樣的規則下,初始財富越大,你可能發生的變化就越大。即窮人更容易固守貧窮,富人更突破階級(可能向上,也可能向下)。財富意味著更大的可能性。

三、初始貧富差距和複利

然而說到底這是經濟學模型,一般來講資本真正的力量在於複利,這才是富而越富的致命武器。對於以上模型進行修改,假設不論貧富所有人享有基本相同的資本回報率,隨機性體現在每個人回報率圍繞在相同的最大範圍1%以內平均波動。注意這裡貧富差距體現在由於本錢不同,在相同收益率獲得的收益不同,而不是收益率的差異。

總結模型條件:(1)100人,20人初始50元,20人初始150元,60人初始100元,允許負債。(2)每輪每人隨機承擔1%以內付出(3)每輪每人隨機增加1%以內收益。(4)允許槓桿,放開總付出和總收益相等的條件。(4)遊戲進行20000次。

財富分布進一步向低財富集中(圖6越來越像帕累托分布),即使是在相同收入水平內部分布更集中於中部和底部(圖7每根「線」的中下部都更加密集),各維度看都越來越符合二八法則。圖7同樣可以看出低財富的標準差小於高財富,然而令人驚訝的是中等財富者有最大的標準差和主最高財富值,富人失去絕對優勢可能是因為過大的風險導致過大的損失。這就是說大多數人越來越窮,窮人想改變命運的可能性相對普通人和富人還是很小,但是中等收入者有最大的變化範圍甚至是成為最富有的人。

以上,雖然筆者勉強也算有經濟學學位,但著實經濟學非我所長。最後這個模型依然有很多可以改進的地方,這裡只是重點討論與題原文的區別。很遺憾,世界並沒有跳出常識以令人興奮的奇特方式發展。

最後讓我勇敢地附上源碼,歡迎拍磚。

############################### random distribution #########################################
import numpy as np
import matplotlib.pyplot as plt

wealth = 100 * np.ones(100) #initiate with 100 Yuan for each person
init_wealth = wealth #just to save this number

for i in range(0,10000):
# cost
cost_rd = np.random.random(100)
cost_rate = cost_rd / sum(cost_rd)
cost = 100 * cost_rate
# gain
gain_rd = np.random.random(100)
gain_rate = gain_rd / sum(gain_rd)
gain = 100 * gain_rate # 100 Yuan distributed randomly
#result
wealth = wealth - cost + gain

print wealth

s_wealth = sorted(wealth)
plt.title("Figure1 There is no relation between name and fortune")
plt.xlabel("name(look like number)")
plt.ylabel("fortune(how much money)")
plt.bar(range(0,100),s_wealth)
plt.show()

plt.title("Figure2 This is real distribution")
plt.xlabel("fortune(how much money)")
plt.ylabel("population(how many people)")
plt.hist(wealth,rw=0.8)
plt.show()

plt.title("Figure3 what your really want")
plt.xlabel("fortune(initial)")
plt.ylabel("fortune(final)")
plt.plot(init_wealth,wealth)
plt.show()

########################## multiple difference distribution #############################

import numpy as np
import matplotlib.pyplot as plt

poor = 50 * np.ones(20) #initiate with 50 Yuan for 20 poor people
rich = 150 * np.ones(20) #initiate with 150 Yuan for 20 rich people
other = 100 * np.ones(60) # initiate with 100 for the rest other common people
init_wealth = np.append(np.append(poor,other),rich) # save the initial fortune for everyone

for i in range(0,10000):
# cost
poor_cost_rd = np.random.random(20) / 2
rich_cost_rd = np.random.random(20) * 2
other_cost_rd = np.random.random(60)
poor_cost_rate = poor_cost_rd / (sum(poor_cost_rd) + sum(rich_cost_rd) + sum(other_cost_rd))
rich_cost_rate = rich_cost_rd / (sum(poor_cost_rd) + sum(rich_cost_rd) + sum(other_cost_rd))
other_cost_rate = other_cost_rd / (sum(poor_cost_rd) + sum(rich_cost_rd) + sum(other_cost_rd))
poor_cost = 100 * poor_cost_rate # 100 Yuan distributed randomly
rich_cost = 100 * rich_cost_rate
other_cost = 100 * other_cost_rate
#gain
poor_gain_rd = np.random.random(20) / 2
rich_gain_rd = np.random.random(20) * 2
other_gain_rd = np.random.random(60)
poor_gain_rate = poor_gain_rd / (sum(poor_gain_rd) + sum(rich_gain_rd) + sum(other_gain_rd))
rich_gain_rate = rich_gain_rd / (sum(poor_gain_rd) + sum(rich_gain_rd) + sum(other_gain_rd))
other_gain_rate = other_gain_rd / (sum(poor_gain_rd) + sum(rich_gain_rd) + sum(other_gain_rd))
poor_gain = 100 * poor_gain_rate # 100 Yuan distributed randomly
rich_gain = 100 * rich_gain_rate
other_gain = 100 * other_gain_rate
#result
poor = poor - poor_cost + poor_gain
rich = rich - rich_cost + rich_gain
other = other - other_cost + other_gain

wealth = np.append(np.append(poor,other),rich) #final result in same order as initial

plt.title("Figure4 This is real distribution")
plt.xlabel("fortune(how much money)")
plt.ylabel("population(how many people)")
plt.hist(wealth,rw=0.8)
plt.show()

plt.title("Figure5 what your really want")
plt.xlabel("fortune(initial)")
plt.ylabel("fortune(final)")
plt.scatter(init_wealth,wealth)
plt.show()

########################## identical slope distribution #############################

import numpy as np
import matplotlib.pyplot as plt

poor = 50 * np.ones(20) #initiate with 50 Yuan for every 20 poor people
rich = 150 * np.ones(20) #initiate with 150 Yuan for every 20 rich people
other = 100 * np.ones(60) # initiate with 100 for every other common people
wealth = np.append(np.append(poor,other),rich)
init_wealth = wealth # save the initial fortune for everyone

for i in range(0,20000):
# cost
cost_rate = np.random.random(100) * 0.01
#gain
gain_rate = np.random.random(100) * 0.01
#result
wealth = wealth * (1-cost_rate) * (1+gain_rate)

plt.title("Figure6 This is real distribution")
plt.xlabel("fortune(how much money)")
plt.ylabel("population(how many people)")
plt.hist(wealth,rw=0.8)
plt.show()

plt.title("Figure7 what your really want")
plt.xlabel("fortune(initial)")
plt.ylabel("fortune(final)")
plt.scatter(init_wealth,wealth)
plt.show()


關注這個問題很久,實在是看不下去了。這個問題下面的回答很多都是為了求出穩定解而編出個穩定的圖忽悠人的。這無非就是一個簡單的Ordered Statistic的問題。在給定初始人數和初始財富數後,隨著模擬次數增加,期末狀態是越來越不穩定的,第n名的財富和第n+1名的財富之差的方差是越來越大。那些作出光滑的曲線的,摸著良心說,你敢多做幾次模擬么?看看那時你的曲線還是否支持你的結論。

真是暴露了一部分人搞研究基本靠編的事實。


列公式的都想複雜了,首先作為參照,想像氣體的熱平衡狀態,能量高的部分會傳遞給能量低的部分,越是偏離平均溫度,流失(獲得)能量就越快,所以形成一個負反饋,把偏離者拉回平衡,這樣的結果才是集中在均值附近的正態分布。

但這裡的條件沒有負反饋,不管你現在錢多錢少,都是給出1塊錢,然後和大家相同的概率獲得1塊錢,是一個沒有勢能約束的系統。就好像把一群盲人放在痛苦和快樂的中間,讓他們自由行走,有的人走到了快樂那一邊,有的人走到了痛苦那一邊,但是他們都無法知道自己的位置,也無法控制下一步的走向。某一時刻讓他們恢復視力,就會看見問題里鏈接所繪製的分布,在痛苦和快樂之間,他們是接近平均分布的(精確的分布推導看底部)。

上圖有問題的地方在於,橫坐標把用戶的金額排序了,顯示出富貴兩極化的假象。
改用Histogram直方分布圖分析每個財富段的人數,會發現還是平均分布的,因為整個系統的反饋是始終平衡的,不會對窮人或者富人有指向的引導。

接下來的問題是,已經走向快樂那一邊的人,最後更有可能留在那裡嗎?如果這個人在決定停下來以前都是看不到痛苦和快樂的話,那他就無法知道何時停下來最好,隨機停止的話,每個人的機會是一樣的。
但問題里的系統有一點是欺騙性的,就是這裡面每個玩家都是睜眼的!所以我們以為他的成功是註定的,只要在賺錢的時候即時收手,就是人生贏家。如果他無法決定收手的時間,或者永遠無法停止,那就是其他答案里提到的,在無窮遠的時間後,大家的貧富概率均等。

最後衍生一個問題,很多人還是擔心富人會越來越富,這種情況只有系統存在正反饋的時候才會發生,那就是隨著金幣的增多,你獲得金幣的概率會增加,最後的分布就是兩極分化。抱歉 現實生活正是如此,所以貧富分化在現有制度不變的情況下是必然發生的。什麼情況能打破這種格局呢?那就是清空內存,重啟系統的時候,比如70年前,你懂的。

—————— 嚴肅的分割線 ——————

為了證明最終分布是接近平均的一個分布 我們試著從初始狀態往後面推導看

round1 所有人集中在100財富

round2 所有人都要付出一元錢,那麼沒有任何收入的人會降到99元,這個概率是100個 每個人都把錢給了別人,所以是(99/100)^100 這樣的人數是37人

還有的人正好收入1元錢,財富不變,這個概率是 有1個人把錢給了你 有100種情況,而其他人都把錢給了別人 有99^99 種情況,那隨機分配總的可能性有100^100,所以這部分的概率是 100*99^99/100^100 算出來常以100人就是37人

收入2元錢的人,財富開始上升了,概率類似的 100人 * COBIM(100,2)*99^98/100^100 = 18人

何在一起,財富從99開始往上的人數依次為 37,37,18,6,1 這個時候不是完全的平均分布,但可以想像為頭部為平均分布拖著一個小尾巴的波 或者 內核

round3 前一輪分布在不同位置的人,還會以相同的概率增加或減少財富,等於上一輪的波泛起了漣漪,我們對每群人都進行分布拆分,最後再匯總,就是下面這個圖表

可以看到 因為波函數的頭部和主體是平均分布的,所以隨著波的傳遞,平均分的範圍會逐漸擴大

那麼接下來只要證明平均分布是穩定的最終態,基本上這個問題就可以說講清楚了

簡單期間,我們就把100個人先平均分配到11個格子里,每個格子約9人,再做一輪波的傳遞,結果如下

可以看到 中間大部分區域已經是平均分布的 保持9的人數,但是兩頭會彌散開。
不過我們設置了下限(就是沒錢了以後不用扣款)所以把左側數量匯總一下的話,也是接近均值的。同樣如果設置了上限,那右側最有錢的人的分布也是均勻的

到這裡,問題已經全部解決了,題主的系統里只設了下限,所以真實的分布是除了最富有那一頭是衰減分布以外,主體都是平均分布的

EOF


特意跑來BS亂用小數據來分析社會問題得出搞笑結論的人

改成初始每人1000塊再看看圖就知道問題出在哪裡了

主要問題在於100元每次1元17000次很容易被清光所以感覺都破產了


前幾天我們再參加一個電氣工程與計算機科學的主題會議,遇到了 Uri Wilensky,他和我們分享了一個很有趣的分配模擬。

問題是這樣的:

想像著,有一個房間,裡面有 100 個人,每個人有 100 美元。每過一會,每個有錢的人給隨機的其他人 1 美元,經過一段時間後,房間內的資金分配情況是怎樣

如果,你快速的思考,然後認為「或多或少的趨於平均」,你這個想法並不孤單。

我問了 5 個超級聰明的博士,他們也都有同樣的第一感覺,認為會趨於平均。

所以,真實的分布狀況應該是如何呢,請看下面這個 gif。

  • gif 的左上角是次數,每次代表著一次財富的改變。
  • Y 軸顯示的是美元存量,初始 45 美元。
  • X 軸顯示的是 45 個人。
  • 上圖(紅色圖)顯示每時,每人的財富。
  • 下圖(藍色圖)就是把紅色圖遞增排序了一下,方便查看。

不信這個結果么?你可以用 R、tidvverse 和 gganimate 代碼自己跑一跑。

不平等可能源於完全無害的政策和規則,你要時刻關注他們。

library(tidyverse)
library(gganimate)

NUMPLAYERS = 45
ROUNDS = 5000
INITWEALTH = 45

#initialize the bank
#columns wealths of the NUMPLAYERS players
#rows show wealths of each of the ROUNDS ticks of the clocks
bank = matrix(0, nrow = ROUNDS, ncol = NUMPLAYERS)
bank[1,] = c(rep(INITWEALTH, NUMPLAYERS))

#function to give a dollar to someone other than oneself
get_recipient = function(player) {
sample(setdiff(1:NUMPLAYERS, player), 1)}

#execute trades and update the ledger
for (i in 2:ROUNDS) {
#every player with wealth chooses another person to receive a buck
recipients = sapply(which(bank[i - 1,] &> 0), get_recipient)

#table of the dollars owed each person
count_table = table(recipients)

#get the indices of the people owed money
indices = as.integer(names(count_table))

#everyone gives up a dollar, unless they are at zero
bank[i,] = ifelse(bank[i - 1,] &> 0, bank[i - 1,] - 1, bank[i - 1,])

#selected people receive dollars
bank[i, indices] = bank[i, indices] + count_table
}

####################Animate it
#Make a suitable long data frame
df = as.data.frame(bank)
names(df) = 1:NUMPLAYERS
df = df %&>%
mutate(frame = 1:ROUNDS) %&>%
gather(person, wealth, 1:NUMPLAYERS) %&>%
mutate(person = as.numeric(person)) %&>%
arrange(frame) %&>%
group_by(frame) %&>%
mutate(rank = rank(wealth, ties.method = "random")) %&>%
ungroup() %&>%
gather(histtype,playerid,c(person,rank)) %&>%
mutate(histtype = sprintf("Ordered by %s", histtype))

p &<- ggplot(df, aes(x = playerid, y = wealth, frame = frame, fill=histtype)) + theme_minimal() + theme(panel.grid.major.x = element_blank(), panel.grid.minor = element_blank()) + geom_rect(aes( xmin = playerid - .4, xmax = playerid +.4, ymin = 0, ymax = wealth)) + scale_x_continuous(breaks = 1:NUMPLAYERS) + coord_cartesian(xlim = c(0, NUMPLAYERS), y = c(0, 5 * INITWEALTH)) + theme(axis.text.x = element_text(angle = 90, hjust = 1)) + labs(x="players",y="dollars") + facet_wrap( ~ histtype,ncol=1) + theme(legend.position = "none") p #set options for the animation package. Need ImageMagick installed on your computer animation::ani.options(nmax = ROUNDS, convert = "C:\Program Files\ImageMagick-7.0.6-Q16") #save the movie gganimate(p, "dollar_stacked.mp4", interval = .01)

(R 語言版,Github:give_a_dollar.R )

園長:我想,這就是運氣吧。

原文:Counterintuitive problem: Everyone in a room keeps giving dollars to random others. Youamp;amp;amp;amp;#x27;ll never guess what happens next. - Decision Science News


反對以上用代碼得出非隨機答案的結論,因為代碼裡面的隨機並不是絕對概率隨機的。

每個人的支出都是一樣的,那麼決定一個人最終財富的就是他的收益如何。我們用代碼去模擬足夠多次數後,把每個人收到錢的都統計下來就會發現:

不同的人收到的錢的數是不同的,這是為什麼呢?

因為根據前面的條件我們要隨機給別人一塊錢,那麼這個隨機數便是決定誰能拿到這塊錢的關鍵。

我們生成0-99的隨機數,隨機庫生成的隨機數分布並不是相等的。他們每個數之間會存在微小的差別, 雖然這個差值很小但是我們在擬合多次以後,這個 差值p * 擬合次數N = delta 這個 delta 可能比100 這個原始值遠大,所以最終出現的概率分布其實就是這個delta 的大小分布。


這個問題最大的陷阱在於每個人初始只有100塊,如果將每個人的初始金額改為100000,不管跑多少個loop,最終每個人的持有金額還是會在95000-105000之間,這個金額和初始金額100000相比可以說幾乎沒有區別。

因為初始金額太小導致看上去貧富差距變大了而已。

不信自己去跑python代碼。

import random
l = [100000 for i in range(100)]

count = 0
while True:
count += 1
give, get = random.randint(0, 99), random.randint(0, 99)
l[give] -= 1
l[get] += 1
if count % 1000000 == 0:
print count, l


最終會達到一個接近泊松分布的穩定分布

可以考慮一個最簡化的版本

三個人甲乙丙,每人起初各自一塊錢;然後每分鐘內,手頭還有錢的人都要拿出一塊錢,隨機交給另外倆人之一

系統分布的可能狀態有三種:

A=0+0+3,錢集中在一人手上

B=0+1+2,有一人是光蛋

C=1+1+1,三人均等

容易算出,轉移概率 P(B|A)=1, P(C|B)=1/4, P(B|C)=3/4

因此當時間趨於無窮時,有1/4的概率三人均等,有3/4的概率有一人是光蛋

對於特定的某一個人比如甲,他的錢分布概率為 P(0) = 1/4, P(1) = 1/2, P(2) = 1/4

換成100個人100塊錢的話,計算的程序是類似的,只不過可能的狀態數會大大增加,轉移概率算起來會麻煩許多


你們都受騙上當了!!!

起初,我自己用C#寫了類似代碼,運行了3次,結果和「團支書」一致,統計圖如下:

如果你真以為這樣,你們就受騙上當了!!!

關鍵問題出在隨機含數演算法上。一般認為,編程語言中提供的隨機函數演算法,是平均分布的,錯就錯在這裡!

隨機函數不是平均分布的,而是有擾動的不平均分布。而且,擾動成冪律分布。圖所反映的實質是隨機函數的擾動結果。

如果將隨機函數改造成平均分布,結果是這樣的:

平均分布的隨機函數代碼如下,大家可以試試:

class RndClass
{

int Cnt = 0;

int[] Arr;

Random RndObj = new Random();

public int AbsoluteAverageRnd()
{

if (Cnt == 0)
{


Cnt = 100;

Arr = new int[100];

for (int i = 0; i &< 100; i++) Arr[i] = i;

}

int k = RndObj.Next(Cnt);

int RetRnd = Arr[k];

Cnt--;

Arr[k] = Arr[Cnt];

return RetRnd;

}

}


很有意思的一個理想化模型,我也來試了試,得到了和題目鏈接中的一致的結果。這是個好兆頭,因為接下來我們可以對這個模型做一些改進,看看情況的變化,會得到一些有意思的結果。

先上結論吧~

#### Take-home Message ####

1、封閉系統內的財富分配演化有自身的規律。經過有限時間,財富分配會顯著偏離初始的均一狀態。

2、「市場規範」和交易員的「主觀意志」能夠阻滯財富分配的演化,但是不能阻止非均勻分配的趨勢。

3、「市場規範」的阻滯效用較小,「主觀意志」能夠極大地延長演化步驟。對「主觀意志」的描述越接近真實,演化步驟的不確定性越大。

4、儘管非均一的財富分配狀態不可避免,由於「主觀意志」的引入極大地延緩系統演化的步驟,可以預測,在這個過程中利用更加複雜化的「市場規範」能夠在有限時間範圍內改變系統內的財富分配狀態,避免極端現象的發生。

##### END MSG #####

#### 題解 ###

首先,我們先回顧一下原始的題設:

1、一個封閉系統中,有100個人,每人有本金100個單位的財富

2、在一個單位時間步驟內,每個人都必須隨機地給別人1個單位的財富

為了便於討論,我們增加一個邊界條件和一個執行操作:

a. 當系統中所有人持有的財富的方差恰好&>=100時,停止交易

b.進行500次的重複模擬,計算所消耗的時間單位的平均值和標準差

一、原始狀態(僅僅包含條件1和條件2)

首先,對於題目中的原始模型,我的結果如下:

此時,整體達到102.42的方差(不大可能恰好落在100上)。在500個重複模擬的樣本下,此時所需時間單位的平均值為81.024,標準差為12.58377.

二、修改條件:

3.把原條件2中,時間單位內,每個人強制給出財富,修改為隨機選取N個人(N的數值也是隨機給出)進行強制的財富給出行為,輸出結果:

此時,整體達到101.92的方差。在500個重複模擬的樣本下,此時所需時間單位的平均值為141.204,准差為22.238.

三、增加條件:

在二的基礎上增加條件:

4、每一個人在交易過程中,有1/2的概率完成交易和1/2的拒絕交易的概率。此時,模擬的結果如下:

此時,整體達到101.35的方差。在500個重複模擬的樣本下,此時所需時間單位的平均值為5194.274,標準差為76.296.

至此,我們把上面的數據放在一起比較:

達到近似(幾乎相同)的方差下,各個系統所需要的時間單位的數目:

i) 原始條件: 81.204 pm 12.583

ii) 允許每次只有部分人進行強制交易: 141.204 pm 22.238

iii) 允許每個人有1/2的概率拒絕或接受交易: 5194.274 pm 76.296(這些數據其實不必要精確到小數點後3位,基本上保留整數位就夠了。)

因此,我們可以看得出來,儘管各種限制條件的加入能夠延遲系統達到目標狀態的時間,但是其延遲作用是有限的。二和三中修改或添加的條件,都是在限制每個時間步驟內的完全無差別自由交易,但是在較長的時間狀態下來,這些限制只是減緩了系統的演化步驟,並不能真的阻斷系統發展,time after time,系統還是會達到那個我們目標的狀態。

如果我們把「每次只有部分人進行強制交易」當成是某種市場規範,把「每個人有1/2的概率拒絕或接受交易」當做是主觀意願,那就很有趣了。市場規範對系統演化的延遲作用雖然較大,也只有大約75%的提升寬度。但是引入個人的「主觀意願」後,對整個演化的延遲作用達到了~6300%的效用。(當然這裡「主觀意願」的近似並不嚴格,現在採用的只是簡單的無差別「1/2」概率。理論上可以把意願和當事人手中持有的財富額關聯起來,當然這就等以後我有空的時候再補上了。)

這讓我想起,在電影《泰坦尼克號》里,當船剛被冰山劃破時,設計師,船長和其他幾個人召開了緊急會議。會上,設計師對船身四個船艙進水表示了絕望,他說「泰坦尼克號可以承受三個船艙進水,不能是四個,不能是四個」,此時船長在一旁說「用水泵抽水可以么?」,設計師答道:

「它會延緩一點時間,但也就一兩個小時而已,現在不管我們做什麼,泰坦尼克號都終將沉沒」(原話可能是「It will buy you some time ,but hours only. ..No matter what we do, the Titanic will sink.」)

如同這個模型中,這些限制條件的加入也只是延緩一點時間罷了……

##### 更新一下 09/08/2017 #####

四、更加「真實」的「主觀意願」引入

在三中,我們給每個人在單位時間內添加了1/2的交易概率條件,用來模擬個人「主體」意識在交易中的影響。這種極簡的近似,已經說明,交易方的主觀意向能夠極大程度的阻滯整個系統內的財富分布演化。現在,我們對這種「主觀意向」做一些精細的模擬。

把上面的模擬結果的縱坐標——各人持有的財富值作為橫坐標,用正態分布標準化處理,並和標準正態分布的累積概率密度函數放在一起,可以看出,經過有限多次的交易,總體的財富分布很好地呈現出正態分布的狀態:

基於正態分布的特性,我們做一個近似的2-8定律假設,即位於財富平均值的左方1個標準差( 1sigma )之左的人在交易中完全拒絕給出,但允許被給予。右方區域的人則允許給出財富。也就是說,財富值處在整體的後15.87%(近似看做20%)的人不再給出財富,但可以接受財富。在財富較多的84.13%(近似看做80%)的人中給出和獲得財富的行為都允許發生,這也可以被看做一個2-8定律的近似,如下圖。

這種近似方式比上文中簡單1/2的描述更加貼近事實。那麼模擬的結果是:

此時,整體達到102.626的方差。在500個重複模擬的樣本下,此時所需時間單位的平均值為5152.396,標準差為2434.127.

Astonishing! 與三中的結果相比,這種更加「真實」的條件的引入,居然幾乎不改變需要的時間單位平均值,但是標準差居然變得這麼大,也就是說系統達到目標狀態所需的時間單位可以在3000-8000步之間,這很有意思。儘管這仍然比最原始模型所需的~80步要多得多,但是相比較於一個極簡的「主觀意志」模擬,這種更加貼近實際的近似給系統的演化帶來了更大的不確定性。系統終將會演化到一個目標的狀態,但是經歷的時間步驟會極大地受到其中各個參與者的主觀意志影響,並且這種影響本身也具有很高的複雜性和難以預測性。

加入更加貼近真實的主觀意志描述後,整個系統內的財富分布已經明顯偏離了正態分布(有限時間,目標方差100)。可以看出,相較於貼近正態分布的結果圖,現在的結果圖中,最低的財富持有額度在90左右,大於三中大約80的數值。這是由於2-8定律禁止了財富較少的人交易的結果,實際上是延緩了財富從「窮人」手中流出的進程,避免了「窮人」更快地貧窮下去。本節的圖中,最富有的人相較於三中最富有的人,財富大約增加了10元。表現出來的現象就是「窮人財富降低有放緩,但是最富有的人群財富增高」,這背後的原因是「中產階級」的減少,這一點從三、四的圖中能直觀地展現。

我們可以把「主觀意志」的模擬變得更加貼近真實,比如上述2-8定律和1/2概率的結合,即願意給出財富的~80%的人,每個人仍然具有1/2的概率選擇進行或拒絕給出財富。在這樣更加「真實」的情況下,我猜,所需要的平均時間步驟一定更大,相應的標準差也一定更大。(我試著在我的小本上跑了一下,可惜3小時還沒結束,以後有空的時候放到伺服器上再試試)

##### 更新 ######

五、把2-8定律和1/2概率的結合,即願意給出財富的~80%的人,每個人仍然具有1/2的概率選擇進行或拒絕給出財富。我的小舊本經過4個小時的運行,終於吐出了結果圖:

此時,整體達到101.495的方差。在500個重複模擬的樣本下,此時所需時間單位的平均值為42216.396標準差為20490.637. 如同我猜測的,這是個非常巨大的數字。

儘管如此,這些限制條件的加入也只是延緩一點時間罷了……

不過呢,既然延長了這麼久的時間,我們或許可以利用外部政策對財富分配的狀態做一個改變,2-8定律的引入已經造成了顯著的影響,未來或許可以試試加入其它政策的近似模擬。還是那句話:「以後有空再做吧"


給一個通俗一點的理解方式吧:

我每次都隨機的把100個1元錢給100個人,重複10000次,最後每個人是不是都獲得約10000元?可能有的人多點,10100元;有的人少點,9900元。但在10000這個量級上,這些變化看起來不大。

現在回到原題,為了方便說明,把原題改成錢可以為負值,這差別不大。這樣的話呢原題中每個人的錢的變化就相當於在上面所說的結果上再減去10000,這樣一來那些差別就變得很明顯了啊。有的100,有的-100,就是這樣了。


我一定一定要來回答一下。本人書讀得少,就用大學「概率論與數理統計」來搞這個東西吧。

先用帶數學符號的語言重新描述一下這個問題吧:假設有N個人,每個人有N塊錢。每分鐘每個人在除自己外其他N-1個人中隨機(均勻分布的隨機)選一個,給對方一塊錢。這樣過了M分鐘後,財富分配什麼樣。

再補充一個假設:如果一個人沒錢了,那麼他可以借錢來繼續玩這個遊戲,這個人的財富計數為負。這樣避免了有人沒錢後被踢出遊戲,隨著被踢出的人數逐漸增多,剩下的玩家變少之後的穩態就是兩個人互相給對方一塊錢這種trivial的結果。

既然每個人都一樣,我們直接就來分析一個人好了。

1. 這個人首先要做的是給出去一塊錢,對他自己來說,給誰不重要。

2. 這個人可能會從其他N-1個人那裡收到錢。給錢不重要,但收錢就是改變命運的大事了。對於任何一個「其他人」,這個人從「其他人」那裡收到錢的概率都是1/(N-1)。收到了就是1塊錢,沒收到就是0塊錢。這是典型的伯努利分布。一共有N-1個沒分別的「其他人」,也就是相當於做了N-1次獨立同分布的伯努利實驗。這樣,「這個人」一共收到的錢數,就變成了二項分布。均值是(N-1)*1/(N-1)=1,方差是(N-1)*1/(N-1)*(N-2)/(N-1)=(N-2)/(N-1)。

當這個N比較大的時候,二項分布可以用正態分布來「逼近」。(具體要求我先佔個坑,回頭查了再補充上)

那這個人收到的錢,就是以1為均值,以(N-2)/(N-1)為方差的正態分布了。

結合他自己給出去1塊錢這個事實,那麼在一輪遊戲中,或者說在一分鐘內,他收穫的錢,是一個正態分布的隨機變數,均值是0,方差是(N-2)/(N-1)。

M輪以後,「這個人」所收穫的錢相當於每一輪收穫的錢的和。由於每一輪收穫的錢又是相互獨立且相同的正態分布隨機變數,那麼M個這樣的隨機變數的和還是正態分布的,均值仍舊是0,方差變成了M*(N-2)/(N-1)。

考慮到「這個人」初始狀態時有N塊錢,則M分鐘後(M輪遊戲後),「這個人」的財富是一個均值為N,方差為M*(N-2)/(N-1)的正態隨機變數。

由於本人在某花廠,信息安全管理太嚴格,不敢上傳模擬代碼,回家以後重新寫代碼。MATLAB目測也就20行。

先看一個100個人100塊錢的統計分布直方圖。


寫了一個程序來測試。10個人,每人10塊錢,分別運行10000次和1000000次,結果確實把我驚到了。

後來一想,如果每次這個錢不是自己出,而是從天上掉,會怎麼樣呢?也就是每一輪,每個人讓老天從天上掉一塊錢,隨機砸給其它9個人。

下面兩次運行結果,第一行是每個人出一塊錢砸給其它人的結果,第二行是每個人命令老天出一塊錢砸給其他人的結果。

這個遊戲告訴我們:不要去參加任何零和賭博遊戲,即使看起來每個人機會均等,你也不要以為玩很多次之後你應該會保本。

其實前面有個答友說的很對,雖然均值是0,但是方差在累積。但是他說這是由於每個人不能負債導致的,這個理由是不對的。

而實際上,每個人最後結果的差異,相對於遊戲的輪數來說,依然還是很小的比例,1%~2%,在概率意義上,這個差異還是0.

D:devMoneyDistx64Release&>MoneyDist.exe 10 10 10000 1
argv[1]: number of participants
argv[2]: initial fortune
argv[3]: number of iteration
argv[4]: can fortune be negative? 0 or 1
-145 -124 -58 -15 23 52 68 88 92 119
9930 9951 9958 9977 10026 10033 10035 10036 10070 10084

D:devMoneyDistx64Release&>MoneyDist.exe 10 10 1000000 1
argv[1]: number of participants
argv[2]: initial fortune
argv[3]: number of iteration
argv[4]: can fortune be negative? 0 or 1
-2958 -1602 -994 -295 -133 440 625 773 2046 2198
998506 998650 999147 999752 999849 999910 1000435 1000793 1001450 1001608


如果0元直接出局,最後房間里只會有一個終產者。


看了別人的答案覺得次數不太夠,自己模擬了一下

1000000次,1000人,100元。縱軸是錢數

允許負數以後是這樣。(y軸縮到了0.1倍)

分布曲線看起來有點像正態?


隨便看了幾個高票答案,覺得太抽象

不允許負債的情況可能略複雜,因為錢接近於0的時候獲得錢的期望是會改變的,至於允許負債就很好理解了

我數學不是特別好,也懶得去推導,作為一個EE狗,我覺得最直觀的應該是以下第一張圖(其他的跟前面的人是一致的),圖為不同金錢的人數分布

難道這個題不應該用中心極限定理來解釋嗎?這不就是個正態分布嗎Orz

允許負債的情況下,每次每個人獲得/丟掉的錢是同分布的,一個人是抽取minutes次的,而總共抽取person個人,那麼這person個人獲得/丟掉的金錢實際上就是一個正態分布,加上原金錢自然也是一個正態分布

這是不允許負債的結果(應該是半個正態分布了)

以下是matlab代碼(原諒我的渣code),為了讓結果更密集,改成了5000人

close all
clear

init_money=100;person=ones(1,5000);minutes=10000;
money=init_money*person;
figure, plot(money,".");title("初始金錢");axis([0 5000 0 200]);

for i=1:minutes
for j=1:length(person)
if money(j)&>0 % 如果是求允許負債的情況,改成if 1
money(j)=money(j)-1;
GetMoneyPerson=randperm(length(person),1);
money(GetMoneyPerson)=money(GetMoneyPerson)+1;
end
end
end

figure, stem(money,".");title("分配後金錢");axis([0 5000 -300 500]);
figure, stem(sort(money),".");title("分配後金錢-排序");axis([0 5000 -400 500]);

max=max(money);
min=min(money);
num=ones(1,length(max-min));
for i=min:max
num(i-min+1)=length(find(i==money));
end
figure, stem(num,".");title("不同金錢人數");
set(gca,"xtick",0:20:max-min,"xticklabel",min:20:max)


看到了所有回答都是經濟學式(數學式)的回答,但這個屋子首先是一個小社會。

看過一個段子,那個PO主說

同來人全是學經濟的,每天看我讀papers就湊過來問,社會學學什麼,人類學學什麼,學這個有什麼意義之類問題。我很無奈隨便解釋一番,然後天天被群嘲:「社會學的發展真是太不完善了」,「經濟學完全可以解釋社會學的所有問題」,「你讀這麼多文字不就是浪費時間嗎」云云。還熱情地教我讀書方法。

這其實是一種還原論的說法。。理論上人類學和社會學都可以被經濟學還原,經濟學都可以被生物學還原,生物學都可以被化學還原,化學都可以被物理還原。。。於是其實這個世界只有物理一門學科www

但是其實經濟學要假定理性人,而人是非理性的,所以其意義是指導而非描繪。。而物理學的基礎也是不那麼牢靠的數學,世界是個現象世界,無可辯駁的基礎是不存在的,人類一步步加碼套娃的過程其實也是無奈之舉。 所以說,這個世界上實在論者還是非常之多的。。

舉個最通俗的栗子 按照理性人原則 在人口自由流動的地方 各地的人均GDP應該趨於一致--賺錢少的地方的人口向大城市流動,本地人均資源高了,個人的經濟狀況就好轉了。

但即便最自由流動的國家,雖然比有戶籍制度的中國人均GDP協調的多,但依舊做不到完全一致,還有不小的差距,這時候社會學人類學和心理學就要上場了,研究人的非理性部分,為什麼你死活不搬家,是這裡有你的教派,還是你民族主義強烈,還是你乾脆習得性無助等等等,這些部分很難被經濟學所還原。。

所以社會崤這種東西,對於越來越細分的研究是有極大幫助的。。

這麼看經濟學其實和數學比較像,假定一個公理,因此發育出無窮的定理,這在某個邏輯宇宙中是真理,特別可惜的是這不是我們的宇宙。

於是回到我們這個話題,題主所問的標籤里加入了社會公平這個選項,意味著其實際意義是希望解決現實社會的困惑。

那麼真正答案就是,不知道。分著分著就會有人死掉,會有遺產的繼承和爭奪。分著分著,隨機分到更少的就會聯合其他更少的試圖改變遊戲規則來扭轉失利。類似偶發的現象還有很多。

所以現在經濟學整體有一個所謂的行為經濟學轉向,也就是引入心理學和社會學,把人假設成非理性而非理性的再做分析,西方經濟學有,馬經也有。

思想實驗的意義僅僅是在限定變數的前提下完成一個遊戲,還是那句話,它肯定描述了一個邏輯宇宙,但肯定不是我們的宇宙。


錢我不知道會怎樣,但是時間會集中在一個人身上


這個問題下面的答案都有些誤導,沒幾個真正在討論「分布」,而是在討論「絕對值」。

既然說到分布,就必然是有概率。也就是說,有多少錢的人佔比多少。

下圖是一個模擬結果,1000人,1000元,1,000,000,000次模擬(強大的Ryzen 5 1600運行了半個小時)。

總體來說,1000左右的人仍然佔主導,富豪和窮人仍然是少數。

那個排序圖太誤導人了,讓人覺得好像是負指數分布。上圖經過排序(根據人數多少排序)後,分布圖:


看了各位大神的解答,發現並不能聽懂,但我對這個問題還是很感興趣,於是動手寫了代碼實現了一下,現象的確沒問題,然後覺得很奇怪,直覺感覺明明每個人的錢都應該差不多,為什麼有人沒錢了有人的錢翻了好幾倍呢?

作為僅僅學過概率論的同學,覺得自己想明白了。這個實驗里近似可以分為兩部分,第一步,每人減一塊錢,第二步,把等同於人數的錢重新隨機分給所有人。這是近似,但不會影響結果,因為少數的錢為零的人並不會明顯影響整體分布。第一步並不是隨機的,既然關注概率問題,那麼把第一步去掉會怎麼樣呢?

想像一下就可知道,每個人的錢近似於迭代次數,但彼此會相差幾百元左右,或者更多,但與迭代次數相比肯定是小得多。現在每個人的錢應該是正態分布(猜的,沒細研究)。一切都沒毛病。

我每迭代一百次求一次方差,然後除以當前的迭代次數,迭代20萬次後結果如下圖。

(隨手拍的,各位將就著看吧)相對於迭代次數方差是下降的。

我概率這些內容學的不深,也就是簡單的想了想。總結來說,這個實驗近似於,每次拿一百元錢隨機分給一百個人,然後重複很多次後,減去一個略小於迭代次數的數,差不多就是原實驗的結果了。

近似來說大概就醬。總的來說和直覺差別不大。

總的來說就是雖然人與人之間的差距很大,但與獲得過錢相比還是很小的。


推薦閱讀:

隨機敲鍵盤能敲出一部小說嗎?
纏論中關於概率的計算是正確還是錯誤?
概率分布的自由度是怎麼得來的?如何理解其含義?
從1到N中隨機抽取一個數(N為上限,不被抽取)作為新的上限繼續抽取,直到上限為1。求總抽取次數的期望?
為什麼P(A|B) = P(A)可以推出事件A和B相互獨立?

TAG:數學 | 社會公平 | 概率論 | 系統科學 | 財富分配 |

分頁阅读: 1 2