Skip to content
Go to file

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time


Coverage Status Build Status Build status Code Issues

Conference Scheduler


A Python tool to assist the task of scheduling a conference which:

  • Can take an existing schedule and validate it against a set of constraints
  • Can calculate a new valid, optimal schedule
  • Can calculate a new, valid schedule also optimised to be the minimum change necessary from another given schedule
  • Has the resources, constraints and optimisations defined below built in
  • Has a simple mechanism for defining new constraints and optimisations
  • Is a standalone tool which takes simple data types as input and produces simple data types as output (i.e. does no IO or presentation)

The full documentation can be found at


  • Slot - a combination of room and period
  • Session - an ordered series of slots (e.g. 'the session in room 1 between coffee and lunch on Friday')
  • Event - a talk or workshop
  • Demand - the predicted size of audience for an event
  • Capacity - the capacity of venues


  • All events must be scheduled
  • A slot may only have a maximum of one event scheduled
  • An event must not be scheduled in a slot for which it has been marked as unavailable
  • An event must not be scheduled at the same time as another event for which it has been marked not to clash
  • An event may be tagged and, if so, must be scheduled in a session where it shares at least one tag with all other events in that session


Two options:

  • The sum of 'potential disappointments' should be minimised where 'potential disappointments' is defined as the excess of demand over room capacity for every scheduled event
  • Minimise the number of changes from a given schedule.


Some examples of situations which have arisen at previous conferences and could be handled by the unavailability, clashing and tagging constraints:

  • A conference organiser says "Talks X and Y are on similar subject matter and likely to appeal to a similar audience. Let's try not to schedule them against each other."
  • A conference organiser says "Talks X, Y and Z are likely to appeal to a similar audience. Let's try to schedule them sequentially in the same room so that we minimise the movement of people from one room to another."
  • A conference organiser says "The audience for Talk X would benefit greatly from the speech-to-text provision. Let's schedule that one in the main hall."
  • A potential session chair says "I'd like to attend workshop X, so please don't schedule me to chair a session that clashes with it."
  • A potential session chair says "I'm happy to chair a session but I've never done it before, so please don't schedule me in the main hall."
  • A speaker says "I'd like to attend talk X, so please don't schedule my talk in the same slot."
  • A first-time speaker is assigned a mentor and requests that the mentor chairs the session in which they are scheduled to give their talk.


This repository was inspired by a talk given by David MacIver at PyCon UK 2016:

You can’t perform that action at this time.