Behind the making of the NFL schedule
bostonglobe.com
bostonglobe.com
The NFL actually has quite a prolific GitHub organization [0]. I recommend looking through if you have a few minutes.
However, SAT solvers and constraint solvers blend in naturally and in fact even ship with many Prolog implementations! Thus, you can have the best of both worlds by simply using Prolog together with such solvers. Thus, using Prolog gives you both a Turing-complete programming language and a highly optimized constraint solver for combinatorial tasks, assuming you choose an implementation that is sophisticated enough. For example, in SICStus Prolog, check out CLP(B) and CLP(FD) for combinatorial tasks involving Boolean and integral variables.
However, these implementations, although elegant and admirable in their own right also due to their innovative approaches, cannot yet compare in terms of features or performance with what a full-fledged modern Prolog system offers. In my experience, the main attraction of a professional Prolog system is often found precisely in its _constraint solvers_, and it is in these areas where professional Prolog implementors compete extremely vigorously, and more simplistic implementations currently fall short either in terms of features or performance.
Still, even a very simplistic Prolog implementation can definitely be very useful, and if you do not need sophisticated constraints, then you may not need a commercial Prolog system. This situation arises for example in parsing, web applications, rule-based systems and other tasks where Prolog can help a lot, and constraints are not primarily needed.
For a use case like sports scheduling and combinatorial tasks in general, I definitely recommend a Prolog system with very strong support of constraints, since what you can do with constraints in this application area by far exceeds the possibilities of "plain" Prolog, both in terms of performance and convenience.
For example, one of the most highly rated Prolog question on Stackoverflow is about a related task involving Tennis match scheduling:
http://stackoverflow.com/questions/4747498/tennis-match-sche...
The posted Prolog solution is quite concise and very efficient, thanks to the built-in constraint solvers that most Prolog systems provide nowadays.
On top of that, there are other competitive factors involved, e.g., in Baltimore, the Orioles and Ravens generally can't be playing mass-attendance games at the same time because they are too close together, and share parking infrastructure. That of course has to be scheduled around.
Beyond that, there's the rather mundane reality that stadiums aren't just used for sports. Even during football season, megastars like Beyonce and the Rolling Stones need venues to play in. And of course, stadiums are loaned / leased out for a panoply of other reasons as well.
I'm not sure how widely known this is, but the actual matchups, not order and dates, are completely deterministic.
Teams play their division twice for six games. They play the other three teams in their conference with the same division standing last season (e.g. division champs will play each other). They play four teams from a rotating division in the other conference. And finally they play the remaining three teams from a rotating division in their conference.
I've always been a football fan but it took me a while to realize the NFL doesn't actually schedule rivalries like Brady/Manning every year, they just happen because those teams consistently win their division.
The workflow would be interesting. Presumably you have some hard and fast rules and then you try to encode bad/good/better rules. Let the computers churn out options. Maybe iterate with some new rules. The start going through the options manually.
I've worked on conference schedules :-) We don't use computers but it usually goes something like heuristics -> coarse optimization -> hand-tuning.
Not many "secrets" revealed, but I love this quote. It could be applied to the culmination of a lot of software projects.
“The beauty of the computer is it can do in seconds what it would take us a lifetime,” North said. “But it’s a machine. It will only do what it is told.
Always important to recognize that "the computer" reflects the values and the judgements of its programmers. It's not inherently objective.
"...The whole process starts upwards of a year in advance when Fifa and Uefa release their match calendars but work starts in earnest in the final months of the previous season..."
http://www.bbc.co.uk/blogs/paulfletcher/2009/06/secrets_of_t...
And also... it's the Jets :)
http://www.footballdb.com/teams/nfl/philadelphia-eagles/team...
The number of pairings between teams that play infrequently will be quite a bit smaller.