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