可視化做品連接地址:http://reinhardhsu.com/game.htmljavascript
最近讀了比爾蓋茨的夏日書單中的薦書《鄉下人的悲歌》,
html
書中描述了貧窮、毒品和一系列陋習,像遺傳病同樣,困擾着一代又一代的美國底層人民,使得他們生活艱辛,充滿了各類不幸,而且很難向更高的階層遊動。前端
另外一個是聽到網易蝸牛讀書的有聲讀物《若是不能改變階層,咱們努力是爲了什麼?》中,北京高考狀元對於階層固化的言論。java
這些都讓我產生了深深的焦慮,碰巧這時在知乎看到一個熱議的遊戲,《房間內 100 我的,每人有 100 塊,每分鐘隨機給另外一我的 1 塊,最後這個房間內的財富分佈是怎樣的?》,來模擬社會財富分配。我以爲頗有意思,不妨就來玩一下。算法
我初始了100個遊戲玩家。從18歲開始,這100我的帶着本身的財富,開始各自的人生旅程。每一個人天天要隨機地找到另外一我的,給他一筆錢。到65歲退休時,看看你們的資產狀況。dom
爲了增長遊戲的可玩性,讓每一個觀衆都能在其中找到本身的位置,我設計了四種角色:ide
觀衆還本身能夠調整一些參數,以模擬他所認爲的這個世界。這些參數包括:性能
由於這個遊戲的結果最終是要經過對比的形式進行解讀,好比不一樣角色的玩家的財富值對比,某一特定角色的玩家在不一樣特定階層的佔比多少等等。而對人的視覺處理系統而言,更善於量化刻度上的位置差別,因此我選擇在座標軸上進行可視化。動畫
其中,玩家的年齡是時間維度,我用動畫的形式逐年遞增,來看另外兩個變量如何隨着年齡的增加而變化。設計
這裏有100個玩家,咱們要看每年不一樣玩家間財富的對比,因此我用條形圖來展現玩家的財富值。X軸是玩家的索引,Y軸是玩家的的財富值。
由於每一年都會計算出一個標準差,因此它是一個時序數據,我用折線圖,來查看它的走勢。X軸是時間,Y軸是玩家財富的標準差。
經過這個可視化,咱們簡單地模擬了在一個封閉環境中,人羣的財富分配。
這個封閉環境中有100個遊戲玩家,從18歲開始,每人帶着100塊錢,開始各自的人生旅程。每一個人天天要隨機地找到另外一我的,給他1塊錢,能夠理解爲天天的生活成本。
若是不容許負債,那麼玩家資產變爲0時,就不用給錢,可是能夠收錢,能夠理解爲社會基本保障吧。
到65歲退休時,看看你們的資產狀況。
遊戲一開始,我放了100個普通人。
咱們能夠看到,30歲以前,人與人之間的差距已經徹底拉開了。到65歲退休時,有一半的人資產縮水到100如下,有6我的的資產已經翻倍。最富有的人的資產接近初始值的4倍。
若是容許負債,會不會讓狀況變得更好呢?
咱們能夠看到,借債雖然能讓咱們在走投無路時多一些週轉餘地,但最終會讓窮人變得更窮。
若是加入富二代,狀況會是怎樣的呢?富人初始資產500,天天要支付的錢是普通人的2倍,可是得到收入的概率也是普通人的2倍。
咱們能夠看到,富二代的財富有一部分已經流動到了普通人那裏,可是大部分富二代依然位於財富排名前10%的位置。普通人要有極好的運氣,才能到達與富二代相同的高度。
若是咱們加入一些努力的普通人,會是怎樣的呢?經過本身的努力,這部分人得到收入的概率是是普通人的1.01倍。
咱們看到,努力的普通人僅僅是天天多付出一點點汗水,比普通人多了0.01的得到收入的概率,通過時間的發酵,有2我的已經躋身資產排名前10%的位置。另外3我的位於資產排名中上的位置。
富二代中,有1個敗家子已經破產,1個敗家子將要破產,5個敗家子成爲了普通人,只有3個守住了財富,依然位於富豪的行列。
有的同窗可能以爲不對,富二代中除了敗家子,還有努力的富二代。
努力的富二代,天天付出多一點的汗水,得到收入的概率是普通人的2.02倍。
咱們能夠看到,努力的富二代所有位於資產排名前10%的位置,其中3個不只守住了財富,並且創下新高。
其它的富二代中,有4個位於資產排名前20%的位置,只有1個掙扎在破產的邊緣。
努力的普通人依然混得還不錯,有1個躋身資產排名前5%,還有3個位於資產排名中上位置。
這個故事告訴咱們,這個世界雖然很殘酷,可是努力的人通常運氣還不錯。
從這個可視化中注意到的是,富二代基本上穩居上位的,不會掉下來,努力的富二代更是在最前端,從年齡上來看他們享受的是當下的。而普通人也有,也是能夠晉升爲頂級的人物,可是他們消耗的時間是很是長的,富二代已經享受完了人生,普通人才能晉升到頂級,這時看他們的年齡已經65歲,請問還能活多久呢?
在這個可視化中我看到的是一個輪迴,富二代已經享受完了人生,即便最後敗了,也是他的下一代敗了。普通人拼盡一輩子,即便拼到最頂層,也來不及享受,可是他的子孫會成爲富二代。
爲何最後資產最高的是個普通人?有點想不通?普通人爲何會成功?以爲數據有問題。
既然是隨機,爲何會造成這樣的差距呢?
我調整了上面「天天支付5塊」,可是主界面顯示好像仍是1塊。
觀察到的信息是:容許負債的狀況下,資產的標準差隨時間逐漸增大;若是不容許負債,貧富不均的狀況仍然會出現,但沒有那麼大,標準差會增長,但會趨向於平穩。天天支付的錢越多,標準差越大。
贊~ 界面炫酷
觀察到的結論:在默認參數下。隨着時間增加,每一個人的資產標準差在擴大。可是修改了天天的支付金額後,標準差的變化就一波動,並無明顯趨勢。
問題:我點擊更多參數,發現程序對人數百分比並無作檢驗,,而後就顯示不太正常了。還有一點是運行時間偏長,開頭有點長,我一會就不記得開始的字幕了。
不明白:雖然說標題是殘酷的世界,我覺得模擬出來的結果只有富二代等能夠生存,但最後顯示普通人和努力的普通人竟然資產挺高的。。。
厲害,膜拜。
我不明白的是四種身份的劃分,爲何每次都不同,是每次運行後都隨機按比例從新設定身份嗎? 或許是我不明白你的意圖,我以爲是否是這種身份固定下來比較好?
還一個小小的意見是,面向大衆的話,我想大部分人可能不明白標準差是什麼含義,作個註釋相似於貧富差距是否是更好。
再次膜拜,看了你的我有種絕望的感受。
由於每次運行都是實實在在地運行了一萬七千多輪 x 100我的,因此快慢跟設備性能也有關係,兩次運行的結果也應該不會相同。
是的,我會將 標準差 改爲 人跟人之間的財富差距。
是的,我會添加這個校驗。
通過確認發現,用戶是在播放開場字幕的時候調整的,發現字幕的內容沒有變化。
這是由於,參數控件是設計用來控制遊戲圖表的,對字幕沒有做用。
因此爲了不用戶的困惑,我決定在播放開場字幕的時候,先隱藏掉參數控件。
富人只是初始財富高,按照遊戲規則他們天天收入多,可是支出也一樣多。他們在遊戲的一開始會快速成長,並佔據優點。
可是由於遊戲充滿了隨機性,普通人在一系列好運的眷顧之下,後期也有逆襲的可能。
我從新看了知乎上的遊戲規則,發現個人規則和原遊戲規則有出入。原遊戲規則是,富人單筆支出多,單比收入和普通人同樣,可是得到收入的機率比普通人高。個人規則是富人單筆支出多,單比收入也多,可是得到收入的機率與普通人同樣。多是這個細微的差別,產生了不一樣的結果。
我將按照原遊戲的規則,使用帶權重的隨機算法。
每輪遊戲須要支付給另外一我的的錢數。數值顯示在Slider下面的文字描述中。
負資產滑塊開關開啓後,會出現負資產的現象,沒有問題。
[1].房間內有 100 人,每人有 100 塊,每分鐘隨機給另外一我的 1 塊,最後這個房間內的財富分佈怎樣?
[2].Weighted/Biased Random Number Generation with JavaScript based on Probability