Wednesday, September 06, 2006

F.A.U.L.T.Y.

Every year I enter an NFL pick 'em league. It's a lot of fun, even when I don't watch any football at all, just because of the characters in the league. It works on a head to head format: there are 32 teams, one for each team in the NFL. Your schedule mimics the team you represent.

For several years now, I have been the Falcon. Or, more precisely, the "Faulty" Falcon, in that I have the unerring ability to turn the most obvious game of the week into the upset of the week by virtue of my picking them. It got so bad one year that I started writing a column now and again, putting my "lock of the week" on display only to see it come crashing down week in and week out.

This year, however, a number of factors have conspired to keep me from paying enough to attention to the NFL to make educated picks of any kind. I've been watching a lot of soccer since the World Cup, plus the Phils are in the playoff hunt, and I like both of those sports better than the NFL.

So since my picking ability seems pretty random anyway, why not make it as truly random as possible?

Now, random number theory is interesting stuff as it relates to computers. Obviously, computers aren't any good whatsoever at producing random results. In fact, they're designed to do exactly the opposite. So in order to produce near random results, mathematicians have come up with some interesting algorithms that computers can use.

However, these algorithms all rely on a seed number to produce their results... a starting point for the rest of the equation to work with. If you use the same seed number twice, you'll get the same "random" number. So a random number algorithm is only as good as the method by which you obtain your seed number.

In most cases, programmers will just use something like the system clock, since it is going to be different every time. Although good enough for government work, this is not a real great way to do things because the time is predictable, making your "random" results predictable.

So people have come up with all kinds of weird ways to produce "entropy", the unordered stuff from which precious randomness can be gleaned. People have done some neat stuff using things like lava lamps to produce entropy.

In my case, I decided to go with random.org, which uses the following approach (from website):

A radio is tuned into a frequency where nobody is broadcasting. The atmospheric noise picked up by the receiver is fed into a Sun SPARC workstation through the microphone port where it is sampled by a program as an eight bit mono signal at a frequency of 8KHz. The upper seven bits of each sample are discarded immediately and the remaining bits are gathered and turned into a stream of bits with a high content of entropy. Skew correction is performed on the bit stream, in order to ensure that there is an approximately even distribution of 0s and 1s.

Yeah. Whatever, sounds pretty random to me.

Using a quick little .NET script, I make repeated HTTP requests to random.org, getting some seed numbers, all in the eventual pursuit of a 1 or a 2 (or, more accurately, up to 16 ones and twos) to make my picks.

I call the little app "F.A.U.L.T.Y.", or the "Falcon's Automated and Unnecessarily Lengthy Teaminator for Yeager" (props to my coworker for the assist on the acronym).

Ah yes, technology and the NFL. What could possibly go wrong?

Edit: I've actually added a simple XML config file, which can contain a schedule of play. You can enter what week you want to get the picks for and it will spit them out in a nice format. Hmm... I probably should stop wasting time on this.

4 comments:

chornbe said...

Another life-changing, mind-altering design comes to fruition. You have now joined the ranks of the truly innovative. Such names as Steve Jobs (iPod), Joseph Cayetty and Walter Mercado adorn the halls of fame and innovation. Yeager, now, proudly, stands among these giants.

Hail to you, sir. Hail to you!

Jason Clark said...

How about a recursive acronym, a la GNU? Just incase the geek threshold isn't completely pegged? I submit:

FAULTY Automatically Uncovers Losing Teams for Yeager.

Ed said...

In evolutionary biology, "protean" behavior is evolved randomness. That is, certain types of predictable, non-random behavior may be eliminated through selective pressures. The classic protean behavior example is the predator - prey scenario of a rabbit fleeing a fox. Anyone who has ever seen a rabbit take flight across an open field is familiar with the seemingly random zig-zag pattern of the rabbit's path. In fact, studies of such zig zag paths have proven that they are indeed perfectly random. Were they not, there would be selective pressure on the rabbit's predators (e.g. the fox) to evolve the ability to predict the rabbit's flight path. Or more simply, foxes capable of predicting a rabbit's non-random flight path would eat better than other foxes and as a result produce lots of little foxes also capable of such rabbit flight path predictions, all of which bodes poorly for the rabbit population. In this case, the best strategy for the rabbit is simply to be random. Game theory has mathematically proven that the "random" strategy is an extremely effective strategy in a surprising number of situations and most organisms are capable of it in some form. It is no surprise, then, that the human mind is also quite capable of true randomness as demonstrated in several classic psychology experiments. While I've long since lost track of my original point, all of this was a long way to say (I think) that the best way to introduce randomness into your NFL picks is to interface your .NET program to a rabbit brain being tricked into thinking it is being chased by a fox or else simply use your own brain (no fox required) which has served you well thus far.

robustyoungsoul said...

Is it possible that by actually spending time on this, I have exhibited some random behavior?