4/25のセミナーの続き。
ここのスクリプトを流用してみる。
今回は二者間だけでなく、三者以上での資産の取引を加えた。
人を人で構成される小グループに分ける。
人の中で、損する人がまず決まる(資産の移動方向の決定)。
そのうえで、どれだけ資産が移動するかランダムに決定する(移動量の決定)。
1回の取引で、資産を得ることも与えることもなんやかんやあるだろうが、取引開始と終了時の差分だけを考えると、セミナーのモデルになる、と思う。
ということで、は、1がフリーマーケット、2が詐欺師、3が離婚、とする。
人を人で構成されるいくつかの集団に分けたら、人揃わない集団が多くて1つ出ることがある。このとき、この人たちは取引を行わないことにする。
trademodel<- function(N,M,team,cycles,model){ library(MCMCpack) money<- rep(M,N) group<- N%/%team Mmove<- matrix(0,cycles+1,N) Mmove[1,]<- money for(cy in 1:cycles){ tradepairs<- sample(N) tradegroup<- array(tradepairs,c(1,team,group)) for(tg in 1:group){ loser <- sample(1:team,size=sample(1:(team-1),size=1)) winner<- (1:team)[-loser] if(model==1) # flea market losemoney<- runif(length(loser))*min(money[tradegroup[,,tg]]) money[tradegroup[,loser,tg]]<- money[tradegroup[,loser,tg]]-losemoney money[tradegroup[,winner,tg]]<- money[tradegroup[,winner,tg]]+rdirichlet(1,rep(1,length(winner)))*sum(losemoney) }else if(model==2){ # theif losemoney<- runif(length(loser))*money[tradegroup[,loser,tg]] money[tradegroup[,loser,tg]]<- money[tradegroup[,loser,tg]]-losemoney money[tradegroup[,winner,tg]]<- money[tradegroup[,winner,tg]]+rdirichlet(1,rep(1,length(winner)))*sum(losemoney) }else{ # divorce losemoney<- runif(length(loser))*money[tradegroup[,loser,tg]] money[tradegroup[,loser,tg]]<- money[tradegroup[,loser,tg]]-losemoney if(length(winner)>1){ money[tradegroup[,winner,tg]]<- money[tradegroup[,winner,tg]]+rdirichlet(1,rep(1,length(winner)))*sum(losemoney) }else{ money[tradegroup[,winner,tg]]<- money[tradegroup[,winner,tg]]+sum(losemoney) } } } Mmove[cy+1,]<- money } return(Mmove) }
# 取引するグループを2〜10人にしてみる。 ylim<- c(0,N*M) N<- 100 M<- 100 team<- 1 model<- 1 cycles<- 1000*5 Res<- lapply(mapply(rep,0,1:9),unique) for(i in 1:9){ Res[[i]]<- trademodel(N,M,i+1,cycles,1) }
# 個人が持つ資産の時間変化をプロット。 par(mfrow=c(3,3)) for(pl in 1:9){ matplot(Res[[pl]],type="l",pch=1,col=rainbow(N),ylim=ylim,frame=FALSE, xlab="trade cycle",ylab="property", main=paste("money trade" ,pl+1,"people")) }
# 資産の分布をプロット。 par(mfrow=c(3,3)) for(pl in 1:9){ hist(Res[[pl]][cycles+1,],breaks=N,col=5,ylim=c(0,100), xlab="money",ylab="frequency", main=paste("money trade" ,pl+1,"people")) }
二者間取引だと、最終的にある一人に総資産が吸い上げられるが、三者以上にすると資産独占にはならないが、資産を多くもつ数人が生まれる。
寡占だと思う。
詐欺師や離婚モデルと違って、資産順位の変化は乏しい(プロットのほとんどが平行線)。
寡占の人たちが同じ取引の場に登場する機会はランダムなので、寡占がさらに進めば資産の移動がさらに稀になる。
取引の回数を増やせば、独占に近付きそう。