Browse Search Feedback Other Links Home Home
The Talk.Origins Archive
 

Repopulation After the Flood

Post of the Month: May 2004

by

Subject:    a little program I wrote for playing around with repopulation after the flood
Date:       12 May 2004
Message-ID: had4a0t2v6h2fq1o4dglraet2q0m0003d1@4ax.com

I initially posted this message deep in a thread in an attempt to get some insight from Pastor Dave. I have decided to post it in a slightly more visible place in case any creationists wish to comment on it....

The initial germ of the idea to do this at all came from a phone conversation I had with a JW elder where he suggested that instead of trying to disprove the Bible, that I attempt instead to prove it to myself. I know this is a long post already but I've lengthened it by including the Java source for my Person and Civilization classes. This is a supremely simplistic program and I'm sure lots of you will have improvements/corrections/etc to offer. Just keep in mind that I wrote it in about an hour just for fun.

*** begin repost ***

I really with to know exactly how you resolve the question of how the earth managed to get repopulated quickly enough to allow the rise of Egyptian, Mesopotamian and Chinese culture in the years immediately following the Flood.

Now, the way it's been explained to me is that all human civilization arose post-Flood. Using ages and dates in the Bible it's possible to determine the exact year (starting from the creation of Adam at 4026 BCE):

From Adam's creation to the birth of Seth   130 years
Then to the birth of Enosh                  105 years
To the birth of Kenan                        90 years
To the birth of Mahalalel                    70 years
To the birth of Jared                        65 years
To the birth of Enoch                       162 years
To the birth of Methuselah                   65 years
To the birth of Lamech                      187 years
To the birth of Noah                        182 years
To the Flood                                600 years

Thanks to Bible geneology and chronology, the flood can be pinned to 2370 BCE, roughly 4,400 years ago as you said.

Anyhow, the progenitors of the modern human race were Ham, Shem and Japheth, Noah's three sons and their wives. They were fruitful and multiplied after the flood down to around the time of Peleg when the Tower of Babel was built. The building of the tower lead to the dispersion of various ethnic and language groups to all corners of the Earth and the rest, as they say, is history.

It's impossible to work out from the Bible the exact time of the Tower of Babel, but it's estimated to be somewhere in the neighborhood of 180 years after the flood based on when Peleg lived.

Now, the earliest known Egyptian pyramid (the Step Pyramid) has been dated to about 300 years prior to this date, the slightly later Red Pyramid, Bent Pyramid and (of course) the Giza Pyramids and the Sphinx are all generally dated as occuring before the Biblical flood date as well. Of course, these datings must be off by somewhere in the neighborhood of 500 years or so in order for their construction to have occured post-Tower of Babel. So, presuming thats the case the next question is how many people needed to be alive in Egypt at the time of the pyramids construction in order to facilitate said construction? It's really impossible to tell for certain, but the generally accepted estimate is around 1-2 million people living in Egypt at the time and a pyramid building workforce around 20,000 people.

It's not only Egypt that needs to be accounted for, of course. The entire fertile crescent region, Sumeria, Accadia, Babylon itself, that entire region was likewise populated shortly after the flood and a lot of cities were built indicating minimally hundreds of thousands, likely millions more people.

In China, by around 2100 BCE (admittedly nearly 300 years after the flood) the earliest recorded records of a Xia dynasty are known to exist. So, presumably the China-bound descendants of the flood survivors, when scattered at Babel, took a while to migrate over there and then developed their culture. There were, apparently, tens or possibly hundreds of thousands of people in China at this time as well.

So, in an effort to determine if I could stick the to realities of human biology and postulate a repopulation scenario, I wrote a computer program today (I'm a programmer). I made many unreasonable assumptions by modern standards but I assumed that God would be using miraculous abilities to accelerate and support the repopulation effort. My program takes various parameters but it starts with the initial condition that 6 breeding pairs of humans (the Bible doesn't indicate that Noah and his wife had more children than the three) began to procreate at the fastest rate they could. The reproduction was divinely supported to be as effective as possible. Here are the groundrules, as optimistic as I could imagine them being:

