- By
**mio** - Follow User

- 142 Views
- Uploaded on

Download Presentation
## Exploring evolutionary models with Lsd

**An Image/Link below is provided (as is) to download presentation**

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript

### 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!

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 dynamicsStart 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])

Download Presentation

Connecting to Server..