Я пытаюсь найти / разработать алгоритм, который может минимизировать общее время для планирования заданий (со временем выполнения) на машины. I.E стандартный алгоритм многопроцессорного планирования.
Однако у меня есть два дополнительных ограничения: некоторые задания должны быть выполнены раньше других (приоритет). Только определенные машины могут выполнять определенные задания (исключая задания) . Хотя задания не являются уникальными для обработчиков.
Например, у меня может быть 4 рабочих места, таких что -
(cost): j1 (4) , j2 (2) , j3 (10), j4 (12)
3 machines: m1, m2, m3
Such that:
m1 can run j1, j2, j3
m2 can run j1, j2 and
m3 can run j3, j4
j1 must be run before j2 and j4
Я стремлюсь найти оптимальное расписание для каждой машины, чтобы минимизировать общее время.
Я рассмотрел использование алгоритма многопроцессорного планирования для несвязанных машин (установка исключенных задач на бесконечную стоимость), но это не идеально, поскольку затраты не являются фактически переменными (либо бесконечными, либо обычной стоимостью).
Использование DAG должно хорошо работать для ограничения приоритета, но я не могу понять, как включить исключения.
В данный момент я использую жадный алгоритм, который максимизирует стоимость освобожденных (больше не ограниченных) заданий во всех других процессорах. Однако я понятия не имею, является ли это оптимальным или даже хорошим.
Я вполне уверен, что это NP-сложный, поэтому я не предполагаю, что существует оптимальный алгоритм. Может случиться так, что использование многопроцессорного планирования является проблемой, так как может быть лучше использовать алгоритмы ранцевания или минимального пути.
Было бы предпочтительнее помочь с обоими ограничениями, но литература по работе с исключенными рабочими местами минимальна (согласно некоторым поискам в Google), поэтому советы по простому решению этой проблемы были бы полезны.