Repopulation après le Déluge

Poste du mois : mai 2004

par thelodger

Objet:    un petit programme que j'ai écrit pour jouer avec la repopulation après le Déluge
Date:       12 mai 2004
Message-ID: had4a0t2v6h2fq1o4dglraet2q0m0003d1@4ax.com

J'ai d'abord publié ce message profondément dans un fil de discussion afin d'obtenir des idées du pasteur Dave. J'ai décidé de le publier à un emplacement légèrement plus visible au cas où des créationnistes souhaiteraient laisser un commentaire...

L'idée initiale de tout faire est venue d'une conversation téléphonique que j'ai eue avec un ancien de la JW, où il a suggéré qu'au lieu de tenter de disqualifier la Bible, je tente au contraire de me convaincre moi-même. Je sais que ce message est déjà long, mais je l'ai allongé en y incluant le code source Java de mes classes Person et Civilization. C'est un programme extrêmement simplifié et je suis sûr que beaucoup d'entre vous auront des améliorations/corrections/etc à proposer. Gardez simplement à l'esprit que je l'ai écrit en environ une heure, juste pour m'amuser.

*** publication recommencée ***

Je voudrais vraiment savoir exactement comment vous résolvez la question de savoir comment la terre a pu se repeupler assez rapidement pour permettre l'essor des cultures égyptienne, mésopotamienne et chinoise dans les années qui ont immédiatement suivi le Déluge.

Ainsi, la version qui m'a été expliquée est que toute la civilisation humaine serait née après le Déluge. En utilisant les âges et dates de la Bible, il est possible de déterminer l'année exacte (en partant de la création d'Adam à 4026 av. J.-C.) :

De la création d'Adam à la naissance de Seth   130 ans
Puis à la naissance d'Enosh                  105 ans
Puis à la naissance de Kenan                   90 ans
Puis à la naissance de Mahalalel               70 ans
Puis à la naissance de Jared                   65 ans
Puis à la naissance d'Enoch                   162 ans
Puis à la naissance de Methuselah              65 ans
Puis à la naissance de Lamech                 187 ans
Puis à la naissance de Noé                     182 ans
Puis le Déluge                                600 ans

Grâce à la généalogie et à la chronologie bibliques, le Déluge peut être fixé en 2370 av. J.-C., environ 4 400 ans auparavant comme vous l'avez dit.

Quoi qu'il en soit, les ancêtres de la race humaine moderne étaient Cham, Sem et Japheth, les trois fils de Noé et leurs épouses. Ils furent féconds et se multiplièrent après le Déluge jusqu'au moment de Phaleg, quand fut construite la tour de Babel. La construction de la tour a conduit à la dispersion de plusieurs groupes ethniques et linguistiques dans tous les coins de la Terre et le reste, comme on dit, constitue l'histoire.

Il est impossible de déterminer à partir de la Bible le moment exact de la tour de Babel, mais on l'estime quelque part aux alentours de 180 années après le Déluge, selon la période où Phaleg a vécu.

Maintenant, la plus ancienne pyramide égyptienne connue (la pyramide à degrés) a été datée à environ 300 ans avant cette date, la pyramide Rouge un peu plus tardive, la pyramide courbée et (bien sûr) les pyramides de Gizeh et le Sphinx étant toutes généralement datées d'avant la date biblique du Déluge. Bien sûr, ces datations doivent être décalées d'environ 500 ans ou plus pour que leur construction ait eu lieu après la tour de Babel. Donc, en supposant que ce soit le cas, la question suivante est de savoir combien de personnes devaient être en vie en Égypte au moment de la construction des pyramides afin de permettre ladite construction. Il est impossible de le savoir avec certitude, mais l'estimation généralement acceptée est d'environ 1 à 2 millions de personnes vivant en Égypte à l'époque et d'une main-d'œuvre de construction d'environ 20 000 personnes.

Ce n'est évidemment pas seulement l'Égypte qu'il faut prendre en compte. Toute la région du Croissant fertile, la Sumerie, l'Assyrie, Babylone elle-même : cette région a également été peuplée peu après le Déluge et de nombreuses villes ont été construites, indiquant au minimum des centaines de milliers, probablement des millions de personnes.

En Chine, vers 2100 av. J.-C. (presque 300 ans après le Déluge), les plus anciens témoignages historiques connus d'une dynastie des Xia existent. Donc, vraisemblablement, les descendants des survivants du Déluge s'étant dirigés vers la Chine, dispersés à Babel, ont mis du temps à migrer là-bas, puis ont développé leur culture. Il y avait, apparemment, à cette époque aussi, des dizaines, voire des centaines de milliers de personnes en Chine.

Ainsi, pour tenter de déterminer si je pouvais coller à la réalité de la biologie humaine et postuler un scénario de repopulation, j'ai écrit un programme informatique aujourd'hui (je suis programmeur). J'ai fait de nombreuses hypothèses peu réalistes selon les standards modernes, mais j'ai supposé que Dieu utiliserait des capacités miraculeuses pour accélérer et soutenir l'effort de repopulation. Mon programme prend divers paramètres, mais il part de la condition initiale que 6 couples reproducteurs humains (la Bible n'indique pas que Noé et sa femme eurent plus d'enfants que ces trois) ont commencé à se reproduire au rythme le plus rapide possible. La reproduction y est divinement soutenue pour être aussi efficace que possible. Voici les hypothèses de base, aussi optimistes que je puisse les imaginer :

  • L'espérance de vie humaine maximale dépasse 120 ans
  • Toutes les femmes âgées de 13 à 55 ans ont des rapports une fois chaque semaine lorsqu'elles n'ont pas leurs règles ou ne sont pas actuellement enceintes ; en moyenne, 90 % des femmes potentiellement enceintes le sont à un moment donné
  • Le taux de fécondation réussi par tentative est de 1 sur 3
  • Dès qu'une fille atteint 13 ans, elle commence à avoir des enfants, sans exception, et reste active à procréer jusqu'à 55 ans
  • Il n'y a pas de mortalité infantile
  • Il n'y a aucun décès pendant l'accouchement
  • Les taux de mortalité en général sont extrêmement plus bas qu'à l'époque moderne

Mon objectif dans cette simulation était de voir ce qui se passerait si les taux de natalité étaient accrus suffisamment pour expliquer les populations nécessaires aux cultures égyptienne, mésopotamienne et chinoise.

J'ai exécuté ce programme un grand nombre de fois et je sais qu'il est relativement défectueux, mais dans la mesure du possible j'ai essayé de pencher vers des taux de reproduction miraculeux, pas de simuler les taux de croissance démographique connus. Après 180 ans après le Déluge, à peu près à la période de la tour de Babel, le programme aboutit à des nombres de population dans la zone suivante (ce sont des valeurs d'une exécution précise, des facteurs aléatoires produisent à chaque exécution des chiffres légèrement différents) :

