Flow shop — различия между версиями
м (грамматика) |
м (G/) |
||
Строка 6: | Строка 6: | ||
Рассмотрим пример: <tex>F \mid p_{ij} = 1 \mid C_{max}</tex> | Рассмотрим пример: <tex>F \mid p_{ij} = 1 \mid C_{max}</tex> | ||
− | Допустим, у нас <tex>n</tex> работ и <tex>m</tex> машин. В начальный момент времени мы можем начать обрабатывать любую работу на первой машине. В следующий момент на | + | Допустим, у нас <tex>n</tex> работ и <tex>m</tex> машин. В начальный момент времени мы можем начать обрабатывать любую работу на первой машине. В следующий момент на первой машине можно обрабатывать следующую работу, а на второй перейдёт предыдущая работа с первой машины, и так далее. Таким образом, на выполнение всех работ у нас уйдёт <tex>n + m - 1</tex> единиц времени. Проиллюстрируем это диаграммой Ганта для случая <tex>n = 6, m = 5</tex>: (по горизонтали время, по вертикали машины, в ячейке — номер выполняемой работы) |
'''0 1 2 3 4 5 6 7 8 9 10''' | '''0 1 2 3 4 5 6 7 8 9 10''' | ||
------------------------------------------- | ------------------------------------------- | ||
Строка 29: | Строка 29: | ||
Оптимальное расписание для первой и второй машины будет совпадать. Таким образом, нам требуется найти перестановку входных работ. | Оптимальное расписание для первой и второй машины будет совпадать. Таким образом, нам требуется найти перестановку входных работ. | ||
− | Алгоритм такой: возьмём два пустых списка. Будем рассматривать работы в порядке возрастания <tex>min(p_1, p_2)</tex>, то есть минимума из времён выполнения данной работы на первой и второй машине. Если у работы <tex>p_1 <= p_2</tex>, то добавим её в конец первого списка. В противном случае добавим её в начало второго списка. Итоговое расписание это конкатенация первого и второго списков. | + | Алгоритм такой: возьмём два пустых списка. Будем рассматривать работы в порядке возрастания <tex>min(p_1, p_2)</tex>, то есть, минимума из времён выполнения данной работы на первой и второй машине. Если у работы <tex>p_1 <= p_2</tex>, то добавим её в конец первого списка. В противном случае, добавим её в начало второго списка. Итоговое расписание — это конкатенация первого и второго списков. |
Псевдокод: | Псевдокод: |
Версия 11:14, 22 июня 2012
Дадим определение этого типа задач:
Определение: |
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 - множество работ HeadTail while J do I работа с минимальным значением if Head Head I else Tail I Tail J J I Result Head Tail
Обратим внимание, что оптимальное решение задачи
совпадает с решением задачи , приведённой выше.