“帕累托定律”(Pareto law),即只有很少一部分人能获得最多的资本,并且发现最成功的人其天赋中庸,但他们却非常幸运。而这样的结果也与现实世界惊人的相似。对该定律做了一个小实验,进行了复现。在本文设计的模型中,假设共有1000个个体,他们的天赋服从均值为0.6、方差为0.1的正态分布,并且为每个个体赋予了10的初始资本。将这1000个体随机的分布在一个正方形区域内,他们被一些事件所包围。这些事件分为幸运事件和不幸事件,在初始时,它们被随机地分配到正方形区域内。本实验对这1000个个体进行40年的模拟,每六个月,这些事件将进行一次移动,并且与个体发生交互。当这些事件与个体相遇时,个体的资本便产生相应的变化。其变化规则为:若是个体与幸运事件相遇,则产生一个(0,1)的随机数,若这个随机数小于该个体的天赋则将个体的资本翻一倍,否则资本保持不变;若是遇到不幸事件,则将该个体的资本减半。
C语言源程序如下:
- ub=1;lb=-1;i=1000;
- hold on
- for i=1:1000
- x=randn(1);y=randn(1);
- while x>ub || x<lb || y>ub || y<lb
- x=randn(1);y=randn(1);
- end
- pos(i,:)=[x y];
- end
- title('随机人员图');
- figure(1);
- plot(pos(:,1),pos(:,2),'o');
- ub=1;lb=-1;i=250;
- hold on
- for i=1:250
- a=randn(1);b=randn(1);c=rand
- while a>ub || a<lb || b>ub || b<lb
- a=randn(1);b=randn(1);
- end
- pos1(i,:)=[a b];
- end
- plot(pos1(:,1),pos1(:,2),'*r')
- ub=1;lb=-1;i=250;
- hold on
- for i=1:250
- a=randn(1);b=randn(1);c=rand
- while a>ub || a<lb || b>ub || b<lb
- a=randn(1);b=randn(1);
- end
- pos2(i,:)=[a b];
- end
- plot(pos2(:,1),pos2(:,2),'*g')
- legend('人员','幸运事件','不幸事件');
- for i=1:1:1000
- GN(i,1)=0;
- BN(i,1)=0;
- end
- T=normrnd(0.6,0.1,1000);
- for i=1:1:1000
- w(i,1)=10;
- end
- for i=1:1:80
- for j=1:1:1000
- for k=1:1:250
- if sqrt((pos(j,1)-pos1(k,1))*(pos(j,1)-pos1(k,1))+(pos(j,2)-pos1(k,2))*(pos(j,2)-pos1(k,2)))<1/201
- if rand(1)<T(j,1)
- w(j,1)=2*w(j,1);
- GN(j,1)=GN(j,1)+1;
- end
- end
- end
- for k=1:1:250
- if sqrt((pos(j,1)-pos2(k,1))*(pos(j,1)-pos2(k,1))+(pos(j,2)-pos2(k,2))*(pos(j,2)-pos2(k,2)))<1/201
- w(j,1)=0.5*w(j,1);
- BN(j,1)=BN(j,1)+1;
- end
- end
- end
- for m=1:1:250
- [pos1(m,1),pos1(m,2)]=move(pos1(m,1),pos1(m,2));
- end
- for m=1:1:250
- [pos2(m,1),pos2(m,2)]=move(pos2(m,1),pos2(m,2));
- end
- end
- figure(2);
- i=1:1:1000
- plot(i,w(i,1),'b')
- title('财富分布图');
- xlabel('人员');
- ylabel('财富');
- figure(3);
- q=1:1:1000
- plot(q,T(q,1),'b')
- title('天赋分布图');
- xlabel('人员');
- ylabel('天赋');
- [b,in]=sort(w);
- Totalw=sum(w);
- Partw=sum(b(801:1000,:),1);
- P=Partw/Totalw;
- disp('******');
- disp(P);
- disp('******');
- disp(w(in(1000),1)),disp(T(in(1000),1)),disp(GN(in(1000),1)),disp(BN(in(1000),1));disp('******');
- disp(w(in(999),1));disp(T(in(999),1));disp(GN(in(999),1));disp(BN(in(999),1));disp('******');
- disp(w(in(998),1));disp(T(in(998),1));disp(GN(in(998),1));disp(BN(in(998),1));disp('******');
- disp(w(in(997),1));disp(T(in(997),1));disp(GN(in(997),1));disp(BN(in(997),1));disp('******');
- disp(w(in(996),1));disp(T(in(996),1));disp(GN(in(996),1));disp(BN(in(996),1));
- function [X,Y]=move(x,y)
- r=1.5/201;
- theta=randn(1)*pi;
- while theta>pi || theta<-pi
- theta=randn(1)*pi;
- end
- X=x+r*cos(theta);
- if X>1
- X=x-r*cos(theta);
- end
- if X<-1
- X=-r*cos(theta)-x;
- end
- Y=y+r*sin(theta);
- if Y>1
- Y=y-r*sin(theta);
- end
- if Y<-1
- Y=-r*cos(theta)-y;
- end
- end
复制代码
全部资料51hei下载地址:
帕累托定律.zip
(1.3 KB, 下载次数: 5)
|