# 生成100个个体,赋予初始财富 idset=[] for i inrange(30): idv={'number':i+1,'class':1,'wealth':100} idset.append(idv) for i inrange(70): idv={'number':i+31,'class':0,'wealth':100} idset.append(idv) iddf=pd.DataFrame(idset)
# 下层的通道 defflselect(pp=0.5): res=0 cdt=random.random() if cdt<pp: res=1 return res
# 选择环节 defcoreselect(ps=0.4): res=0 cdt=random.random() if cdt<ps: res=1 return res
pof1=[2,0.2,0.2,0.2] pof2=[1.2,0.8,0.8,0.8]
# 每期生成结果函数 defOneperiod(diclist=idset,pof=pof1): Op=[] for i inrange(30): hp=coreselect() w=diclist[i]['wealth'] w=w*pof[hp] Op.append(w) for i inrange(70): w=diclist[i+30]['wealth'] sw=flselect() if sw==1: hp=coreselect() w=w*pof[hp] else: w=w*pof1[2] Op.append(w) return Op
# 模拟多期 df=idset resset=pd.DataFrame(df) for j inrange(30): rightnow=Oneperiod(df) # 低不确定性假设下: # rightnow=Oneperiod(df,pof2) for i inrange(100): df[i]['wealth']=rightnow[i] vname='wealth'+str(j+1) rnset=pd.DataFrame(df) resset[vname]=rnset['wealth']
sortres=resset.sort_values('wealth30')
nx=30-sum(sortres['class'][70:]) nxl=[] bnxl=[] for i inrange(30): vname='wealth'+str(i+1) sortres=resset.sort_values(vname) nx=30-sum(sortres['class'][70:]) bnx=5-sum(sortres['class'][95:]) nxl.append(nx) bnxl.append(bnx)