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']