Friday, May 3, 2013

Gencon Scheduler Script Update

As it is nearly time for the annual hectic GenCon event scheduling frenzy, I have updated my schedule-planning script.  The latest version of the script is available here.

A stand-alone application version of the program is available here.

This script is a utility I wrote in Python to help in the complex process of searching through the 9000+ individual events in the GenCon event catalog and finding the optimal mix of things to do at the convention.  Like to the Highprogrammer search tool, this script can search through the event catalog and filter events by time, type, organizer, system, age, etc.  Unlike the highprogrammer tool, this script runs completely on your own computer (once it downloads the catalog from the GenCon site) so you don't need to worry about Highprogrammer going down.  But it also does a lot more.

In addition to the event search function, this script also has a schedule optimization mode.  After running a search on the event list and finding an event that interests you, you can add that event to a wish list and assign a priority rank to it.  Once you have gathered a selection of events you might want to attend, the schedule optimization function will run through every possible combination of events to determine the best possible convention schedule for you.  The search tool is also smart enough to recognize that many of the events at GenCon are run at multiple timeslots throughout the weekend.  You simply specify that you'd like to attend an event and the schedule optimizer will pick the best slot for you to attend considering other possible conflicting events.

The script also has a function to guide you through the registration process, filling out your online wishlist with events as determined by your optimal schedule and all the less-optimal schedules yo might fall back on if you don't get tickets to your highest-ranking events.  This function is still somewhat experimental, but does seem to work.

For this year I've vastly improved the code that digests the raw event list files.  It should be a lot more robust to GenCon suddenly deciding to change their catalog format again.  I have also greatly improved the search algorithm, it can now process complex search queries like "Find any pathfinder by paizo on thursday or friday not before noon".  The schedule optimizer also now has a set of user-tweakable rules for things like minimum hours of sleep per night and maximum contiguous hours of gaming without a break.

Now for the downsides.  This is a script, not a stand-alone application.  You will need to download and install Python 2.7 (not 3.x!) for this to run.  The code is not terribly well optimized, some of the functions are quite slow.  Updating the event catalog from the GenCon website in particular takes forever.  The interface is a command-line text interface, there's no GUI or anything friendly like that, but there are some built-in help functions to tell you how to use it.

The first time you run the script, it will automatically connect to the GenCon site and download the event catalog.  At the time of this writing, that catalog does not exist yet, so the script will fail and quit.  I am at the moment assuming that GenCon will be putting this year's event list in the same place as last year's and storing it in a similar format.  If they don't, I'll be updating this script shortly after the catalog becomes available.

Update:  As of the evening of May 8th, the event catalog is live, and my script is successfully downloading and processing it.