Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Текст1.doc
Скачиваний:
4
Добавлен:
14.04.2019
Размер:
223.74 Кб
Скачать

§3. Задача двух станков.

Постановка задачи. Имеется n деталей и два станка. Каждая деталь сначала обрабатывается на первом станке (станок 1), а затем – на втором (станок 2). Станки включаются одновременно. Для каждой детали известно время обработки как на станке 1, так и на станке 2. В какой последовательности надо запустить детали на обработку, чтобы общее время обработки всех деталей было минимальным?

Решение задачи. Введем обозначения. Пронумеруем детали, множество номеров обозначим через I = {1, 2,…, n}. Момент включения обоих станков – через t = 0. Время обработки детали на станках 1 и 2 – через ai и bi соответственно.

Задачу решим методом динамического программирования. Первый этап метода – погружение задачи в семейство аналогичных задач.

Для построения семейства будем рассуждать следующим образом. Из партии I удалим k любых деталей с номерами i1, i2,…, ik. Рассмотрим остальные деталей. Пусть Ik = I \ {i1, i2,…, ik} – множество номеров оставшихся деталей. Каждая деталь i с номером из Ik обрабатывается сначала на станке 1, а затем на станке 2. Станок 1 включается в момент времени t = 0, а станок 2 – через y ед. времени после станка 1.

Если Ik = I и y = 0, то получим исходную задачу.

Введем функцию Беллмана – оптимальное (минимальное) время обработки (n - k) деталей с номерами из Ik, если станок 2 включается через y ед. времени после станка 1. Обозначим ее

Bn-k(i1, i2,…, iky) (3.1)

Перейдем ко второму этапу метода динамического программирования – составлению уравнения Беллмана. Используем при этом принцип оптимальности. Рассуждаем следующим образом. Из множества деталей с номерами из Ik возьмем произвольную деталь i и первой запустим на обработку.

Станок 1 включился в момент t = 0, а значит, в момент t = ai он закончит обработку детали i и освободится. Деталь i уйдет на обработку на станок 2.

Станок 2 включился в момент t = y, а значит, время окончания обработки детали i на этом станке зависит от соотношения между ai и y:

если y ai (станок 2 включился, а станок 1 еще обрабатывает деталь i), то в момент t = ai деталь i начнет обрабатываться на станке 2, а в момент t = ai + bi обработка детали i на обоих станках закончится;

если y > ai (станок 1 освободился, а станок 2 еще не включен, деталь i ждет момента включения), то деталь i начнет обрабатываться на станке 2 в момент t = y, а в момент t = y + bi обработка детали i на обоих станках закончится.

Итак, момент освобождения станка 2 равен

(3.2)

Далее будут обрабатываться детали с номерами из множества . Для них станок 1 включается в момент t = ai, станок 2 – в момент, который определяется согласно (3.2), т.е. через bi ед. времени после станка 1, если y ai , или через ((yai) + bi) ед. времени, если y > ai. Обозначим через ti промежуток времени между моментами включения станка 1 и станка 2 для обработки деталей с номерами из множества Ik \ {i}. Тогда

ti = bi + max {0; yai} (3.3)

Следуя принципу оптимальности, будем считать, что детали с номерами из множества Ik \ {i} обработаны за минимальное время. Это время согласно определения функции Беллмана (3.1) равно Bn-k-1(i1, i2,…, ik, iti ).

Таким образом, время обработки всех деталей с номерами из Ik, если первой на обработку деталь i, равно

ai + Bn-k-1(i1, i2,…, ik, iti ). (3.4)

Деталь i для обработки первой была взята произвольно. Поэтому необходимо подсчитать число вида (3.4) для каждой детали из Ik . Минимальное из этих чисел и будет число (3.1), т.е.