My goal in this simulation was to see what would happen if childbearing rates were accelerated enough to account for the populations necessary for the Egyptian, Mesopotamian and Chinese cultures.

I've run this program a bunch of times and I know that it is relatively flawed, but wherever possible I have tried to err towards miraculous reproduction rates, not to simulate known population growth rates. After 180 years from the Flood, at approximately the time period of the Tower of Babel, the population of the Earth the app comes up with numbers in the following ballpark (these are from a specific run, random factors lead to slightly different numbers with each run through):

- Population of the Earth: 61,162

Hey, not bad, I thought when I ran it the first time. A decent seed population for Babel, and only about 500 years after the claimed Egyptian dates... Then, I decided to break it down and I found something fascinating... They're almost all children under the age of 12:

Also, at the time I stopped my simulation at 180 years, there were 6,694 women over the age of 13 of whom 5,291 were currently pregnant. The rest were adult men.

So, there are some major problems at this point. First, we're running out of time because the dates of the Pyramids are getting farther in the past and that gap can only get so big and maintain any believability. Second, a world made up of only about 7,000 "adult" males, 5,300 pregnant women and 48,000 kids is not one in which the population would spread out, build massive cities and monuments, develop writing and all that because they'd be spending all their time raising children and finally, we're a few million people short. The bodies simply aren't there. You could keep this up for a few hundred more years (and after I optimize the code a little I intend to try) but I don't see how it's possible to keep up the required population growth rates and still alleviate the problem of having too many kids to adults, especially seeing as those adults are made up of a lot of teenagers. Humans only grow so fast. Were the Egyptian, Mesopotamian and Chinese civilations founded by hundreds of thousands of little kids? Did human gestation speed up to be fewer than 40 weeks? How do you resolve this apparent impossibility. I seriously wish to know...

BTW, the little program I wrote ain't much but I'll post the source code here for anybody who wants to play with it if you like. I just tossed it together over lunch and it needs a lot of work to be really useful.

lodger

***  begin source code ***

// Person.java

package floodworld;

import java.util.Random;
import java.util.Vector;

public class Person {

	private Random randomNumberGenerator = new Random();
	private boolean isFemale;
	private boolean isPregnant = false;
	private int currentAge = 0;
	private int weeksOfCurrentYear = 0;
	private int weeksOfGestation = 0;
	private int menstrualCycleWeek = 0;
	private int ageOfDeath = -1;
	private int weeksSinceGivingBirth = 6;
	
	public Person () {
		// 70% chance of being female
		isFemale = (randomNumberGenerator.nextInt(100) < 54);
	}
	
	public Person (boolean female) {
		isFemale = female;
	}
	
	public void setCurrentAge(int age) {
		currentAge = age;
	}
	
	public void setAgeOfDeath(int age) {
		ageOfDeath = age;
	}
	
	public void haveSex() {
		if(!isFemale || (isFemale && (currentAge < 13 || currentAge > 45 || isPregnant || menstrualCycleWeek == 3))) {
			return;
		} else {
			if(weeksSinceGivingBirth < 6) {
				return;
			}
			// female between the ages of 13 & 45 who is not pregnant and not having their period
			// 50% chance of getting pregnant
			if(randomNumberGenerator.nextInt(100) < 30) {
				isPregnant = true;
				menstrualCycleWeek = 0;
			}
		}
	}

	public boolean isGirl() {
		return (isFemale && currentAge < 13);
	}

	public boolean isBoy() {
		return (!isFemale && currentAge < 13);
	}

	public boolean isWoman() {
		return (isFemale && (currentAge > 13 && currentAge < 66));
	}

	public boolean isMan() {
		return (!isFemale && (currentAge > 13 && currentAge < 66));
	}

	public boolean isElderly() {
		return (currentAge > 65);
	}
	
