Project Concept
The project mimics population dynamics in different parts of the world by incorporating fertility rates and death rates, allowing each region to grow, shrink, or stabilize based on these parameters. Over time, population levels converge towards a 2.1 replacement rate (the level needed to maintain a stable population). This concept is inspired by real-world demographic transitions, where regions move from rapid population growth to stabilization.
- Regions as Grid: A grid of circles represents different global regions. Each circle’s size correlates to the population size, while fertility and death rates drive the growth or shrinkage.
- Fertility Rate: Controls how quickly a region’s population expands.
- Death Rate: Controls how quickly populations decline.
- Replacement Rate: Populations converge towards a stable size (replacement rate of 2.1 children per woman), creating patterns of population stability.
Modes of the System
- Growth Mode: Populations grow or shrink based on predefined fertility and death rates.
- Random Mode: Random fluctuations in fertility and death rates simulate unpredictable factors like pandemics or booms.
- Stability Mode: Regions converge towards the replacement rate, stabilizing population growth.
Design Approach
- Grid Layout: A grid layout represents various regions, and each circle symbolizes a region’s population.
- Fertility and Death Rates: Each region has different fertility and death rates, randomly assigned initially. These rates determine whether a population grows or declines.
- Replacement Rate: In Stability Mode, all populations will stabilize around a fertility rate of 2.1.
- Modes: The user can toggle between modes using the keyboard.
- Visualization: Circle size visualizes population changes, expanding during growth and shrinking during decline.
Most Complex Part
Handling the stabilization towards the 2.1 replacement rate is the most uncertain part. Populations should gradually approach equilibrium without abrupt changes. I’ll mitigate this risk by implementing gradual transitions in the stabilization mode, where the fertility and death rates are slowly adjusted.
Initial Code and Progress (Growth Logic)
At this phase, I implemented the basic grid and growth logic, focusing on population growth and shrinkage. I designed classes and functions that would later incorporate fertility and death rates.
class Region {
constructor(x, y, population, fertilityRate, deathRate) {
this.x = x;
this.y = y;
this.population = population;
this.fertilityRate = fertilityRate;
this.deathRate = deathRate;
}
grow() {
let growthFactor = this.fertilityRate - this.deathRate;
this.population += growthFactor;
this.population = constrain(this.population, 10, 300);
}
display() {
fill(100, 150, 200);
ellipse(this.x, this.y, this.population);
}
randomizeRates() {
this.fertilityRate = random(1.5, 5); // Random fertility rate
this.deathRate = random(0.5, 3); // Random death rate
}
stabilize() {
this.fertilityRate = lerp(this.fertilityRate, 2.1, 0.05); // Gradual shift towards replacement rate
this.deathRate = lerp(this.deathRate, 1.9, 0.05); // Shift death rate to balance fertility
}
}