Bn-k(i1, i2,…, iky) = min ;\s\do9(i ( Ik { ai + Bn-k-1(i1, i2,…, ik, iti )} (3.5)

Уравнение Беллмана получено. Оно является рекуррентным относительно аргумента k. Начальные условия для его решения получим, если в (3.5) положим . Другими словами, из партии I удалим все детали, кроме одной: . Тогда имеем:

B1(1,…, i 1 , i + 1,…, ny) = (3.6)

Третий этап метода динамического программирования – решение уравнения (5) с начальными условиями (3.6).

Оказалось, что для данной задачи хороший алгоритм решения получается после анализа уравнения (3.5). Рассмотрим оптимальное время обработки всех деталей с номерами из I, если станок 2 включается после станка 1 через y ед. времени, т.е. { i1, i2,…, ik } = , Ik = I. Согласно введенной функции Беллмана (3.1) это оптимальное время обозначается как Bn( y). Впредь знак пустого множества будем опускать. Итак, Bn(y) – минимальное время обработки всех n деталей, если станок 2 включается через y ед. времени после станка 1. Из уравнения (3.5) при k = 0 получаем

Bn(y) = min ;\s\do9(i ( I{ai + Bn-1(iti) }, (3.7)

где ti определено согласно (3.3).

Определим Bn-1(iti). В этом случае k = 1, I1 = I \ {i}. Из уравнения (3.5) при k = 1, y = ti получаем

Bn-1(iti) = min ;\s\do9(j ( I1))\b\bc\{( aj + Bn-2(i (3.8)

где tij, определенное согласно (3.3), равно

tij = bj + (3.9)

Подставим (3.8) в (3.7):

(3.10)

Число

ai + aj + Bn-2(i, jy) – (3.11)

есть время обработки всех деталей, если первой обрабатывается деталь i, затем деталь j, а остальные n  2 деталей обрабатываются в оптимальной последовательности.

Поменяем порядок обработки деталей i и j. Рассуждая аналогично, получим значение

Bn(y) = min;\s\do9(j ( I)) \b\bc\{( \o(min;\s\do9(i ( I1))\b\bc\{(aj + ai + Bn-2 (j, (3.12)

где I1 = I \ {j}, и число

aj + ai + Bn-2 (j, i tji) (3.13)

есть время обработки всех деталей, если первой обрабатывается деталь j, затем деталь i, а остальные (n  2) деталей обрабатываются в оптимальной последовательности. Здесь число tji и промежуточное число tj согласно (3.3) равны

tj = , .

Сравнение (3.10) и (3.12) приводит к сравнению (3.11) и (3.13). Соотношение между последними зависит от значений функции для различных значений аргумента y, когда I2 = I \ {i, j}. Очевидно, что минимальное время обработки при заданном множестве I2 не может быть уменьшено за счет увеличения переменной y, т.е. функция по переменной y является неубывающей. Таким образом,

если tijtji, то  ,

если tijtji, то  .

Теперь можно сделать вывод относительно значений функции :

если tijtji, то  . (3.14)

Итак, если tijtji, то в оптимальной последовательности запуска деталей на обработку деталь i предшествует детали j, в противном случае сначала нужно обработать деталь j, а затем деталь i.

Определим деталь, с которой надо начать оптимальную последовательность, и деталь, которой она заканчивается. Положим y = 0 в (3.10) и (3.12) (станки включаются одновременно). Найдем соответствующие ti , tj , tij , tji :

ti = = bi,

== (3.15)

tj = = bj,

== (3.16)

Значение зависит от чисел tij и tji , определенных согласно (3.15) и (3.16), при этом надо найти из них наименьшее.

Рассмотрим два следующих случая.

  1. Пусть – минимальное число из всех чисел ai, bi, i = 1. Положим в соотношениях (3.15) i = . Найдем и для всех j = 1, j  , и сравним их. Так как , то согласно (3.16) имеем

= =  bj .

Согласно (3.15)

= =

а) если , то = bj  .

б) если , то =  = .

В любом случае  для всех j = 1, j  . Следовательно, , что означает, что деталь с номером должна обрабатываться первой среди всех.

2) Пусть – минимальное число из всех чисел ai, bi, i = 1. Положим в соотношениях (3.15) j = . Найдем и для всех i = 1, i  , и сравним их. Так как , то согласно (3.16) имеем

= bi .

Согласно (3.15)

=

а) если , то =  bi = ,

б) если , то = =  bi = .

В любом случае  для всех i = 1, i  . Следовательно, , что означает, что деталь с номером должна обрабатываться последней из всех.

Алгоритм решения. Исходные данные занесем в таблицу 3.1:

Таблица 3.1.

Номер

детали

1

2

n

Время обработки

на станке 1

а1

а2

an

Время обработки

на станке 2

b1

b2

  1. Среди всех чисел а1, а2,…, an, b1, b2,…, bn найдем наименьшее.

  2. Если минимум равен , то деталь с номером в искомой последовательности будет первой. Из таблицы удаляем столбец .

  3. Если минимум равен , то деталь с номером в искомой последовательности будет последней. Из таблицы удаляем столбец .

  4. На усеченной таблице повторяем пункты 1-3.

Замечание. Если в ходе реализации алгоритма минимум определяется неоднозначно, причем = , то безразлично первой или последней пойдет на обработку деталь . Будем для определенности считать, что первой.

Пример. Пусть имеется 8 деталей, исходные данные для которых приведены в таблице 2.

Таблица 3.2.

Номер

детали

1

2

3

4

5

6

7

8

Время обработки

на станке 1

5

6

3

4

3

1

2

4

Время обработки

на станке 2

5

8

5

3

2

2

4

5

0. Искомую последовательность запишем в виде (х, х, х, х, х, х, х, х)

1. Первый минимум равен a6 = 1. Первой на обработку пойдет деталь №6: (№6, х, х, х, х, х, х, х). Вычеркиваем столбец 6.

2. Среди оставшихся чисел минимальным являются a7 = b5 = 2. Следовательно, второй (после детали №6) на обработку пойдет деталь №7, а последней в оптимальной последовательности будет деталь №5: (№6, №7, х, х, х, х, х, №5). Вычеркиваем столбцы 5 и 7.

3. Третий минимум равен 3 = a3 = b4 . Значит, третьей на обработку пойдет деталь №3, а предпоследней – деталь №4: (№6, №7, №3, х, х, х, №4, №5). Вычеркиваем столбцы 3 и 4.

4. В оставшейся таблице из трех столбцов минимальным числом является a8 = 4, поэтому деталь №8 будет первой среди оставшихся: (№6, №7, №3, №8, х, х, №4, №5). Вычеркиваем столбец 8.

5. Остались не вычеркнутыми столбцы 1 и 2. Минимум равен a1 = b1 = 5. Согласно замечанию деталь №1 отправим на обработку перед деталью №2: (№6, №7, №3, №8, №1, №2, №4, №5).

Оптимальное время обработки всех деталей не изменится, если деталь №2 пойдет на обработку раньше детали №1: (№6, №7, №3, №8, №2, №1, №4, №5)

Найдем оптимальное время. Построим диаграмму, соответствующую процессу обработки деталей в указанной последовательности. Из диаграммы видно, что детали будут обработаны за 33 единицы времени.

 

станок1

6

7

 

 

3

 

 

8

 

 

 

 

2

 

 

 

 

1

 

 

 

 

4

 

 

 

5

 

 

станок2

 

6

 

 

7

 

 

 

 

3

 

 

 

 

8

 

 

 

 

2

 

 

 

 

1

 

 

 

 

4

 

 

5

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

время

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

12