	public void ageByOneWeek() {
		if(isPregnant) {
			weeksOfGestation++;
		}
		if(weeksSinceGivingBirth < 6) {
			weeksSinceGivingBirth++;
		}
		if(isFemale && currentAge > 12 && currentAge < 45 && !isPregnant) {
			if(menstrualCycleWeek < 3) {
				menstrualCycleWeek++;
			} else {
				 menstrualCycleWeek = 0;
			}
		}
		weeksOfCurrentYear++;
		if(weeksOfCurrentYear > 52) {
			weeksOfCurrentYear = 0;
			currentAge++;
		}
	}
	
	public boolean die() {
		if(ageOfDeath != -1) {
			return (currentAge == ageOfDeath);
		}
		if(currentAge < 85) {
			return (randomNumberGenerator.nextInt(1000) == 76);
		}
		if(currentAge > 85 && currentAge < 100) {
			return (randomNumberGenerator.nextInt(700) == 45);
		}
		if(currentAge > 99 && currentAge < 121) {
			return (randomNumberGenerator.nextInt(400) == 102);
		} 		
		if(currentAge > 120) {
			return (randomNumberGenerator.nextBoolean());
		} else {
			 return false;
		}
	}
	
	public Vector giveBirth() {
		Vector babies = new Vector();
		if(isPregnant && weeksOfGestation > 39) {
			if(randomNumberGenerator.nextInt(100) < 98) {
				babies.add(new Person());
			} else {
				// twins
				babies.add(new Person());
				babies.add(new Person());
			}
			isPregnant = false;
			weeksOfGestation = 0;
			weeksSinceGivingBirth = 0;
		}
		return babies;
	}
	
	public boolean isFemale() {
		return isFemale;
	}
	
	public int getAge() {
		return currentAge;
	}
	
	public boolean isPregnant() {
		return isPregnant;
	}
	
	public String stats() {
		return currentAge + " year old " + (isPregnant ? "pregnant " : "") + (isFemale ? "female" : "male");
	}
}



// Civilization.java

package floodworld;

import java.util.HashSet;
import java.util.Iterator;

