2016-07-15 2 views
0

У меня есть m машины и n задачи. Существует а т матрицей п стоимости А где Aij является стоимость выполнения задачи J на машине я. Каждая задача должна быть назначена ровно на одну машину, но каждая машина может принимать несколько задач.Минимизация максимальной стоимости назначения задачи в машине

Моя проблема заключается в том, чтобы найти способ назначения задач машинам свести к минимуму MakeSpan, максимальная стоимость одной машины.

Как я могу решить эту проблему? Я рассматривал использование венгерского алгоритма, но он сводит к минимуму общую стоимость, а не максимальную стоимость какой-либо одной машины.

+0

«Стоимость исполнения» должна быть «количеством времени, которое требуется для выполнения»? «Hangerian Method» должен быть «венгерским алгоритмом»? Не похоже, что венгерский алгоритм применим здесь, так как вы не минимизируете общую стоимость, а скорее максимальную рабочую стоимость. Думаю, вы уже это знаете, но, возможно, в этом вопросе также должно возникнуть вопрос, почему вы это решаете. –

+0

«Все задачи должны выполняться параллельно» предполагает, что вы не можете назначить более одной задачи машине (так как тогда они не будут выполняться параллельно). Мой ответ предполагает, что вы не имеете в виду это - тем более, что для этого потребуется m = n. Может быть, вы тоже это проясните? –

+0

Да, это время исполнения, и мы можем назначить более 1 задачи машине, поскольку они независимы. например. n = 512 m = 16 –

ответ

0

Вы можете выразить эту проблему как целочисленная линейная программа. Пусть B[i][j] - это матрица 0 и 1 со значением, которое B[i][j] = 1, если мы назначим j-ю задачу на машину i. Тот факт, что задачи не расщепляются, делает это скорее ILP, чем LP, иначе мы могли бы просто настаивать на том, чтобы 0 <= B[i][j] <= 1.

Мы хотим минимизировать максимальную стоимость любой машины. Это не линейная функция, но есть стандартный трюк, чтобы выразить ее как таковую, введя фиктивную переменную (которая в программе здесь называется MakeSpan).

НРП это программа, которая имеет т + п ограничения:

minimize MakeSpan such that 

sum(B[i][j] for i=1..m) = 1 for all j 
sum(B[i][j]*A[i][j] for j=1..n) <= MakeSpan for all i 

Первый набор ограничений формализует идею, что каждая задача назначена ровно в одну машину. Второй набор ограничений заключается в том, что стоимость каждой машины не превышает MakeSpan.

Минимум MakeSpan достигается локально, когда MakeSpan равен максимальной стоимости любой машины и достигается в глобальном масштабе, когда эта максимальная стоимость также минимизирована.

Для решения ILP вы можете использовать свой любимый решатель ILP. Например, GLPK является открытым исходным кодом.

+0

Что вы подразумеваете под переменной dummy и что будет целевой функцией –

+0

'MakeSpan' - это фиктивная переменная - она ​​существует в программе как своего рода трюк, чтобы обойти тот факт, что мы хотели бы свести к минимуму' max (sum (B [i] [j] * A [i] [j] при j = 1..n) для i = 1..m) ', но это не линейная функция. Целевая функция - «MakeSpan». –

+0

Минимизирует MakeSpan объективную функцию? Как мы это определим. У меня есть нулевые знания в LP, ILP и MILP –