conference_scheduler.scheduler

Compute a schedule in one of three forms, convert a schedule between forms and compute the difference between .

A schedule can be represented in one of three forms:

  • solution: a list of tuples of event index and slot index for each scheduled item
  • array: a numpy array with rows for events and columns for slots
  • schedule: a generator for a list of ScheduledItem instances
conference_scheduler.scheduler.solution(events, slots, objective_function=None, solver=None, **kwargs)

Compute a schedule in solution form

param events:of resources.Event instances
type events:list or tuple
param slots:of resources.Slot instances
type slots:list or tuple
param solver:a pulp solver
type solver:pulp.solver
param objective_function:
 from lp_problem.objective_functions
type objective_function:
 callable
param kwargs:arguments for the objective function
type kwargs:keyword arguments
returns:A list of tuples giving the event and slot index (for the given events and slots lists) for all scheduled items.
rtype:list

Example

For a solution where

  • event 0 is scheduled in slot 1
  • event 1 is scheduled in slot 4
  • event 2 is scheduled in slot 5

the resulting list would be:

[(0, 1), (1, 4), (2, 5)]
conference_scheduler.scheduler.array(events, slots, objective_function=None)

Compute a schedule in array form

param events:of resources.Event instances
type events:list or tuple
param slots:of resources.Slot instances
type slots:list or tuple
param objective_function:
 from lp_problem.objective_functions
type objective_function:
 callable
returns:An E by S array (X) where E is the number of events and S the number of slots. Xij is 1 if event i is scheduled in slot j and zero otherwise
rtype:np.array

Example

For 3 events, 7 slots and a solution where

  • event 0 is scheduled in slot 1
  • event 1 is scheduled in slot 4
  • event 2 is scheduled in slot 5

the resulting array would be:

[[0, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 0, 0],
 [0, 0, 0, 0, 0, 1, 0]]
conference_scheduler.scheduler.schedule(events, slots, objective_function=None, solver=None, **kwargs)

Compute a schedule in schedule form

param events:of resources.Event instances
type events:list or tuple
param slots:of resources.Slot instances
type slots:list or tuple
param solver:a pulp solver
type solver:pulp.solver
param objective_function:
 from lp_problem.objective_functions
type objective_function:
 callable
param kwargs:arguments for the objective function
type kwargs:keyword arguments
returns:A list of instances of resources.ScheduledItem
rtype:list
conference_scheduler.scheduler.solution_to_array(solution, events, slots)

Convert a schedule from solution to array form

param solution:of tuples of event index and slot index for each scheduled item
type solution:list or tuple
param events:of resources.Event instances
type events:list or tuple
param slots:of resources.Slot instances
type slots:list or tuple
returns:An E by S array (X) where E is the number of events and S the number of slots. Xij is 1 if event i is scheduled in slot j and zero otherwise
rtype:np.array

Example

For For 3 events, 7 slots and the solution:

[(0, 1), (1, 4), (2, 5)]

The resulting array would be:

[[0, 1, 0, 0, 0, 0, 0],
 [0, 0, 0, 0, 1, 0, 0],
 [0, 0, 0, 0, 0, 1, 0]]
conference_scheduler.scheduler.solution_to_schedule(solution, events, slots)

Convert a schedule from solution to schedule form

param solution:of tuples of event index and slot index for each scheduled item
type solution:list or tuple
param events:of resources.Event instances
type events:list or tuple
param slots:of resources.Slot instances
type slots:list or tuple
returns:A list of instances of resources.ScheduledItem
rtype:list
conference_scheduler.scheduler.schedule_to_array(schedule, events, slots)

Convert a schedule from schedule to array form

param schedule:of instances of resources.ScheduledItem
type schedule:list or tuple
param events:of resources.Event instances
type events:list or tuple
param slots:of resources.Slot instances
type slots:list or tuple
returns:An E by S array (X) where E is the number of events and S the number of slots. Xij is 1 if event i is scheduled in slot j and zero otherwise
rtype:np.array
conference_scheduler.scheduler.array_to_schedule(array, events, slots)

Convert a schedule from array to schedule form

param array:An E by S array (X) where E is the number of events and S the number of slots. Xij is 1 if event i is scheduled in slot j and zero otherwise
type array:np.array
param events:of resources.Event instances
type events:list or tuple
param slots:of resources.Slot instances
type slots:list or tuple
returns:A list of instances of resources.ScheduledItem
rtype:list
conference_scheduler.scheduler.event_schedule_difference(old_schedule, new_schedule)

Compute the difference between two schedules from an event perspective

param old_schedule:
 of resources.ScheduledItem objects
type old_schedule:
 list or tuple
param new_schedule:
 of resources.ScheduledItem objects
type new_schedule:
 list or tuple
returns:A list of resources.ChangedEventScheduledItem objects
rtype:list

Example

>>> from conference_scheduler.resources import Event, Slot, ScheduledItem
>>> from conference_scheduler.scheduler import event_schedule_difference
>>> events = [Event(f'event_{i}', 30, 0) for i in range(5)]
>>> slots = [Slot(f'venue_{i}', '', 30, 100, None) for i in range(5)]
>>> old_schedule = (
...     ScheduledItem(events[0], slots[0]),
...     ScheduledItem(events[1], slots[1]),
...     ScheduledItem(events[2], slots[2]))
>>> new_schedule = (
...     ScheduledItem(events[0], slots[0]),
...     ScheduledItem(events[1], slots[2]),
...     ScheduledItem(events[2], slots[3]),
...     ScheduledItem(events[3], slots[4]))
>>> diff = (event_schedule_difference(old_schedule, new_schedule))
>>> print([item.event.name for item in diff])
['event_1', 'event_2', 'event_3']
conference_scheduler.scheduler.slot_schedule_difference(old_schedule, new_schedule)

Compute the difference between two schedules from a slot perspective

param old_schedule:
 of resources.ScheduledItem objects
type old_schedule:
 list or tuple
param new_schedule:
 of resources.ScheduledItem objects
type new_schedule:
 list or tuple
returns:A list of resources.ChangedSlotScheduledItem objects
rtype:list

Example

>>> from conference_scheduler.resources import Event, Slot, ScheduledItem
>>> from conference_scheduler.scheduler import slot_schedule_difference
>>> events = [Event(f'event_{i}', 30, 0) for i in range(5)]
>>> slots = [Slot(f'venue_{i}', '', 30, 100, None) for i in range(5)]
>>> old_schedule = (
...     ScheduledItem(events[0], slots[0]),
...     ScheduledItem(events[1], slots[1]),
...     ScheduledItem(events[2], slots[2]))
>>> new_schedule = (
...     ScheduledItem(events[0], slots[0]),
...     ScheduledItem(events[1], slots[2]),
...     ScheduledItem(events[2], slots[3]),
...     ScheduledItem(events[3], slots[4]))
>>> diff = slot_schedule_difference(old_schedule, new_schedule)
>>> print([item.slot.venue for item in diff])
['venue_1', 'venue_2', 'venue_3', 'venue_4']