Deja-Vu ... All Over Again?
Or How the 2104 Draft Tore a Hole in the Space-Time Continuum

by John Zabroski

On Friday night, shortly after the 2103 regular season was completed, I downloaded the 2104 Rookie Draft file and started making my list.  I chuckled when I saw Denny Barkovic was the best offensive lineman in the draft.  Immediately, I saw Barkovic as a sentimental pick for me, since he played for the Washington Redskins when I was AGM.  As soon as I dismissed taking Barkovic #1 overall, Pat messaged me asking who I planned to take #1 overall.  I said, "Calvin Jobson."  At that point, Pat notified me of a big problem with the 2104 Draft.  As Pat said to me, "You weren't very original taking Jobson #1 overall."  Here is my explanation of what Pat discovered and how it happened.

The 2104 Draft is almost a perfect repeat of the 2085 Draft.  How did this happen?  Did the FPSFBPro98 sim tear a hole in the fabric of space and disrupt the space-time continuum?  Has USAFL been running so long that the league has uncovered a modern Physics wonder?  No.

In 2085, Calvin Jobson was taken #1 overall.  What may seem like deja-vu is actually the result of pseudo-random number generation.  Since a computer is a deterministic machine, it can only produce quasi-random numbers.  There are several methods for generating these quasi-random numbers, and these algorithms can be read in Numerical Recipes in C or The Art of Computer Programming, Vol. 2, Semi numerical Algorithms.  However, the pseudo-randomness is not "pure-random".  Pure random would be counting the time between clicks of a Geiger counter while holding it over cesium atoms, like the kind used in cesium atomic clocks.  Most house-hold computers don't come with USB Geiger counters and a warranted supply of cesium atoms, so FPSFBPro 98 uses pseudo-random number generation instead.

Why is pseudo-random number generation the culprit here?  Well, first, it might help to understand what a pseudo-random number generator is.  In layman's terms, most pseudo-random number generators are just really big roulette wheels.  If you knew how fast a roulette wheel was going to spin, then you could predict using physics equations when the momentum of the wheel would equal zero (when the wheel stops).  (In fact, Thomas Bass tells the story of physicists playing roulette in The Eudaemonic Pie.)  When you are at the roulette wheel, what you see feels like randomness.  You are gambling and under the impression your luck is out of your control.  However, it only works if the roulette dealer releases the ball the same way each time and spins the wheel at predictable speeds.  Knowing these two factors is parallel to what we call a knowing the "seed" in pseudo-random number generation.  If you know the seed the quasi-random sequence was generated with, then you could deterministically reproduce that same quasi-random sequence.  Suddenly, the difference between quasi-random and pure-random becomes apparent.  Quasi-random is reproducible, pure-random is not.

In scientific research, quality pseudo-random number generators are still useful, because reproducibility *is* important.  Most of us depend upon these pseudo-random number generators to shop online, and only especially high-quality pseudo-random number generators are used: cryptographically-strong pseudo-random number generators.  This leads into an important point: Not all pseudo-random number generators are created equal.  Some generate random numbers really fast, at the expense of linear correlations (poor quality of randomness).  Most video games use these "cheap" pseudo-random number generators, because in video games performance matters.  On the other hand, when you are doing credit card transactions online, quality of randomness outweighs performance because that extra quality means extra security.  However, linear correlations are not the problem here.  We can live with poor quality, because it is just a game.

In addition to being cheap and having high linear correlations, in most of the old algorithms for generating quasi-random numbers the seed can only be one of a several thousand values.  For video games, this is generally more than enough.  However, for the USAFL, this was not!  The designers of FPSFBPro98 probably never expected anyone to sim over 100 seasons, especially given that there can be only 2^(15)-1 PIDs before a new league file must be used.  Most likely, there was 2^16 possible seed values (65536).  Although there may have been 2^32 possible seed values (4294967296).  Mathematically, the probability that two seeds will be identical is given using an approximation of the Birthday Paradox:

p(n) ~~= 1 - ((2^(32)-1)/(2^(32))^C(N,2)

where N is the number of drafts we have had so far (104).  Crunching some numbers results in:

p(n) ~~= 1 - (4294967295/4294967296)^(5356) ~~= 1 - 0.999998753 ~~= 1.24704016e-06


p(n) ~~= 1 - ((2^(16)-1)/(2^(16))^C(N,2)

p(n) ~~= 1 - (65535/65536)^(5256) ~~= 0.0770690034

As you can see, there is almost an 8 percent chance in the second calculation, which assumes the seed is a 16-bit integer.  My guess is that the seed is a 16-bit integer, since FPSFBPRo98 is a DOS-based game.

So, the reason the 2104 Draft is almost an exact replica of the 2085 draft is because the seed was exactly the same.  Every quasi-random number generated on that fateful night in 2085, was generated again tonight, likely including potentials.  This means the smartest drafting strategy for 2104 would be to look back at who the best players were and take them.  There are tiny differences in the draft, owing to the fact that the number of players randomly generated at each position is determined by the number of players who retired at each position in the most recent season.  So, for instance, Nesby Catherwood was a QB in 2085, but a HB in 2104:

QB       Nesby Catherwood       13036   6-2  212  57 40 80 67 49 51 76 81
HB       Nesby Catherwood       22651   6-2  192  83 71 60 62 47 56 76 36

This befuddled me, until Pat pointed out to me that Nesby Catherwood was the last QB PID in  2085, but the first HB PID in 2104.  This points to the fact that the number of players generated at each position is dependent on the number of retirements at each position the previous year.

The logic behind the differences in Catherwood's ratings is related to this phenomena as well.  While I do not have the FPSFBPro 98 source code, I can roughly guess how the player generator works.  I've written such code for other commercial simulation games: RanPlayGen.exe, a third-party application for FHLSim.  When I wrote it, each position had a range of different player types generated.  Since it was a hockey sim, I had playmakers, grinders, goalscorers, goons, etc.

There you have it.  USAFL didn't tear a hole in the space-time continuum, but it is yet another first in USAFL history.

Editor's Note:
The league created a new batch of rookies/retirements to avoid having the 2085 Clones enter the USAFL history. Many thanks to Pat Sicher for discovering the duplicating rookies and to John Zabroski for his assistance in troubleshooting the errors. Once again the USAFL has boldly gone where no other FBPRO leagues have gone before. We are forwarding our findings to Lorne Sundby - we'll publish his comments here once we hear back from him.