Скажем, у нас есть список комнат с их возможностями и список встреч с количеством участников. Мы хотим сопоставить каждую встречу с одной комнатой следующим образом:Ищете математическое решение этой небольшой задачи планирования
- Встреча может быть запланирована только в помещении с емкостью, равной или большей, чем его посещаемость.
- Если есть лишние номера, встречи должны быть запланированы так, чтобы максимально возможный номер оставался незапланированным.
- Встреча с более широкой посещаемостью не должна планироваться в меньшем помещении, чем встреча с меньшей посещаемостью.
- Очевидно, мы должны выяснить, невозможно ли запланировать данные собрания в данных комнатах.
Можем ли мы прийти к графику эффективно? Один прогон был бы хорош, некоторые отступники в порядке, но единственный вариант, который я могу получить для работы (грубый алгоритм плюс динамическое извержение нарушений правила 3) медленнее, чем хотелось бы.
Этот вопрос не так прост, как кажется! Наивные линейные подходы не в состоянии, по крайней мере один критерий:
Мы можем отсортировать каждый список от высокого до низкого и начать спаривание самую большую комнату к крупнейшему сессии, мы приедем с решением любое время суток возможно, но у нас будут как можно меньше комнат, а не самые большие. (Рассмотрите случай заседаний 10 и 15 человек, запланированных на 200, 30 и 20 человек.)
Мы можем сортировать список встреч от высокого до низкого, а затем спуститься вниз, пытаясь найдите самую маленькую комнату, которая достаточно велика, чтобы содержать эту встречу. Но иногда это приведет к тому, что большая комната будет назначена на меньшую встречу. (Рассмотрим планирование 40 и 30 личных встреч в 40 и 80-местных номерах.)
Но, конечно, есть лучший способ решить эту сравнительно простую задачу.
Помогает ли это учитывать разницу (емкость - посещаемость) в качестве критерия сортировки? – bobs
Вы уверены, что это «относительно простая проблема»? При беглом взгляде это выглядит как классическая проблема упаковки, многие из которых NP-полные. –