320 likes | 514 Views
Exploring evolutionary models with Lsd. PhD Eurolab on Simulation of Economic Evolution (SIME) University of Strasbourg, April 2004 Revised: 8 April 2004 Esben Sloth Andersen DRUID and IKE, Aalborg University, Denmark. KISS and TAMAS: Conflicting principles?. KISS = Keep It Simple, Stupid!
E N D
Exploring evolutionary models with Lsd PhD Eurolab on Simulation of Economic Evolution (SIME) University of Strasbourg, April 2004 Revised: 8 April 2004 Esben Sloth Andersen DRUID and IKE, Aalborg University, Denmark
KISS and TAMAS: Conflicting principles? • KISS = Keep It Simple, Stupid! • A slogan from the US army during World War II • Generally acknowledged by scientific modellers • TAMAS = Take A Model, Add Something! • Variant for Lsd modellers: TAMAM = Take A Model, Add Marco! • Principle for cumulative modelling • KISS = TAMAS? • Not when the initial model is complex and ill structured! • In this case we need a new principle! • TAMAKISS = Take A Model And Keep It Simpler, Stupid!
TAMAKISS with a Nelson-Winter model Capital accumulation Numi Technical change fi Short-run process
Simplifying the Nelson-Winter model:Short-term and capital accumulation • Reuse our model of replicator dynamics! • Replicator equation • N[t]=N[t-1](1+a(f-af)/af);
EQUATION("Num") /* Replicator dynamics:N[t]=N[t-1](1+a(f-af)/af) */ v[0]=VL("Num",1); v[1]=V("a"); v[2]=V("f"); v[3]=V("af"); v[4]=v[0]*(1+v[1]*(v[2]-v[3])/v[3]); RESULT(v[4]) EQUATION("af") /* Average fitness */ v[0]=0; v[1]=0; CYCLE(cur, "Species") {v[0]+=VLS(cur,"Num",1); v[1]+=VLS(cur,"Num",1)*VS(cur,"f");} RESULT(v[1]/v[0]) //EQUATION("f") /* Unchanged fitness of Species. This version was replaced by the next equation */ //RESULT( VL("f",1) ) EQUATION("f") /* Fitness of Species changed through random walk */ RESULT( VL("f",1)+UNIFORM(-.2,.2) ) Lsd code for replicator dynamics
Start by copying the model • Find your original modelin Browse Model window • Edit/Copy • Edit/Paste • Write RepDyn2004 inmodel name • Write rd2004 in dir name • OK • Write a description • Save description • Goto model equations
Introducing a control variable for change of fitnesses • Case 1: Fixed fitnesses (productivities) • f[t] = f[t-1]; • Case 2: Random walk of fitnesses • f[t] = f[t-1] + UNIFORM(-.2,.2); • Allowing for both cases • if RandWalk==0 then f[t] = f[t-1]; • if RandWalk==1 then f[t] = f[t-1] + UNIFORM(-.2,.2);
Specifying the regimes • RandWalk – Change of fitnesses? 0: no change 1: random walk 2: define your own regime • Later we add… • Fissions – Change in number of firms? 0: no change 1: fission of large species 2: define your own change rule
Rewrite equation for fitness (f) • EQUATION("f") • /* • Calculation of fitness • If RandWalk = 0, then fixed fitnesses • If RandWalk = 1, then random walk of fitnesses • */ • v[0]=V("RandWalk"); • if (v[0]==0) v[1]=VL("f",1); • if (v[0]==1) v[1]=VL("f",1)+UNIFORM(-.2,.2); • RESULT(v[1])
Start model, load config and add parameter • Load Sim1.lsd configuration file • Goto Population and add parameter RandWalk • Initialise RandWalk to 0 • Goto Species, Initial values, Set all to 10 incr. by -.5 • Run the model, then reload the config • Set RandWalk = 1 and rerun model. Then kill it!
Add simple statistics • Size of total population • TotNum = Sum(Num) • Population shares of species • s = Num/TotNum • Inverse Herfindahl index • Standard concentration indicator in industrial economics • InvHerf = 1/Sum(s^2) • Between 1 and the number of species
Implement simple statistics • EQUATION("TotNum") • /* Total number of members of the population */ • v[0]=0; • CYCLE(cur, "Species") • {v[0]+=VLS(cur,"Num",1);} • RESULT(v[0]) • EQUATION("s") • /* Population share */ • v[0]=V("Num"); • v[1]=V("TotNum"); • RESULT(v[0]/v[1])
Change model structure • Add TotNum to Population (with save) • Add s with time lag = 1 to species (with save) • Initialise s for all species to 0.1 • Reset RandWalk = 0 • Run the model and check that it works correctly! • Check what happens to s when RandWalk = 1
Add concentration index • EQUATION("InvHerf") • /* Inverse Herfindahl index = 1/SUM(s^2) */ • v[0]=0; • CYCLE(cur,"Species") • { • v[1]=VS(cur,"s"); • v[0]=v[0]+v[1]*v[1]; • } • RESULT(1/v[0]) • … Change model structure and check concentration • dynamics. Then kill the model
The logic of fissions of species • Large species encounter varied pressures • They tend to split into different species • Large firms have conflicts and split • I model fissions as a fixed propensity to split • If population share is above 25% • Then the species will on average split once every 40 periods • Modelled as a Poisson process • Result of fission: Concentration is kept lower
Introduce fissions of species • EQUATION("Fission") • /* Fissions of species take on average place once every 40 periods • if its population share is larger than 25%. */ • V("Repro"); // Ensure that reproduction coefficient is calculated • v[0] = V("s"); • v[1] = V("Num"); • v[2] = V("Fissions"); • v[3] = RND-0.5; • if (v[0]>0.25 && v[2]==1 && poisson(0.05*v[3])>0) • {cur=p->up; • cur=ADDOBJS_EX(cur,"Species",p); • WRITELS(cur,"Num",0.4*v[1],t); • WRITELS(cur,"s",0.4*v[0],t); • WRITELS(p,"Num",0.6*v[1],t); • WRITELS(p,"s",0.6*v[0],t);} • RESULT(v[2])
Change the model structure and check • Add parameter Fissions to Population • Initialise Fission = 0 and RandWalk = 0 • Add variable Fission to Species • Run the model and check that nothing has changed • Change Fission = 1, and study the results • Why is there no fissions at the end of the simulation? • Change Fission = 1 and RandWalk = 1 • Study the results? What happens? • Kill the model before proceeding
Defining and calculating statistics • Population information for two points of time • Initial population share of each species • Reproduction coefficient of each species • “Fitness” of each species and its change • Simple statistics • Meanreproduction coefficient • Changein mean fitness • Variance of fitnesses • Covariance of reproduction coefficients and fitnesses • Regression of reproduction coefficients on fitnesses
Price’s partitioning of evolutionary change • Total evolutionary change Selection effect + Innovation effect
The meaning of Price’s equation • The innovation effect is the creative part • It takes place within the units, e.g. the firms • It may be due to innovation, imitation, learning, … • It may also be due to intra-firm selection, e.g. of plants • The selection effect means that some entities are promoted while other entities shrink • It represents Schumpeter’s “creative destruction” • Firms may try to avoid selection by imitation and learning • The selection pressure sets the agenda for firms • The Price equation ignoresecological effects • Thus it is a form of short-term evolutionary analysis • But short-term evolution is the starting point!
Price’s statistics – reproduction coefficients • EQUATION("Repro") • /* Repro = Num[t]/Num[t-1]The reproduction coefficient of the species */ • RESULT(V("Num")/VL("Num",1)) • EQUATION("ReproMean") • /* Weighted mean of the species' reproduction coefficients */ • v[0]=0; • CYCLE(cur,"Species") • {v[1] = VLS(cur,"s",1); • v[2] = VS(cur,"Repro"); • v[0] = v[0]+v[1]*v[2];} • RESULT(v[0])
Price’s statistics – selection as covariance • EQUATION("Covar") • /* Cov(Repro,A) = SUM[ s[t-1]*(Repro[t-1]-ReproMean[t-1])*(f[t-1]-af[t-1])) ]Covariance between species' reproduction coefficients and fitnesses */ • v[0]=0; • v[3] = V("ReproMean"); • v[5] = V("af"); • CYCLE(cur, "Species") • {v[1] = VLS(cur,"s",1); • v[2] = VS(cur,"Repro"); • v[4] = VLS(cur,"f",1); • v[0] = v[0] + v[1]*(v[2]-v[3])*(v[4]-v[5]);} • RESULT(v[0])
Price’s statistics – the innovation effect • EQUATION("InnoEffect") • /* E(s[t]*(f[t]-f[t-1])) / ReproMean • The innovation effect as defined by George Price's equation. */ • v[0]=0; • v[10] = V("ReproMean"); • CYCLE(cur, "Species") • { • v[1] = VS(cur,"s"); • v[2] = VS(cur,"f"); • v[3] = VLS(cur,"f",1); • v[0] = v[0] + v[1]*(v[2]-v[3]); • } • RESULT(v[0]/v[10])