Некоторое время я пытался решить проблему с расписанием для пула, над которым я работал. Эта проблема заключается в следующем ...
В бассейне работают X многих спасателей, и у каждого есть определенное количество часов, которое они хотели бы отработать. Мы надеемся сделать так, чтобы среднее количество часов от каждого спасателя было минимальным и справедливым для всех. Каждый спасатель также является студентом колледжа, поэтому у него будет разный график работы.
Каждую неделю расписание событий пула отличается от предыдущего, поэтому каждую неделю необходимо создавать новое расписание.
В течение каждого дня требуется определенное количество спасателей на определенные промежутки времени (например: 3 охранника с 8:00 до 10:00, 4 охранника с 10:00 до 15:00 и 2 охранника с 15:00 до 22:00). Вот здесь-то и начинается самое сложное. Нет четко определенных смен (слотов) для размещения каждого из спасателей (из-за того, что создание расписания может быть невозможно при наличии спасатели плюс изменяющееся еженедельное расписание мероприятий в бассейне).
Поэтому расписание нужно создавать с чистого листа, на котором есть только ...
- Спасатели и их информация (количество желаемых часов, доступность)
- Расписание мероприятий в бассейне, а также количество охранников, которые должны дежурить в любой момент.
Проблема теперь может быть четко определена как «Создайте возможное расписание, которое охватывает необходимое количество охранников в любое время каждый день недели, И будьте как можно более справедливыми по отношению ко всем спасателям при составлении расписания».
Создание возможного графика, который охватывает необходимое количество охранников в любое время каждый день недели, является частью проблемы, которая является необходимостью и должна быть полностью решена. Вторая половина о том, чтобы быть максимально справедливой по отношению ко всем спасателям, значительно усложняет проблему, заставляя меня поверить в то, что мне понадобится приблизительный подход, поскольку возможное количество способов разделения рабочего дня может быть нелепым, но иногда может быть необходимо, поскольку только возможный график может быть смешным для справедливости.
Изменить. Один из наиболее часто предлагаемых алгоритмов, который я нахожу, - это «Проблема больниц / резидентов», однако я не верю, что это применимо, поскольку нет четко определенных слотов для размещения рабочих.