Скажем, у меня есть график, где узлы являются рабочими нагрузками разных типов, а ребра - зависимыми между рабочими нагрузками. (Это DAG, поскольку циклические зависимости не должны существовать.)Алгоритм преобразования DAG рабочего процесса в параллельное распределение ресурсов?
У меня также есть множество агентов, которые могут выполнять работу.
Некоторые виды рабочей нагрузки могут быть предоставлены любому агенту, другие должны быть предоставлены конкретному агенту, а другие должны быть предоставлены одному агенту среди конкретной группы агентов.
Как назначить рабочие нагрузки, такие, что:
Нет нагрузки не дается агенту, пока все его блокирующие нагрузки не будут завершены
кратчайшее время, необходимое для завершения полного график рабочей нагрузки , (Обратите внимание, что минимизация времени простоя агента обычно хороша, но не является фундаментальным требованием - могут быть сценарии, при которых один конкретный агент простаивает дольше, но общее время для завершения всех заданий для всех агентов минимально.)
Рабочие нагрузки имеют оценки продолжительности, но для простоты предполагают, что каждая рабочая нагрузка занимает равное время для вычисления. (Просто разложите каждую рабочую нагрузку на несколько серийно зависимых рабочих нагрузок до тех пор, пока каждая рабочая нагрузка не будет эффективно работать с постоянным временем.)
Я знаю топологическую сортировку DAG, но это создает единый последовательный порядок узлов. У меня несколько агентов, работающих параллельно, и эти отношения таковы, что потенциально большие оптимизации времени могут быть сделаны путем неочевидного переупорядочения задач.
Результат этого будет лучше всего представлен как диаграмма Ганта с минимальной общей продолжительностью. На самом деле, если вы думаете о проблеме как о распределении билетов с ошибками в вехе инженерам в команде, с целью достижения вехи, сделанной как можно скорее, вы получите эту идею. (Нет ... пожалуйста, не говорите мне, чтобы я импортировал свой график в MS Project, а затем экспортировал его :) - Меня интересует алгоритм, стоящий за ним!)
Указатели на известные алгоритмы, библиотеки программного обеспечения или общие вопросы и принципы очень ценятся!
Хорошее резюме. Заказ задач по количеству зависимостей является достойной эвристикой, но может привести к недоиспользованию параллельных ресурсов (например, классных комнат), особенно если у вас была зависимость между некоторыми лекциями и их классами - например, если на некоторых лекциях был необходим проектор, и только некоторые в классных комнатах были установлены проекторы. В этом случае вам будет сложно держать все ваши классные комнаты в полном объеме, особенно если для многих лекций нужны проекторы. – Yetanotherjosh