Each of the N individuals is haploid and carries one allele (0 or 1) at each of several unlinked loci. Every generation is a genuine Wright-Fisher resampling: for each locus, the current allele frequency p is counted from the real population, and every individual in the next generation independently draws that locus's allele from a Bernoulli(p) trial — exactly how a finite gene pool reproduces itself.
p(t) = (count of allele "1" at locus) / N(t)
new allele ~ Bernoulli(p(t)) (per locus, per individual, i.i.d.)
N(t+1) = N(t) + r·N(t)·(1 − N(t)/K) (logistic regrowth toward K)
H_e = 1 − p² − (1 − p)² (per-locus expected heterozygosity)
A bottleneck statistically resamples the whole population down to Nb founders using the same Bernoulli draws — it crashes numbers but keeps the frequency-based process. A founder split is a different, more literal event: Nb real individuals are drawn without replacement straight out of the current population and become the new colony, carrying only the genotypes chance happened to hand them. Either way, small Nb means whichever alleles the founders lack are usually gone for good — later regrowth restores numbers, not the missing alleles, so He stays low long after N returns to K.
- Carrying capacity K — the population size the habitat can support once fully regrown.
- Founder size Nb — how many individuals found the new population; smaller means faster diversity loss.
- Recovery growth rate r — how quickly the population regrows toward K after a crash.
- Loci tracked — how many independent biallelic loci are simulated in parallel, each with its own starting frequency and its own trajectory line.
Real-world relevance: cheetahs, northern elephant seals and Amish founder populations all show this exact signature — a historical population crash or founding event followed by low genetic diversity that persists for many generations afterward.