- Population de la Terre : 61 162

Pas mal, ai-je pensé la première fois. Une bonne population fondatrice pour Babel, et seulement environ 500 ans après les dates alléguées pour l'Égypte... Puis, j'ai décidé de décomposer et j'ai trouvé quelque chose de fascinant... Elles sont presque toutes des enfants de moins de 12 ans :

  • Filles de moins de 12 ans : 25 989
  • Garçons de moins de 12 ans : 21 446
  • Adultes (ici, être majeur signifie avoir plus de 12 ans) : 13 727

De même, au moment où j'ai arrêté la simulation à 180 ans, il y avait 6 694 femmes de plus de 13 ans dont 5 291 étaient enceintes. Le reste étaient des hommes adultes.

Donc, il existe des problèmes majeurs à ce stade. Premièrement, nous manquons de temps, car les dates des pyramides s'enfoncent davantage dans le passé et cet écart ne peut croître qu'à ce point sans rompre toute crédibilité. Deuxièmement, un monde composé d'environ 7 000 « hommes adultes », 5 300 femmes enceintes et 48 000 enfants n'est pas un monde dans lequel la population se répandrait, construirait des villes et des monuments colossaux, développerait l'écriture et tout cela, car tous passeraient leur temps à élever les enfants, et enfin, nous sommes à quelques millions de personnes de moins. Les corps ne sont simplement pas là. On pourrait continuer ainsi pendant quelques centaines d'années de plus (et après avoir un peu optimisé le code, j'ai l'intention d'essayer), mais je ne vois pas comment il serait possible de maintenir les taux de croissance démographique requis et en même temps résoudre le problème d'avoir trop d'enfants par rapport aux adultes, d'autant que ces adultes sont en grande partie des adolescents. Les humains ne grandissent que si vite. Les civilisations égyptienne, mésopotamienne et chinoise ont-elles été fondées par des centaines de milliers de petits enfants ? L'ovulation humaine peut-elle être accélérée pour durer moins de 40 semaines ? Comment résolvez-vous cette apparente impossibilité ? Je souhaite vraiment le savoir...

À propos, le petit programme que j'ai écrit n'est pas grand-chose, mais je vais publier le code source ici pour quiconque souhaite l'examiner si le souhaite. Je viens de l'assembler à la pause-déjeuner et il faut beaucoup de travail pour qu'il devienne réellement utile.

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 : Il y a une petite erreur dans ce code : il simule une année de 53 semaines, et non une année de 52 semaines, puisque la variable "weeksOfCurrentYear" est remise à zéro quand sa valeur atteint 52, mais commence à 0, pas à 1. Cela n'affecte pas de manière significative les conclusions tirées dans le message, car une année plus longue favorise plutôt les créationnistes (car cela signifierait davantage de temps pour se reproduire) ; toutefois, cette correction est incluse pour l'exactitude.]

[Retour aux messages du mois de 2004]