Repoblación después del Diluvio

Publicación del mes: mayo de 2004

por thelodger

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

Al principio publiqué este mensaje en un hilo profundo intentando obtener algo de información de Pastor Dave. He decidido publicarlo en un lugar un poco más visible por si algún creacionista desea comentar sobre ello....

El impulso inicial de esta idea surgió de una conversación telefónica que tuve con un anciano de los Testigos de Jehová, en la que sugirió que en lugar de intentar refutar la Biblia, intentara demostrarla yo mismo. Sé que este es ya un mensaje largo, pero lo he alargado incluyendo el código fuente en Java de mis clases Person y Civilization. Este es un programa extremadamente simplista y estoy seguro de que muchos de ustedes podrán aportar mejoras/correcciones/etc. Solo tengan en cuenta que lo escribí en aproximadamente una hora, solo por diversión.

*** inicio de republicación ***

Me gustaría mucho saber exactamente cómo resuelves la pregunta de cómo la Tierra logró repoblarse lo suficiente y con suficiente rapidez para permitir la aparición de las culturas egipcia, mesopotámica y china en los años inmediatamente posteriores al Diluvio.

Ahora, la explicación que he recibido es que toda la civilización humana surgió después del Diluvio. Usando las edades y fechas de la Biblia, es posible determinar el año exacto (partiendo de la creación de Adán en 4026 a.C.):

Desde la creación de Adán hasta el nacimiento de Set  130 años
Luego al nacimiento de Enoc                       105 años
Al nacimiento de Kenan                             90 años
Al nacimiento de Mahalalel                        70 años
Al nacimiento de Jared                            65 años
Al nacimiento de Enoc                              162 años
Al nacimiento de Matusalén                        65 años
Al nacimiento de Lemec                            187 años
Al nacimiento de Noé                              182 años
Al Diluvio                                        600 años

Gracias a la genealogía y la cronología bíblicas, el Diluvio puede fijarse en 2370 a.C., aproximadamente hace 4.400 años como dijiste.

De todos modos, los protoparientes de la raza humana moderna fueron Cam, Sema y Jafet, los tres hijos de Noé y sus esposas. Fueron fructíferos y se multiplicaron después del Diluvio hasta alrededor de la época de Peleg, cuando se construyó la Torre de Babel. La construcción de la torre condujo a la dispersión de varios grupos étnicos y de lengua a todas partes de la Tierra, y lo demás, como suele decirse, es historia.

Es imposible deducir de la Biblia la fecha exacta de la Torre de Babel, pero se estima que ocurrió en torno a unos 180 años después del Diluvio, según cuándo vivió Peleg.

Ahora bien, la pirámide egipcia más antigua conocida (la Pirámide Escalonada) se ha datado aproximadamente 300 años antes de esta fecha; la Pirámide Roja, la Pirámide Inclinada y (por supuesto) las Pirámides de Guiza y la Esfinge se fechan en general también antes de la fecha bíblica del Diluvio. Por supuesto, estas dataciones deben estar desfasadas en torno a 500 años para que su construcción ocurriera después de la Torre de Babel. Así, suponiendo que ese sea el caso, la siguiente pregunta es cuánta gente necesitaba haber estado viva en Egipto en el momento de la construcción de las pirámides para facilitar esa construcción. Es prácticamente imposible saberlo con certeza, pero la estimación generalmente aceptada es de alrededor de 1-2 millones de personas viviendo en Egipto en ese tiempo y una fuerza de trabajo de unas 20.000 personas para construir pirámides.

No solo hay que contabilizar Egipto, por supuesto. Toda la región de la media luna fértil, Sumeria, Acadia, Babilonia misma, esa región completa fue igualmente poblada poco después del Diluvio y se construyeron muchas ciudades que indicaban mínimamente cientos de miles, probablemente millones de personas.

En China, hacia el 2100 a.C. (aproximadamente 300 años después del Diluvio), se conocen los registros más antiguos de una dinastía Xia. Así, supuestamente, los descendientes supervivientes del Diluvio que emigraron a China tardaron un tiempo en establecerse allí y luego desarrollaron su cultura. Había, aparentemente, decenas o posiblemente cientos de miles de personas en China en esa época también.