public class Civilization {
	public static void main(String[] args) {
		
		int currentWeek = 0;
		int currentYear = 1;
		int currentPopulation = 8;
		
		HashSet men = new HashSet();
		HashSet women = new HashSet();
		HashSet boys = new HashSet();
		HashSet girls = new HashSet();
		HashSet elderly = new HashSet();
		HashSet deadPeople = new HashSet();
		
		// starter population
		Person noah = new Person(false);
		Person noahsWife = new Person(true);
		Person shem = new Person(false);
		Person shemsWife = new Person(true);
		Person ham = new Person(false);
		Person hamsWife = new Person(true);
		Person japheth = new Person(false);
		Person japhethsWife = new Person(true);
		
		noah.setCurrentAge(418);
		noah.setAgeOfDeath(768);
		noahsWife.setCurrentAge(100);
		shem.setCurrentAge(98);
		shem.setAgeOfDeath(550);
		shemsWife.setCurrentAge(30);
		ham.setCurrentAge(88);
		ham.setAgeOfDeath(550);
		hamsWife.setCurrentAge(30);
		japheth.setCurrentAge(108);
		japheth.setAgeOfDeath(550);
		japhethsWife.setCurrentAge(30);
		
		elderly.add(noah);
		elderly.add(noahsWife);
		elderly.add(shem);
		elderly.add(ham);
		elderly.add(japheth);
		
		women.add(shemsWife);
		women.add(hamsWife);
		women.add(japhethsWife);
		
		while(currentYear < 181) {
			int births = 0;
			int deaths = 0;
			int pregnantWomen = 0;
			
			// boys loop
			for(Iterator boysIter = boys.iterator(); boysIter.hasNext();) {
				Person boy = (Person) boysIter.next();
				boy.ageByOneWeek();
				if(boy.die()) {
					deaths++;
					deadPeople.add(boy);
					continue;
				}
				if(boy.isMan()) {
					men.add(boy);
				}
			}
			// girls loop
			for (Iterator girlsIter = girls.iterator(); girlsIter.hasNext();) {
				Person girl = (Person)girlsIter.next();
				girl.ageByOneWeek();
				if(girl.die()) {
					deaths++;
					deadPeople.add(girl);
					continue;
				}
				if(girl.isWoman()) {
					women.add(girl);
				}
			}
			// women loop
			for (Iterator womenIter = women.iterator(); womenIter.hasNext();) {
				Person woman = (Person)womenIter.next();
				if(girls.contains(woman)) {
					girls.remove(woman);
					continue;
				}
				woman.haveSex();
				woman.ageByOneWeek();
				for (Iterator babiesIter = woman.giveBirth().iterator(); babiesIter.hasNext();) {
					Person baby = (Person)babiesIter.next();
					births++;
					if(baby.isGirl()) {
						girls.add(baby);
					} else {
						boys.add(baby);
					}
				}
				if(woman.isPregnant()) {
					pregnantWomen++;
				}
				if(woman.die()) {
					deaths++;
					deadPeople.add(woman);
					continue;
				}
				if(woman.isElderly()) {
					elderly.add(woman);
				}
			}
			// men loop
			for (Iterator menIter = men.iterator(); menIter.hasNext();) {
				Person man = (Person) menIter.next();
				if(boys.contains(man)) {
					boys.remove(man);
					continue;
				}
				man.ageByOneWeek();
				if(man.die()) {
					deaths++;
					deadPeople.add(man);
					continue;
				}
				if(man.isElderly()) {
					elderly.add(man);
				}
			}
			// elderly loop
			for (Iterator elderlyIter = elderly.iterator(); elderlyIter.hasNext();) {
				Person oldPerson = (Person)elderlyIter.next();
				if(men.contains(oldPerson)) {
					men.remove(oldPerson);
					continue;
				}
				if(women.contains(oldPerson)) {
					women.remove(oldPerson);
					continue;
				}
				oldPerson.ageByOneWeek();
				if (oldPerson.die()) {
					deaths++;
					deadPeople.add(oldPerson);
					continue;
				}
			}

			// bring out the dead
			for (Iterator deadIter = deadPeople.iterator(); deadIter.hasNext();) {
				Person deadPerson = (Person)deadIter.next();
				boys.remove(deadPerson);
				girls.remove(deadPerson);
				men.remove(deadPerson);
				women.remove(deadPerson);
				elderly.remove(deadPerson);
			}
			
			// tally
			currentWeek++;
			if(currentWeek == 53) {
				currentYear++;
				currentWeek = 0;
				System.out.println(currentYear);
			}
			if(currentYear >= 180) {
				System.out.println("Year " + currentYear + "/Week " + currentWeek + ": Boys (under 12): " + boys.size() + " / Girls (under 12): " + girls.size() + " / Men (13-65): " + men.size() + " / Women (13-65): " + women.size() + " / Elderly (66+): " + elderly.size());
				System.out.println("Births: " + births);
				System.out.println("Deaths: " + deaths);
				System.out.println("Pregnant Women: " + pregnantWomen);
				int totalPopulation = (boys.size() + girls.size() + men.size() + women.size() + elderly.size());
				int totalChildren = (boys.size() + girls.size());
				int totalAdults = (men.size() + women.size() + elderly.size());
				System.out.println("Total Population: " + totalPopulation + " / "  + totalChildren  + " children, " + totalAdults + " adults");
			}
		}
	}
}

[Erratum: There is a minor error in this code - it simulates a 53-week year, not a 52-week year, since the "weeksOfCurrentYear" variable is reset when its value reaches 52, but it starts out at 0, not 1. This does not materially affect the conclusions drawn in the post, since a longer year actually favors the creationists (since it would mean more time for people to reproduce); however, this correction is included for accuracy's sake.]

[Return to the 2004 Posts of the Month]


Home Page | Browse | Search | Feedback | Links
The FAQ | Must-Read Files | Index | Creationism | Evolution | Age of the Earth | Flood Geology | Catastrophism | Debates