Gigatrees Blog

Yet Another Genealogy Numbering System

Yet Another Genealogy Numbering System

Recently, I developed yet Another Genealogy NUmbering System ( AGNUS ) for use in the Generation Lists used in my family tree. Generation lists are basically, nothing more than ancestor lists that use AGNUS rather than the popular Ahnen numbering system (referred to by some authors, including myself on occasion, as the Ahnentafel numbering system). The Ahnen numbering system has been in use for over 400 years, and has remained the most commonly used numbering system for creating lists of ancestors, called an Ahnenliste, due in part to its simplicity, and, no doubt, to its cool name. For an in-depth discussion of the Ahnen numbering system, read Tamura Jones' 4 part series on the subject.

The Encyclopedia of Genealogy described the numbering system briefly.

"In an Ahnentafel numbering system, the base person is assigned the number one. The father of each person is assigned a number equal to double the child’s number. The mother of each person is assigned a number equal to double the child’s number plus one. As a result, the number of any child is one-half that of their parent, ignoring any remainder."

The Ahnen numbering system is not the only one in use however.

John Higgins described another numbering system used by

"Gerald Paget in his 1977 book on the ancestry of Prince Charles. Each generation is assigned a separate letter (A for parents, B for grandparents, C for great-grandparents, etc), and the numbers restart with 1 for each generation. You can still easily compute the number of a parent from that of a child and vice versa - the number of the mother is twice that of the child and the father is one less than that of the mother. The numbers are more manageable and only get into 7 digits at the extreme ends of the 17th and later generations. The system also has the advantage of quickly identifying what generation a person is in - which is far less than obvious in the standard ahnentafel system (except for a math wizard, perhaps)."

Another numbering system, the Ancestral Lines Pairing System, developed by Capers W. McDonald was described by him in a PDF article on the American Ancestors website. I don't think the article clearly describes the algorithm used, but it does show a sample diagram from which we can conclude the mathematics. St. John Karp said of it

"The Ancestral Lines Pairing System is more difficult to understand and more arduous to execute, but once done it gives an easier way to identify people just by looking at their number. Each person has two numbers, a Line number and a Generation number separated by a decimal point. The Generation number is easily calculated -- the first generation (the subject of the tree) is no. 1, the parents are no. 2, the grandparents are no. 3. The Line numbers are more complicated. Each person is numbered in a way that pairs them with their equivalent on the other side of the tree. Your father's father is no. 1 in his generation and your mother's father is no. 2 - they are paired with adjacent numbers. Your father’s mother is no. 3 and your mother's mother is no. 4."

St. John goes on to knock out a few calculations for finding relationships.

All three of these algorithms were developed for persistence. In an age of pen and paper genealogy, it was important that id numbers did not change when someone was inserted or removed from a list; redrawing was a bear. There is of course no protection for ids in any of these systems when generations are inserted or removed.

All three systems have what can be referred to as a primary id number and an alternate id number. The alternate id number only appears when a person occurs in more than one location in a list. In a typical Ahnenliste, this can be seen as a "same as" number and is usually located next to an individual's name. Alternate id numbers are caused by consanguinity among ancestors due to intermarrying within families. Primary id numbers in an Ahnenliste grow by the power of two, so for a 50 generation list this results in ids in the hundreds of trillions. For those not interested in writing this out, it requires 15 digits and asks computer algorithms to perform 64 bit arithmetic magic. The Ahnen numbering system was definitely never meant to be used for such large trees. Paget's system, by keeping the generations separate from the id and by resetting the ids at the start of each generation, uses a much simpler mathematical model, but loses tracking of family lines between generations. Ancestral Lines attempted to fix this by breaking out the id into two parts, the family line number, and the generational position within the family line.

Now Enter Agnus. Agnus unlike other systems, makes no attempt at being persistent and therefore cannot be thought of as a direct replacement for the other systems, but was intended to exist alongside them. Agnus was developed for computer presentation where renumbering can be done on the fly. Agnus uses a primary id, an alternate id, and an additional secondary id. Like Paget and Ancestral Lines, the generation is kept separate, and for the purposes of presentation is optional when generational information is otherwise displayed. Also like Ancestral Lines, the primary id is composed of a family line and a generational position. Family line numbering and positioning are calculated slightly differently in Angus however. The secondary id, is also composed of a family line and a generational position, but for the secondary id, the position is always 0, so need only ever be optionally displayed. Where the primary id in all three systems tracks the male ancestral line, the secondary id in Agnus tracks on the start of the female ancestral line. Alternate ids indicate the primary id of a duplicate individual.

