Flow shop
Эта статья о задачах Flow shop. Для начала дадим определение этого типа задач:
| Определение: |
| Flow shop ( в нотации Грэхема): В системе находится m машин, работающих параллельно. Машины упорядочены. Каждая работа должна быть выполнена последовательно на всех машинах с первой по последнюю. |
Рассмотрим пример:
Допустим у нас работ и машин. В начальный момент времени мы можем начать обрабатывать любую работу на первом станке. В следующий момент на первом машине можно обрабатывать следующую работу, а на второй перейдёт предыдущая работа с перовой машины. И так далее. Таким образом на выполнение всех работ у нас уйдёт времени. Проиллюстрируем это диаграммой Гантта для случая : (по горизонтали время, по вертикали машины, в ячейке номер выполняемой работы)
0 1 2 3 4 5 6 7 8 9 10
-------------------------------------------
M_1 | 1 2 3 4 5 6 - - - -
M_2 | - 1 2 3 4 5 6 - - -
M_3 | - - 1 2 3 4 5 6 - -
M_4 | - - - 1 2 3 4 5 6 -
M_5 | - - - - 1 2 3 4 5 6
Заметим, что в данном случае может быть равно не только единице, но и константе.
Так же, поскольку работа заканчивает выполняться всегда на последней машине, то для решения задач с нас интересует порядок выполнения работ только на последнем машине.
Задачи с произвольно заданными временами выполнения работ почти все являются NP-полными и решаются приближённо в случае необходимости.
Это единственная из flow shop задач с произвольными временами выполнения работ, которая решается за полиномиальное время.
Приведём здесь решение задачи без доказательства, его можно посмотреть в [1].
Оптимальное расписание для первой и второй машины будет совпадать. Таким образом, нам требуется найти перестановку входных работ.
Алгоритм такой: возьмём два пустых списка. Будем рассматривать работы в порядке возрастания , то есть минимума из времён выполнения данной работы на первой и второй машине. Если у работы , то добавим её в конец первого списка. В противном случае добавим её в начало второго списка. Итоговое расписание это конкатенация первого и второго списков.
Псевдокод:
J - множество работ Head Tail while J do I работа с минимальным значением if Head Head I else Tail I Tail J J I Result Head Tail
Обратим внимание, что оптимальное решение задачи совпадает с решением задачи , приведённой выше.