可视化做品连接地址: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