About a year ago today, aboard a train in Germany, I started writing simple python code to simulate the random propagation of male lineages.
It is not practical to test the accuracy of a computed migration path (yet) by relying on ancient samples because the further back in time you go, the greater the percentage of the population belonged to extinct Y-lineages, rather than being our direct Y ancestors.
So I created a simplistic simulation of male lineage propagation in order to give people an idea of the accuracy of computed paths and to evaluate future adjustments to the algorithm.
Initial simulation parameters:
I use a 100 by 100 grid, centered on the Congo, spanning 10°S - 10° N and 14° E to 34° E.
Each person has a 27% chance of moving to the adjacent grid square each year, a distance of 22km.
Each person has a 1/60 chance of dying each year.
Each woman has a 20% chance to die giving birth.
Maturation age is 15 years.
The maximum age is 50.
Carrying capacity in each square is 10 - no one can be born if the local population reaches this level
Every 30 years 30% of the population dies.
Every 100 years 50% of the population dies.
These last two measures were introduced to both keep processing time down and to provide additional chances for lineages to exhibit bottlenecking and founder effect behavior that we see in the real world.
Note that the tree used consisted of every person alive at the end of the simulation having done an NGS, which is an unrealistically high expectation.
Adam started at 10 N, 24 E and his four wives started 0.2 degrees away (22km) in each cardinal direction. But then they were all allowed to move the same distance randomly each year in one cardinal direction before becoming pregnant.
From the 708 people living 250 years later, PhyloGeographer calculated Adam to having been born at 1 S, 24.43 E, which is 131km off.
This is just a preliminary result but I find it encouraging.
More detailed accuracy calculations along the entire path and given lower sampling rates to come...
I also plan to simulate fighting between different kin groups and the fleeing of a defeated kin group in the opposite direction of their aggressors. This could hopefully simulate a push-pull dynamic like that seen during the Migration Period (but which probably happened all the time).