Возможно, вы знакомы с эссе Пола Грэма, "Расписание создателя, расписание менеджера" . Суть эссе в том, что для творческих и технических специалистов встречи - это анафема производительности, поскольку они имеют тенденцию приводить к «фрагментации графика», разбивая свободное время на куски, которые слишком малы, чтобы сосредоточиться на решении сложных проблем.
В моей фирме мы увидели значительные преимущества, сводя к минимуму количество сбоев, но алгоритм грубой силы, который мы используем для определения расписаний, недостаточно совершенен для правильного планирования больших групп людей. (*)
Что я ищу, так это если есть какие-либо известные алгоритмы, которые минимизируют это снижение производительности, среди группы N производителей и менеджеров.
В нашей модели
- Есть N человек.
- Каждый человек p i является либо производителем ( Mk ), либо менеджером (* 1030) * Мг * * тысяча тридцать одна). * * одна тысяча тридцать-две
- У каждого человека есть расписание с i .
- У каждого человека расписание Ч часов.
- Расписание состоит из серии непересекающихся интервалов с i = [ ч 1 , ..., ч J * *] 1055.
- Интервал либо свободен , либо занят . Два смежных свободных интервала эквивалентны одному свободному интервалу, который охватывает оба.
- Производительность P для каждого человека составляет от 0 до 1.
- Производительность производителя максимизируется, когда количество свободных интервалов минимизировано.
- Производительность производителя равна 1 / (максимум [1, количество свободных интервалов]).
- Производительность менеджера максимизируется, когда максимизируется общая продолжительность свободного времени, но им нравятся длинные перерывы между заседаниями, а не короткие перерывы.
- Производительность менеджера равна сумме квадратов длин каждого свободного интервала в виде доли дня. То есть ( ч 1 / с i ) 2 + ( ч 2 / с i ) 2 + ..., где каждый интервал является свободным интервалом.
- Цель: Максимизировать общую производительность команды.
Обратите внимание, что если нет собраний, как производители, так и менеджеры испытывают оптимальную производительность. Если встречи должны быть запланированы, то производители предпочитают, чтобы встречи происходили вплотную, в то время как руководителям все равно, куда идет встреча. Обратите внимание, что, поскольку все сбои рассматриваются как одинаково вредные для производителей, нет разницы между совещанием, которое длится 1 секунду, и совещанием, которое длится 3 часа, если оно сегментирует доступное свободное время.
Проблема состоит в том, чтобы решить, как запланировать M различные собрания с участием произвольных чисел N людей, где каждый человек на данной встрече должен разместить занят интервал в их графике, чтобы он не перекрывался с любым другим занятым интервалом. Для каждой встречи M t время начала интервала занят должно быть одинаковым для всех сторон.
Существует ли алгоритм для решения этой проблемы или аналогичный ему? Моей первой мыслью было, что это выглядит очень похоже на дефрагментацию (минимизировать количество отдельных фрагментов), и есть много алгоритмов по этому поводу. Но дефрагментация не имеет ничего общего с расписанием. Мысли?
<Ч />
(*) С практической точки зрения это на самом деле не проблема, потому что редко мы встречаемся более чем с ~ 5 людьми одновременно, поэтому пространство возможностей невелико.