下午不务正业,做了一个小实验,场景是这样的:看到在一个微信群中,一群人乐此不疲的抢着红包,并玩着手气最好再次发红包的游戏。于是萌生出一个念头,如果假设所有人的钱都是一样多,然后按照这种发红包的方式将资金转移出去,经过多次转移,最后会出现什么现象??为了让这个问题变得更简单,我将场景稍微调整了一下,改为假设有100个人,所有人最初都拥有1元钱,每次每个人都随机的转移一定的资金出去给另一个人,看看最后会出现什么结果。基本代码如下:
import numpy as np
list1=[]
#初始时每个账户都有1块钱
for i in range(100):
list1.append(1)
#轮转开始,对于每个账户,可以任选1个账户,并从自己的资金中分配一个随机数额给他
for t in range(1000):#轮转1000次
for i in range(100):
#对于账户i,首先挑选1个账户m
m=np.random.randint(100)
#将自己账户中的一部分资金分配给m账户
k=np.random.random()
p=list1[i]
list1[i]=p*(1-k)
list1[m]=list1[m]+p*k
s=0
#统计最后账户中还有1元以上资金的人数
for i in range(100):
if list1[i]>=1:
s+=1
s
经过1000轮次转移最后的结果发现,账户中拥有1元钱以上的用户还有30多个,但大部分的人的账户中的钱均小于1元,是不是有点类似于社会中的资产转移的趋势?最后大部分的资产总是会落在少数人的手中。
但这里有30多个人还能拥有超出自己资产的部分,人数有点偏多,于是想看看到底如何才能让这个人数下降。
首先,先改动了转移资产的比例,要求每个人转移的时候,必须将手中超过50%的部分转移出去。
import numpy as np
list1=[]
#初始时每个账户都有1块钱
for i in range(100):
list1.append(1)
#轮转开始,对于每个账户,可以任选1个账户,并从自己的资金中分配一个随机数额给他
for t in range(1000):
for i in range(100):
#对于账户i,首先挑选1个账户m
m=np.random.randint(100)
#将自己账户中的一部分资金分配给m账户
k=np.random.random()
if k<0.5:#转移资产比例超过50%
k=1-k
p=list1[i]
list1[i]=p*(1-k)
list1[m]=list1[m]+p*k
s=0
for i in range(100):
if list1[i]>=1:
s+=1
s
多次实验发现,1000轮次转移后,拥有超过1元以上资产的人数依旧是30多个(有时可能稍微少点,但不影响大概的结果),貌似改变这个比例并不能影响最后的结果(其他情况没有测算,感兴趣可以自己调整,比如调整到90%)。那究竟是什么会影响人数呢?想到在社会中拥有更多资产的人更容易获得更多资产,而拥有较少资产的人获得的资产则较少,相对的结果就是资产是从拥有得更少的人手里转移到更多的人手里,因此再次修改代码:
import numpy as np
list1=[]
#初始时每个账户都有1块钱
for i in range(100):
list1.append(1)
#轮转开始,对于每个账户,可以任选1个账户,并从自己的资金中分配一个随机数额给他
for t in range(1000):
for i in range(100):
#对于账户i,首先挑选1个账户m
m=np.random.randint(100)
#将自己账户中的一部分资金分配给m账户
k=np.random.random()
#if k<0.5:
#k=1-k
p=list1[i]
#资产总是从少数者手里转移到多数者手里
if list1[i]<list1[m]:
list1[i]=p*(1-k)
list1[m]=list1[m]+p*k
else:
q=list1[m]
list1[m]=q*(1-k)
list1[i]=list1[i]+q*k
s=0
for i in range(100):
if list1[i]>=1:
s+=1
s
结果就很有意思了,最后拥有1元以上资产的人就只有1个,而且资产是99元以上,其他人的资产都小于1元,资产集中率惊人啊!!并且是否调整了转移资产比例也不影响最终的结果。
由此可以推测,造成资产转移集中的最大因素就是资产多的人能强制占有资产少的人的资产,因此联系到社会实际中的问题就是,怎样才能让整个社会中的资产分布更为均匀??答案大家自己去琢磨吧。