################################################################################## # An R script to run an Agent Based Model that simulates cells trying to # convince their neighbouring cells to grow hair. # # Author: Sherry Towers # admin@sherrytowers.com # # Created: Dec 11th, 2013 # Copyright Sherry Towers, 2013, 2014 # # This script is not guaranteed to be free of bugs and/or errors. # # This script can be freely used and shared as long as the author and # copyright information in this header remain intact. ################################################################################## set.seed(753158) ################################################################################## # set up the parameters of our simulation ################################################################################## nxgrid = 50 # the number of rows and columns in the grid time_begin = 0 # begin time time_end = 100000 # end time p = 0.5 # prob saying no ################################################################################## # if state is 0 then there is noone in that grid space. If 2 then there is someone # in that grid space. ################################################################################## wstate = matrix(0,nrow=(nxgrid),ncol=(nxgrid)) wx = matrix(rep(seq(1,nxgrid),nxgrid),nrow=nxgrid,ncol=nxgrid) wy = matrix(rep(seq(1,nxgrid),nxgrid),nrow=nxgrid,ncol=nxgrid,byrow=T) n = nxgrid^2 aind = as.integer(n/2) wstate[as.integer(nxgrid/2),as.integer(nxgrid/2)] = 2 for (itime in time_begin:time_end){ kwhich = which(wstate==2) kind = kwhich[sample(length(kwhich),1)] iind = kind%%nxgrid if (iind==0) iind = nxgrid jind = (kind-iind)/nxgrid+1 iind_min = iind-1 iind_max = iind+1 jind_min = jind-1 jind_max = jind+1 if (iind_min<1) iind_min = 1 if (iind_max>nxgrid) iind_max = nxgrid if (jind_min<1) jind_min = 1 if (jind_max>nxgrid) jind_max = nxgrid viind = numeric(0) vjind = numeric(0) if (iind_min>0&wstate[iind_min,jind]==0){ viind=append(viind,iind_min) vjind=append(vjind,jind) } if (iind_min>0&jind_min>0&wstate[iind_min,jind_min]==0){ viind=append(viind,iind_min) vjind=append(vjind,jind_min) } if (iind_min>0&jind_max0&wstate[iind_max,jind_min]==0){ viind=append(viind,iind_max) vjind=append(vjind,jind_min) } if (iind_max0&wstate[iind,jind_min]==0){ viind=append(viind,iind) vjind=append(vjind,jind_min) } if (jind_max0){ for (k in 1:length(viind)){ prob = runif(1,0,1) if (prob