Я ищу точный алгоритм, который находит лучшее решение по расписанию задач на N идентичных процессорах.
Время этого алгоритма не имеет значения, наиболее важным является одно из лучших решений (минимальное время всех процессоров, когда будет завершена последняя задача).
В теории уравнение, описывающее этот алгоритм, выглядит следующим образом: P || Cmax
Если у кого-то есть алгоритм (особенно на Java) или псевдокод, я буду благодарен за помощь.
Я попытался написать собственный точный алгоритм, но id не работает :(. В приведенном ниже коде permUtil - это класс, который соответствует перестановкам.
Метод args:
- задачи -> все задачи, где индекс идентичности задачи и значение времени
- op -> процессор назначения (процессор, который назначает задачи)
// у нас есть глобальный массив процессоров op proc, где index - это идентификатор, а value - время расписания задачи на этом процессоре
public void schedule(Byte[] tasks, int op)
{
PermUtil<Byte> permA = new PermUtil<Byte>(tasks);
Byte[] a;
// permutation of all tasks
while ((a = permA.next()) != null)
{
// assign tasks
for(int i=1; i< a.length; i++)
{
// get the b set from i to end
Byte[] b = Arrays.copyOfRange(a, i, a.length);
// all permutations off b set
PermUtil<Byte> permB = new PermUtil<Byte>(b);
while ((b = permB.next()) != null)
{
// task on assign processor
proc[op] = sum(Arrays.copyOfRange(a, 0, i));
if (op < proc.length)
schedule(b, ++op);
else
{
proc[++op] = sum(b);
}
}
}
}
}