The benefit of Agnus, is that a list with both primary and secondary ids (and alternate ids) is bidirectional in that it can be traversed in both directions, ancestrally and descendantly (my spell checker says that isn't even a word. I say it didn't use to be). With Agnus, you can tell at a glance who the parents of any person are as well as their descendant. You can traverse paternal ancestral lines by using primary ids only, or you can traverse maternal lines by using the family line numbers of both the primary and secondary ids. When an alternate id is found, the primary id effectively switches over to that of the alternate id -- this behavior is the same for the other numbering systems as well. For example, if a person's primary id is 1.01 and their secondary id is 2[.00], then their father will be found at primary id 1.02 and their mother at primary id 2.01. Alternately, if the person's primary id is 1.02, their child will be found at primary id 1.01. If the person's primary id is 2.01, their child will be found at secondary id 2[.00].

Presentation: When it comes to presentation, each of the three ids can be displayed in fixed width formats containing an optional generation id followed by an optional colon, followed by a family line id, followed by a period and a 2 digit generational position, i.e. [GG:]LLLL.PP. The optimal fixed widths can be determined at presentation time. The brackets shown in this syntax indicate optional elements only. One additional presentation feature is needed to indicate whenever the primary id's final generational position has been reached, i.e. the individual has no father. For this I propose placing a simple asterisks (*) after the id, though any sort of visible terminator could suffice. The benefit of this terminator is to inform the viewer when traversing up the list that to continue on to the next generation they will need to follow the secondary id's (mother's) family line. If the mother's line has terminated, the secondary id is simply left blank. The terminator should not be used when an alternate id is present as that already provides that indication. The secondary and alternate ids have a similar syntax, except that neither will ever have an asterisks, the secondary id generational position (PP) is always "00" so only need be optionally displayed, and the alternate id is generally accompanied by the generation number, though it is not necessary as the generation list can still be used effectively without it, but may require more searching as alternate id family numbers are sometimes found in non-adjacent generations. When generation numbers are present in alternate ids, they can also provide an indication of generation hopping which may be helpful to viewers in locating errors in their lineages. A typical 3 id indication therefore might look something like: LLLL.PP* LLLL GG:LLLL.PP. The last presentation feature is strictly optional; whereas in the Ahnen numbering system, ancestors are paired by couples, I propose that Agnus primary ids are sorted by the family line number within each generation. This makes it much easier to trace family lines between generations. Each generation in the resulting generation list will then show all male ancestors before showing all female ancestors. Similarly, when secondary ids are assigned as described below, it would simplify presentation if they followed this sorting order, however, accomplishing this may be overly complex, so is not required.

The Algorithm: the primary id of the root person when their father is also present in the list will always be 1.01, that is, family line 1, position 1. The same person's secondary id when their mother is present in the list is 2[.00], representing family 2. The primary id of this person's father is 1.02, indicating the 2nd generational position, and their mother will be 2.01, indicating the 1st generational position. With the exception of the root ancestor, all lines begin with women, but generational positions always follow the male line. Best of both worlds, eh? New family lines are created for every woman in the list in numerical order (unless sorted as described above). That is it in a nutshell.

The following list includes the first 4 generations of ancestors for Henry Plantagenet III, King of England. Generations are sorted by family lines, secondary ids were assigned in numerical order (not sorted order).

Generation 1
[1.01 2] Henry Plantagenet, III, King of England

Generation 2
[1.02 3] John Plantagenet, I, King of England
[2.01 4] Isabelle d’Angouleme, Countess of Angouleme

Generation 3
[1.03 5] Henry Plantagenet, II, King of England
[2.02 7] Aymer de Valence, Count of Angoulême
[3.01 6] Eleanor, Duchess of Aquitaine and Queen of France
[4.01 8] Alice de Courtenay

Generation 4
[1.04 9] Geoffrey Plantagenet, V, Duke of Normandy
[2.03 13] William, VI, Count of Angoulême
[3.02 11] William, X, Duke of Aquitaine
[4.02 15] Pierre de Courtenay, I, Count of Courtenay and Montargis
[5.01 10] Princess Matilda, Empress of Germany
[6.01 12] Eleanor de Chastellerault
[7.01 14] Marguerite de Turenne
[8.01 16] Elizabeth de Courtenay

As you can readily see from this list, the root person's male ancestors follow family line 1, i.e. 1.01 -> 1.02 -> 1.03 -> 1.04. His maternal line: (2) -> 2.01 -> (4) -> 4.01 -> (8) -> 8.01. Since family numbers are doled out in order, this is not the same as doubling or bit shifting (adding powers of 2), so the maternal line can include odd numbered families as well. In a similar fashion then, the maternal line can be traced backwards 8.01 -> (8) -> 4.01 -> (4) -> 2.01 -> (2) - > 1.01. For the purposes of presentation, this is a great advantage. Though it is possible to manually traverse a list in such a manner, it is also possible to automate these traversals in a variety of different ways, making Agnus ideally suited for computer presentation of generation lists.

Built with Gigatrees (4.1.9)