Entonces, en un esfuerzo por determinar si era posible respetar la realidad de la biología humana y postular un escenario de repoblación, escribí hoy un programa informático (soy programador). Hice muchas suposiciones poco razonables según los estándares modernos, pero asumí que Dios usaría habilidades milagrosas para acelerar y apoyar el esfuerzo de repoblación. Mi programa toma varios parámetros, pero comienza con la condición inicial de que 6 parejas reproductoras de humanos (la Biblia no indica que Noé y su esposa tuvieran más hijos que esos tres) empezaron a procrear a la máxima velocidad que podían. La reproducción estuvo divinamente apoyada para ser lo más efectiva posible. Estas son las reglas de base, tan optimistas como pude imaginar:

  • La esperanza de vida humana máxima supera los 120 años
  • Todas las mujeres entre 13 y 55 años tienen relaciones sexuales una vez cada semana en que no tienen menstruación ni están embarazadas, y en promedio el 90% de todas las mujeres potencialmente embarazadas están embarazadas en un momento dado
  • Sus probabilidades de fertilización exitosa por intento son 1 entre 3
  • Tan pronto como una niña cumpla 13 años, comienza a tener hijos, sin excepciones, y permanece activa dando a luz hasta los 55 años
  • No hay mortalidad infantil
  • No hay muertes durante el parto
  • Las tasas de mortalidad en general son drásticamente más bajas que en los tiempos modernos

Mi objetivo en esta simulación era ver qué ocurriría si las tasas de fertilidad se aceleraran lo suficiente para justificar las poblaciones necesarias para las culturas egipcia, mesopotámica y china.

He ejecutado este programa varias veces y sé que es relativamente defectuoso, pero en lo posible he intentado inclinarlo hacia tasas de reproducción milagrosas, no para simular tasas de crecimiento poblacional conocidas. Tras 180 años desde el Diluvio, aproximadamente en el período de la Torre de Babel, el programa arroja para la población de la Tierra números del siguiente orden (estos provienen de una ejecución específica; los factores aleatorios producen números ligeramente distintos en cada ejecución):

- Población de la Tierra: 61,162

Vaya, no está mal, pensé cuando lo ejecuté por primera vez. Una población semilla decente para Babel, y solo unos 500 años después de las fechas egipcias apuntadas... Luego decidí desglosarlo y encontré algo fascinante... Casi todos eran niños menores de 12 años:

  • Niñas menores de 12: 25,989
  • Niños menores de 12: 21,446
  • Adultos (más de 12 años: aquí se considera adulto): 13,727

Además, cuando detuve mi simulación a los 180 años, había 6,694 mujeres mayores de 13 años de las cuales 5,291 estaban embarazadas en ese momento. El resto eran hombres adultos.

Así que hay problemas importantes en este punto. En primer lugar, nos quedamos sin tiempo porque las fechas de las pirámides se alejan más hacia el pasado y esa brecha solo puede crecer tanto y seguir siendo creíble. En segundo lugar, un mundo compuesto solo por aproximadamente 7,000 hombres "adultos", 5,300 mujeres embarazadas y 48,000 niños no es uno en el que la población se dispersaría, construiría ciudades y monumentos masivos, desarrollaría la escritura y todo eso, porque todos pasarían su tiempo criando hijos y, finalmente, nos faltan unos pocos millones de personas. Simplemente no están los cuerpos. Se podría seguir así unos pocos cientos de años más (y después de optimizar un poco el código pretendo intentarlo), pero no veo cómo es posible mantener las tasas de crecimiento poblacional necesarias y al mismo tiempo aliviar el problema de tener demasiados niños para los adultos, especialmente dado que esos adultos están formados por muchos adolescentes. Los humanos solo crecen tan rápido. ¿Fueron las civilizaciones egipcia, mesopotámica y china fundadas por cientos de miles de niños pequeños? ¿Se aceleró la gestación humana a menos de 40 semanas? ¿Cómo se resuelve esta aparente imposibilidad? Lo deseo sinceramente saber...

Por cierto, el pequeño programa que escribí no significa mucho, pero publicaré el código fuente aquí para quien quiera jugar con él si quiere. Solo lo armé sobre la hora de la comida y necesita bastante trabajo para ser realmente útil.

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");
			}
		}
	}
}

[Errata: Hay un error menor en este código: simula un año de 53 semanas, no de 52, ya que la variable "weeksOfCurrentYear" se reinicia cuando su valor llega a 52, pero comienza en 0, no en 1. Esto no afecta de forma material a las conclusiones del post, ya que un año más largo en realidad favorece a los creacionistas (pues significaría más tiempo para que la gente se reproduzca); sin embargo, esta corrección se incluye por motivos de precisión.]

[Volver a las publicaciones del mes de 2004]