ABM1<-function(N,E,runs){ plot(c(1,1,100,100),c(1,100,1,100),pch="",xlab="",ylab="",xaxt='n',yaxt='n') box() points(25,50,col='gray',pch=19) points(75,50,col='gold',pch=19) lines(c(50,50),c(-10,110)) population<-cbind(c(1:N),rnorm(N,0,1)) population[,2]<-ifelse(population[,2]>0,1,0) prop<-cbind(0,length(subset(population[,2],population[,2]==0)),length(subset(population[,2],population[,2]==1)),length(subset(population[,2],population[,2]==0))/N) for (i in 1:N) { if (population[i,2]==1) { #Actor is currently silver points(sample(1:47,1),sample(1:100,1), col='gray',pch=19) } else { #Actor is currently gold points(sample(53:100,1),sample(1:100,1), col='gold',pch=19) } #end of plot command text(5,5,length(subset(population[,2],population[,2]==1))) text(97,5,length(subset(population[,2],population[,2]==0))) } #perform action for each run for (r in 1:runs) { prob<-pt(rnorm(1,0,1),1000) curactorid<-sample(population[,1],1) curactorval<-population[curactorid,2] if (1-E>prob) { discrepancy<-(length(population[,2])/2)-length(subset(population[,2],population[,2]==1)) #a negative discrepancy indicates silver as popular positive means gold if (discrepancy!=0) { if (population[curactorid,2]==1) { #Actor is currently silver if (discrepancy>0) { population[curactorid,2]=0 } } else { #Actor is currently gold if (discrepancy<0) { population[curactorid,2]=1 } } } } #Rule 2 prob<-pt(rnorm(1,0,1),1000) if (E<=prob) { if (rnorm(1,0,1)>0) { population[curactorid,2]=ifelse(curactorval==1,0,1) } } #plot new layout plot(c(1,1,100,100),c(1,100,1,100),pch="",xlab="",ylab="",xaxt='n',yaxt='n,main=r') box() #points(25,50,col='gray',pch=19) #points(75,50,col='gold',pch=19) lines(c(50,50),c(-10,110)) for (i in 1:N) { if (population[i,2]==1) { #Actor is currently silver points(sample(1:47,1),sample(1:100,1), col='gray',pch=19) } else { #Actor is currently gold points(sample(53:100,1),sample(1:100,1), col='gold',pch=19) } #end of plot command text(5,5,length(subset(population[,2],population[,2]==1))) text(97,5,length(subset(population[,2],population[,2]==0))) } prop<-rbind(prop,c(r,length(subset(population[,2],population[,2]==0)),length(subset(population[,2],population[,2]==1)),length(subset(population[,2],population[,2]==0))/N)) #end of run } return(prop) }