James P Houghton

# Chicken and Egg Problem

05 Sep 2012

The SD text has a toy model of chicken populations laying eggs and responding to the pressure of automobile predators:
The book asks what happens when each of the loops is dominant. Our hypothesis is that in the case where the Reinforcing loop is dominant, the number of chickens will grow exponentially. When the Balancing loop is dominant, the number of chickens will decline to either zero, or some small number, dependent on the dynamics of egg laying. We'll construct a model in Vensim to investigate the dynamics of each loop in isolation, and then combine the two to examine the joint behavior.

When we expand the Causal Loop Diagram into an actual stock and flow model, we see something like the following:
We really should model Chickens in two populations: non-laying (males and immature females) and laying, but for now we'll approximate the average laying rate as 1 egg for every 5 chicken*days, or .2 eggs/day/chicken. Assume for now that the gestation period is 2 weeks, and that 90% of eggs hatch successfully. The equations defining the behavior of the model are as follows:

Births = Hatching * Success Rate
Chickens = INTEG( Births , 100)
Eggs = INTEG( Laying - Hatching , 50)
Hatching = DELAY FIXED ( Laying ,Gestation Period , 20)
Laying = Lay Rate * Chickens

We set the initial conditions such that there are 100 chickens, 50 eggs, and 20 eggs hatch while we're waiting for the gestation delay to catch up. Running the loop, we see exactly the behavior we expect - exponential growth:
Now lets look at the balancing loop. The number of chickens which fall victim to automotive predators is dependent upon the chickens' propensity to cross roads, and the likelihood that any particular road crossing will prove fatal:
As before we'll take the initial stock of chickens to be 100, and assume (completely without justification) that chickens cross the road once every 5 days, or .2 crossings/day, and each crossing has a 20% chance of being a chicken's last. The equations which define the behavior of this loop are:

Chickens = INTEG( - Roadkilling , 100)
Crossings = Chickens * Crossing Rate
Roadkilling = Crossings * Hit Rate

In this case we see that the stock of chickens declines exponentially:
So what happens when we combine the two loops? Its actually a relatively simple join, as they only meet in one place: Chickens.
A hypothesis here is that the strength of the loops will be dependent on the 'Lay Rate' and the product of 'Crossing Rate' and 'Hit Rate'. The 'Gestation Period' may allow for some interesting periodic behavior. Using the initial conditions and parameter values that we defined for the individual loop cases, we get the following behavior:
Both Births and Roadkillings grow exponentially, but the birth loop dominates, and so the overall chicken population also grows exponentially. This growth isn't as fast as that of the reinforcing loop alone, and after 100 days, the population reaches about 1500, much less than 100,000+ of the reinforcing loop alone. The structural behavior of the overall system follows the dominant loop, but the subordinate loop has a large impact on the quantitative behavior.

What would happen if the Crossing Rate were to increase to the point where chickens crossed roads every day? In this case the balancing loop dominates, showing exponential decay:
The growth loop changes the character of the decay from smooth exponential to one with some hiccups - as we imagined might be the case - due probably to the delay in egg gestation. To test this theory, let's set that gestation delay to zero, and see if the hiccups go away:
Sure enough, it seems that the gestation delay is responsible for the irregularities of the exponential decay. Additionally, that delay seems to provide a buffer which slows the rate of population decline overall.

In a future post, it would be fun to map the space of parameters which leads to this behavior, and find the lines over which population was steady or oscillatory.

© 2016 James P. Houghton