Открытие бизнеса

Использование алгоритма муравья для решения задачи коммивояжера. Задача джонсона из учебника х

Имеется деталей и два станка. Каждая деталь должна сначала пройти обработку на первом станке, затем — на втором. При этом -ая деталь обрабатывается на первом станке за времени, а на втором — за времени. Каждый станок в каждый момент времени может работать только с одной деталью.

Требуется составить такой порядок подачи деталей на станки, чтобы итоговое время обработки всех деталей было бы минимальным.

Эта задача называется иногда задачей двухпроцессорного обслуживания задач, или задачей Джонсона (по имени S.M. Johnson, который в 1954 г. предложил алгоритм для её решения).

Стоит отметить, что когда число станков больше двух, эта задача становится NP-полной (как доказал Гэри (Garey) в 1976 г.).

Построение алгоритма

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

Рассмотрим порядок подачи деталей на станки, совпадающий с их входным порядком: .

Обозначим через время простоя второго станка непосредственно перед обработкой -ой детали (после обработки -ой детали). Наша цель — минимизировать суммарный простой :

Для первой детали мы имеем:

Для второй — т.к. она становится готовой к отправке на второй станок в момент времени , а второй станок освобождается в момент времени , то имеем:

Третья деталь становится доступной для второго станка в момент , а станок освобождается в , поэтому:

Таким образом, общий вид для выглядит так:

Посчитаем теперь суммарный простой . Утверждается, что он имеет вид:

(В это можно убедиться по индукции, либо последовательно находя выражения для суммы первых двух, трёх, и т.д. .)

Воспользуемся теперь перестановочным приёмом : попробуем обменять какие-либо два соседних элемента и и посмотрим, как при этом изменится суммарный простой.

По виду функции выражений для понятно, что изменятся только и ; обозначим их новые значения через и .

Таким образом, чтобы деталь шла до детали , достаточно (хотя и не необходимо), чтобы:

(т.е. мы проигнорировали остальные, не изменившиеся, аргументы максимума в выражении для , получив тем самым достаточное, но не необходимое условие того, что старое меньше либо равно нового значения)

Отняв от обеих частей этого неравенства, получим:

или, избавляясь от отрицательных чисел, получаем:

Тем самым, мы получили компаратор : отсортировав детали по нему, мы, согласно приведённым выше выкладкам, придём к оптимальному порядку деталей, в котором нельзя переставить местами никакие две детали, улучшив итоговое время.

Впрочем, можно ещё больше упростить сортировку, если посмотреть на этот компаратор с другой стороны. Фактически он говорит нам о том, что если минимум из четырёх чисел достигается на элементе из массива , то соответствующая деталь должна идти раньше, а если на элементе из массива — то позже. Тем самым мы получаем другую форму алгоритма: отсортировать детали по минимуму из , и если у текущей детали минимум равен , то эту деталь надо обработать первой из оставшихся, иначе — последней из оставшихся.

Так или иначе, получается, что задача Джонсона с двумя станками сводится к сортировке деталей с определённой функцией сравнения элементов. Таким образом, асимптотика решения составляет .

Реализация

Реализуем второй вариант описанного выше алгоритма, когда детали сортируются по минимуму из , и затем отправляются в начало либо в конец текущего списка.

struct item { int a, b, id; bool operator< (item p) const { return min(a,b) < min(p.a ,p.b ) ; } } ; sort (v.begin () , v.end () ) ; vector< item> a, b; for (int i= 0 ; i< n; ++ i) (v[ i] .a <= v[ i] .b ? a : b) .push_back (v[ i] ) ; a.insert (a.end () , b.rbegin () , b.rend () ) ; int t1= 0 , t2= 0 ; for (int i= 0 ; i< n; ++ i) { t1 + = a[ i] .a ; t2 = max(t2,t1) + a[ i] .b ; }

Здесь все детали хранятся в виде структур , каждая из которых содержит значения и и исходный номер детали.

Задачи упорядочения в общем случае представляют собой задачи выбора порядка обслуживания, оптимизирующего какой-либо существенный показатель качества функционирования системы. К задачам упорядочения относятся, например, задачи выбора дисциплины обслуживания в системе массового обслуживания, задачи составления оптимальных расписаний и т.д.

В качестве примера простейшей задачи упорядочения рассмотрим так называемую задачу Беллмана-Джонсона n ×2.

Пусть на двух станках (А и В ) необходимо обработать n разных деталей с номерами. Пусть даны нормы времени a i и b i обработки детали i на станкахА и В соответственно и пусть задано, что маршрут обработки для всех деталей жесткий: c начало деталь обрабатывается на станке А, затем на станке В . При этом:

1) для каждой детали обработка на станкеВ может начинаться не раньше, чем окончится ее обработка на станке А ;

2) на каждом станке одновременно может обрабатываться не более одной детали;

3) начавшаяся операция не прерывается до полного ее завершения.

Пусть конкретные значения величин a i и b i для случая n = 5 следующие (табл.8.1).

Будем запускать детали в производство в порядке их номеров и определим при помощи линейных диаграмм (графика Ганта) общее время Т полной обработки всех деталей (рис.8.1).

Таблица 8.1

i a i b i

Рис.8.1 График Ганта обработки пяти деталей на двух станках

Как видно из графика, пока станок A будет обрабатывать первую деталь, станок B будет простаивать, причем величина простоя x 1 = a 1 = 4 . Так как a 1 + a 2 >x 1 + b 1 , то и во время обработки второй детали на станке Астанок В не будет загружен полностью. Время простоя x 2 = a 1 + a 2 – x 1 – b 1 = 4 + 30 - 4 – 1 = 29. Так как a 1 + а 2 + а 3 >x 1 + b 1 + x 2 + b 2 , то будет иметь место еще один простой станка В, причем x 3 = a 1 +a 2 +a 3 – x 1 – b 1 – x 2 – b 2 = 4 + 30 + 6 - 4 – 1 – 29 – 4 = 2. Так как a 1 + а 2 + а 3 + а 4 <x 1 + b 1 + x 2 + b 2 + x 3 + b 3 , то очередного возможного простоя станка В не будет, т.е. x 4 = 0. Аналогично получаем, что и x 5 = 0. Тогда общее время простоев станка В будет равно X = x 1 + x 2 + x 3 + x 4 + x 5 = 4 + 29 + 2 + 0 + 0 = 35, а общее время полной обработки всех деталей T = T B + X = b 1 + b 2 + b 3 + b 4 + b 5 + X = 1 + 4 + 30 + 5 + 3 + 35 = 43 + 35 + = 78.



Нетрудно заметить, что величина простоев X (и, следовательно, общее время Т) будет зависеть от последовательности, в которой детали обрабатываются. Например, если мы вместо последовательности 1-2-3-4-5 воспользуемся обратной последовательностью 5-4-3-2-1, то получим x 1 = 2, x 2 = 1, x 3 = 1, x 4 = x 5 = 0, откуда будет следовать, что X = 4 и T = 43 + 4 = 47. Как видим, получили существенный выигрыш: величина простоев станка В уменьшилась чуть ли не в 9 раз, а общее время обработки чуть ли не на 40 %.

2

Джонсон в 1963 г. предложил алгоритм построения оптимальной последовательности обработки для случая n деталей и двух станков с жесткими и одинаковыми маршрутами обработки, когда в качестве критерия оптимальности выбирается минимум общей продолжительности обработки, а начальные и конечные директивные сроки и таковы, что накладываемые этими сроками ограничения можно не учитывать.

АЛГОРИТМ ДЖОНСОНА

1. Найти наименьший элемент в таблице значений {a i ,b i }.

2. Если этот наименьший элемент принадлежит столбцу значений a i поставить на первое свободное место последовательности (в первый раз это будет первое место, во второй – второе и т.д.); если же наименьший элемент принадлежит столбцу значений b i , то деталь с соответствующим номером i поставить на последнее свободное место последовательности (в первый раз это будет n -е место, во второй – (n - 1) и т.д.); если одновременно найдется несколько одинаковых наименьших элементов, то среди них можно выбирать любой, принять за наименьший и поступать так, как описано в начале пункта 2 алгоритма.

3. Из таблицы значений {a i ,b i } вычеркнуть строку, соответствующую выбранному наименьшему элементу, и проверить, остались ли еще не вычеркнутые строки.

4. Если не вычеркнутые строки еще остались, то рассматривать их как новую таблицу значений {a i ,b i } и перейти к пункту 1 алгоритма; если вычеркнуты все строки таблицы, то это означает, что алгоритм свою работу закончил.

Применим алгоритм Джонсона к таблице примера, рассмотренного в первом параграфе данной главы.

1. Просматривая таблицу значений {a i ,b i } находим, что минимальным является b 1 =1.

2.Это означает, что деталь с номером i * = 1 в оптимальной последовательности должна быть последней, т.е. иметь номер i нов = n =5.

3. Вычеркиваем из таблицы первую строку.

4. Так как еще остались не вычеркнутые строки, то возвращаемся к первому пункту алгоритма Джонсона.

5. Находим, что минимальным элементом остаточной таблицы является a 5 = 2.

6. Ставим деталь с номером i * = 5 на первое место оптимальной последовательности, т.е. присваиваем номеру i * значение 1.

7. Вычеркиваем из таблицы пятую строку.

8. Так как еще остались не вычеркнутые строки, то опять возвращаемся к первому пункту алгоритма.

9. Находим, что минимальными являются a 4 = b 2 = 4.

10. Выбираем деталь, например, с номером i * = 4 и помещаем ее в первое свободное место оптимальной последовательности, т.е. присваиваем номеру i нов значение 2.

11. Вычеркиваем четвертую строку.

12. Возвращаемся к началу.

13. Находим, что (a i ,b i) = b 2 = 4.

14. Присваиваем детали с номером i * = 2 номер i нов = n – 1 = 4.

15. Вычеркиваем вторую строку.

16. Возвращаемся к таблице, содержащей еще одну строку. Конечно, для оставшейся не вычеркнутой детали осталось всего одно свободное место в оптимальной последовательности с номером i нов = 3, поэтому решение уже получено – оптимальная последовательность в прежних номерах деталей буде иметь вид 5,4,3,2,1. Это же решение мы получили бы, если бы продолжили алгоритм Джонсона до конца (что сделала бы ЭВМ, работая по программе, реализующей алгоритм Джонсона). Действительно, проверив оставшуюся строку, ЭВМ обнаружила бы, что min (a i ,b i) = a 3 = 6, и поместила бы деталь с номером i * = 3 в первое свободное место, т.е. присвоила бы ей номер 3. Вычеркнув третью строку таблицы, ЭВМ обнаружила бы, что не вычеркнутых строк больше не осталось, и вышла бы на конец алгоритма – печать результата и останов работы программы.

У читателя может возникнуть сомнение, правильно ли поступаем, когда, обнаружив два (или больше) одинаковых минимальных элемента, принадлежащих одному и тому же столбцу (например, столбцу А), мы выбираем в качестве первого любой из этих элементов, не обращая внимания на значение соответствующего ему элемента в другом столбце (например, в столбце В ).

На это сомнение можно ответить, что, согласно правилу Джонсона, в этом случае порядок следования (и, следовательно, порядок выбора деталей) безразличен, так как если min (a j +1,b j) = min (a j ,b j +1) = a j +1 = a j , то X (S ") = X (S ”) независимо от того, какое соотношение между b j и b j +1. Аналогично получаем, что при min (a j +1,b j) = min (a j ,b j +1) = b j = b j +1 будет иметь место X (S ’) = X (S ”) независимо от значений a j и a j +1.

Проиллюстрируем сказанное на примере задачи n × 2, заданной при помощи таблицы 8.2.

i a t bi
i a t b
i a t b
i a i b

Таблица 8.2 Таблица 8.3 Таблица 8.4 Таблица 8.5

Пользуясь алгоритмом Джонсона, мы можем получить оптимальные последовательности обработки, которым соответствуют табл. 8.3, 8.4 и 8.5.

Общая формула для расчета простоя

(8.1)

, (8.2)

где

Найдем для этих последовательностей

Для последовательности, соответствующей табл. 8.3:

X = max (8; 5; 7; 10;10) = 10.

Для последовательности, соответствующей табл. 8.4:

X = max (8; 7; 7; 10;10) = 10.

Для последовательности, соответствующей табл. 8.5:

X = max (6; 8; 7; 10;10) = 10.

Сумма простоев во всех трех последовательностях получилась одинаковой (Х = 10). Различие лишь в распределении простоев: в первом случае x 1 = 8, x 2 = 2; во втором x 1 = 8, x 2 = 2, в третьем x 1 = 6, x 2 = 2, x 4 = 2.

Это может быть учтено при планировании заполнения простоев фоновой работой.

Алгоритм Джонсона для задачи n × 2 может быть модифицирован и сведен к следующему:

1. Находим все детали, для которых a i ≤ b i и упорядочиваем их в порядке возрастания a i .

2. Оставшиеся детали, для которых a i >b i , упорядочиваем в порядке убывания b i .

3. Подписываем список деталей второй группы под списком деталей первой группы, т.е. обрабатываем сначала детали первой группы в порядке возрастания a i , затем детали второй группы в порядке убывания b i .

АЛГОРИТМ ДЖОНСОНА ДЛЯ РЕШЕНИЯ ЗАДАЧИ УПОРЯДОЧЕНИЯ n ×3

Рассмотрим задачу выбора оптимальной последовательности обработки n деталей на трех станках в случае, когда все детали имеют жесткий и одинаковый маршрут и выполняются те же специальные условия, которые были оговорены при постановке задачи упорядочения n × 2.

Обозначим станки черезА , В , С , нормы времени обработки детали i соответственно через a i , b i и c i , простои станка В через x i , станка С – через y i . График Ганта в этом случае будет иметь следующий вид (рис.8.2)

Рис.8.2 График Ганта для случая n × 3

Решение задачи n ´3 при выполнении условия сводится к решению задачи n ´2, если только интерпретировать:

· a i + b i = d i - как норму времени обработки детали i на некотором станке D i ,

· b i + c i = e i как норму времени обработки детали i на некотором станке E i .

Отсюда получаем следующий алгоритм решения задачи упорядочения при n ´3 в случае выполнения условия .

Алгоритм

1. Производим построчное сложение элементов первого и второго столбцов таблицы: d i = a i + b i .

2. Производим сложение второго и третьего столбцов таблицы: e i = b i + c i .

3. К новой таблице n ´2 применяем алгоритм Джонсона, используемый для задачи упорядочения n ´2.

Тема: Решение задачи упорядочения обработки n деталей на m cтанках (m =2 и m =3) с использованием алгоритма Джонсона

Задание 1. Решение задачи упорядочения с n деталями и 2-я станками

Изучить по изложенному выше теоретическому материалу:

· математическую модель задачи упорядочения n деталей на 2-х станках;

· вывод правила Джонсона для данной задачи;

· алгоритм Джонсона для данной задачи.

Пример 1.

i a i b i

Определим простой X последнего станка B по формуле:

,

где

Для этого определим значения функции K (1), K (2), K (3), K (4), K (5). Их удобно вычислять по рекуррентной формуле:

K (1) = a

K(i) =K(i –1) +a i b i - 1 ,i = 2,3,4,5 .

K (1) = 9, K (2) = 12, K (3) = 14, K (4) = 13, K (5) = 9. Найдем простой X 2-го станка, как максимум из полученных значений:

X = max (9,12,14,13,9) = 14.

Как видно из графика, время окончания обработки всех деталей на двух станках совпадает с расчетным и равно 34.

Используя алгоритм Джонсона, найдем оптимальную последовательность: 4, 5, 1, 2, 3. Преобразуем исходную таблицу в соответствии с найденной последовательностью

i опт a i b i

Как и для исходной последовательности, найдем прострой 2-го станка.

K (1) = 2,K (2) = K (1) + 3 - 7 = -2, K (3) = K (2) + 9 - 6 = 1,

K (4) = K (3) + 6 - 3 =4, K (5) =K (4) + 4 - 2 = 6 .

X = max (2, -2,1,4,6) = 6.

Построим график Ганта для оптимальной последовательности запуска деталей в обработку:

Как видно из графика, время окончания обработки всех деталей на двух станках для оптимальной последовательности совпадает с расчетным, и равно 26, что значительно лучше, чем это же время для исходной последовательности.

Варианты для задания №1


i a i b i
i a i b i
i a i b i

i a i b i
i a i b i
i a i b i
i a i b i
i a i b i
i a i b i
i a i b i
i a i b i
i a i b i
i a i b i
i a i b i
i a i b i

Задание 2 . Решение задачи упорядочения с n деталями и 3-я станками

1) математическую модель задачи упорядоченияn деталей на 3-х станках;

2) условие существования решения данной задачи и следствия из него;

3) вывод правила Джонсона для данной задачи;

4)алгоритм Джонсона для данной задачи.

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

i a i b i c i

Определим, удовлетворяют ли данные таблицы одному из условий:

Первое условие выполняется:
, поэтому можно свести данную задачу к задаче для двух некоторых станков D , E формулам d i . = a i + b i , e i = b i + с i:

I d i e i

Используя алгоритм Джонсона, определим оптимальную последовательность для полученной задачи: 4, 5, 3, 1, 2.

Теперь определим простои Y последнего станка C для исходной и оптимальной последовательностей. Для этого воспользуемся формулой

,

где
,

Для этого определим значения сумм функций

K (1) + H (1), K (2) + H (2), K (3) + H (3), K (4) + H (4), K (5) + H (5) .

Их удобно вычислять по рекуррентной формуле:

K (1) + H (1)=a 1 +b 1 ,

K (i ) + H (i ) = K (i -1) + H(i -1) +a i – b i-1 +b i – c i-1 ,i = 2,3,4,5 .

Используя эту формулу, получим:

K (1) + H (1) = 12,K (2) + H (2) = 13, K (3) + H (3) = 21, K (4) + H (4) = 20, K (5) + H (5) = 19.

Найдем простой Y 3-го станка, как максимум из полученных значений:

Y =max (12,13,21,20,19) = 21.

Время окончания обработки всех деталей на двух станках равно

Построим график Ганта для исходной последовательности:

Как видно из графика, время окончания обработки всех деталей на трех станках совпадает с расчетным и равно 54.

Используя найденную оптимальную последовательность: 4, 5, 3, 1, 2 из задачи для двух станков, переставим.

Преобразуем исходную таблицу в соответствии с найденной последовательностью

i опт a i b i c i

Здесь нумерация в таблице идет по порядку для удобства использования формул. Как и для исходной последовательности, найдем из таблицы прострой 3-го станка.

K (1) + H (1) = 11, K (2) +H (2) = 10, K (3) + H (3) = 7, K (4) + H (4) = 7,K (5) + H (5) = 8 .

Y= max(11,10,7,7,8) = 11.

Время окончания обработки всех деталей на двух станках в порядке оптимальной последовательности равно

Построим график Ганта для оптимальной последовательности:

Как видно из графика, время окончания обработки всех деталей на трех станках для оптимальной последовательности совпадает с расчетным и равно 44, что значительно лучше чем это же время для исходной последовательности.

Варианты для задания №2


i a i b i c i
i a i b i c i
i a i b i c i
i a i b i c i
i a i b i c i
i a i b i c i
i a i b i c i
i a i b i c i
i a i b i c i
i a i b i c i
i a i b i c i
i a i b i c i

i a i b i c i
i a i b i c i
i a i b i c i

i a i b i c i
i a i b i c i
i a i b i c i

Вопросы к лабораторной работе №1

1. Какие показатели производственного процесса можно выделить при решении задачи упорядочения?

2. В чем состоит задача упорядочения, исследованная Джонсоном (задача Джонсона)?

3. Что является целевой функцией (оптимизируемым показателем) и оптимизирующей переменной в задаче Джонсона?

4. Каким образом получается алгоритм Джонсона?

5. В чем суть алгоритма Джонсона?

6. Из каких величин состоит совокупная длительность производственного цикла (конечное время обработки последней детали на последнем станке)?

7. Как получить математическую модель задачи Джонсона для 2-х станков?

8. Как получить математическую модель задачи Джонсона для 3-х станков?

9. Какие имеются способы определения простоя 2-го станка в задаче Джонсона?

10. Какие имеются способы определения простоя 3-го станка в задаче Джонсона?

11. Каким образом решается задача Джонсона для 3-х станков?

Методические указания к лабораторной работе

алгоритм Джонсона

по курсу «ТЕОРИЯ информационныx систем»
для специальностей и направлений подготовки:

Специальности (направления)

Квалификация специалиста

Наименование

Наименование

Информационные системы

Бакалавр информационных систем

Информационные системы и технологии



УДК 774:002:006.354

Составители: О. Е. Александров.

Научный редактор: доц., канд. физ.-мат. наук О. Е. Александров

Алгоритм Джонсона: Методические указания к лабораторной работе / О. Е. Александров Екатеринбург: УГТУ-УПИ, 2010. 17 с.

Изложен алгоритм оптимизации последовательности операций и отыскания минимального времени простоя. Приведены задания для самостоятельного выполнения.

Библиогр. 0 назв. Рис. 3. Табл. 4. Прил. 1.

Подготовлено кафедрой «Информационные системы и технологии».

Методические указания обсуждены на заседании кафедры, протокол №__

Заведующий кафедрой ________________

© Уральский государственный технический университет, 2000


Содержание

Перечень условных обозначений символов, единиц и терминов 4

Введение 4

1. Задача упорядочения. алгоритм Джонсона 4

2. Задания для самостоятельного выполнения 14

Заключение 16

Список использованных источникоВ 17

Перечень условных обозначений символов, единиц и терминов

    суффикс «b» означает число, записанное по основанию 2 - двоичное число;

    суффикс «h» означает число, записанное по основанию 16 - шестнадцатиричное число;

    суффикс «.» означает число, записанное по основанию 10 - десятичное число;

N 1 ..N 2

    диапазон целых чисел от N 1 до N 2 ;

[X 1 ..X 2)

    интервал чисел от X 1 до X 2 , X 1 принадлежит интервалу, X 2 – не принадлежит;

Введение

Системы – сложные устройства со множеством внутренних связей-взаимодействий. Многие системы призваны выполнять некие последовательности операций, например, сборочное производство.

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

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

Ниже изложена простейшая теория и алгоритм Джонсона [ 1 ].

1. Задача упорядочения. алгоритм Джонсона

1.1. Постановка проблемы

Страстные любители зрелищ, мексиканцы охотно принимают ансамбли варьете, разъезжающие по провинциальным городам. И вот директор бродячей труппы «Алькасар» 1 при посещении каждого нового города сталкивается с проблемой, на решение которой он потратил несколько лет 2 .

В самом деле, различные города предоставляют не одни и те же удобства; иногда там имеются превосходные залы, благоустроенные авансцены и кулисы; но, увы, слишком часто они больше годятся для продолжительных представлений, чем для последовательности номеров, составляющих программу труппы «Алькасар».

Отсюда и получается, что хотя номера на сцене идут всегда одно и то же время, но подготовка их (одевание, гримировка) занимает довольно неустойчивое время, изменяясь вместе с удобствами театральных уборных. Однако директор труппы тем не менее желает представить свою программу за минимальное время, что сводится к минимизации общего времени ожидания между последовательными номерами (или, иначе, общего времени присутствия на сцене ведущего).

Чтобы упростить задачу, будем предполагать, что время, необходимое для смены дополнительных декораций, пренебрежимо мало, и будем представлять себе, что начало представления для всех: зрителей, актеров, вспомогательного персонала - одно и то же, т. е. что ни зал, ни сцену нельзя занимать до этого начала.

В городке Орисаба было подсчитано, сколько времени уходит на подготовку каждого номера и его выполнение на сцене (табл. 17.1). Мы видим, что руководитель труппы принял для представления на сцене в этом городе определенный порядок следования номеров.

Таблица 17.1.

программы

Время (в минутах)

Принятая

очередность

подготовка

выполнение

Так как количество номеров равно 8, то имеется 8! = 40 320 различных способов следования номеров в представлении; как выбрать тот, который будет отвечать определенному выше критерию?

Исследуем прежде всего, что произойдет, если мы выберем наугад какой-нибудь порядок следования, например: b, f, с, h, g, a, d, е . Рисунок 17.1, -а это не что иное, как диаграмма Ганта, - позволяет легко подсчитать время простоя. Первая линия диаграммы составлена отрезками, подогнанными, так сказать, впритык, длина которых пропорциональна времени соответствующей подготовки разных номеров, взятых в выбранном порядке.

Тогда вторая линия позволяет сравнительно просто определять начало и окончание номера на сцене, если заметить, что для представления номера на сцене необходимо закончить подготовку к нему и что для перехода к следующему номеру необходимо завершить проведение на сцене данного.

Третья линия изображает собою время простоя, получающееся в результате сравнения предыдущих двух линий.

В выбранном нами примере полное время простоя достигает 31 минуты.

1.2. Описание идеи алгоритма Джонсона

Зато время простоя, которое соответствует очередности е, h, a, g, f, с, d, b (рис. 17.2), составляет лишь 13 мин., из них 12 перед началом представления. Выигрыш довольно значителен; поэтому имеет смысл познакомиться с алгоритмом Джонсона, который позволил получить его:

1) Изучается таблица количеств времени, необходимых для выполнения двух операций (подготовки номера и его проведения на сцене), и наименьшее из них отмечается; в данном случае это 8 минут - время проведения на сцене номера b .

2) Если это значение относится к операции первого типа (подготовка), то принимается решение начинать с соответственной операции; если, наоборот, оно относится к операции второго типа (проведение на сцене), то принимается решение оканчивать соответственной операцией. В данном случае речь идет о проведении номера на сцене; таким образом, номер b будет завершать представление.

3) Строка, относящаяся к только что сделанному распределению, вычеркивается из таблицы времен, и к оставшимся значениям вновь применяются пункты 1), 2), 3).

Таблица 17.2.

Место в последовательности

Номера итераций вычисления

Пример. Если из таблицы 17.1 вычеркнуть строку b , то наименьшее имеющееся время будет равно 10 минутам, оно соответствует номеру d и проведению на сцене; значит, номер d будет завершать номера, еще подлежащие распределению: он будет непосредственно предшествовать номеру b , назначенному ранее.

Вычеркнув из таблицы строки b и d , распределим с (11 минут, сцена), аналогично: f (12 минут, сцена), е (12 минут, подготовка), h (15 минут, подготовка), а (20 минут, подготовка) и, наконец, g (20 минут, сцена).

Таблица 17.2 показывает порядок очередности, полученный в процессе последовательных итераций. Варианты, которые имеют место (е можно распределить на четвертой итерации, а f - на пятой; а - на последней, a g - на предпоследней), ничего не меняют в конечном результате: время простоя - по-прежнему 13 минут.

Несколько дней спустя труппа «Алькасар» оказывается в Веракрусе; устройство зала, снятого директором труппы, позволяет сократить время на подготовку, но в то же время члены труппы, исполняющие номера b и h , изменили время своего пребывания на сцене (табл. 17.3).

Таблица 17.3.

программы

Время (в минутах)

подготовка

выполнение

Применение алгоритма Джонсона дает в результате следующую очередность: d, е, b, h, a, g, f, с, которая, согласно рис. 17.3, дает время простоя в 17 мин.

Но в один прекрасный вечер одна из гримировщиц оказывается больна; нет ни возможности заменить ее, ни времени, чтобы исправить афишу. В этих условиях (табл. 17.4) время простоя увеличивается и достигает 25 мин. По своему обыкновению, директор, узнав, что гримировщица выбывает из коллектива дней на восемь, принимается за задачу минимизации. Тогда он пришел к результату, изображенному на рис. 17.5, с временем простоя в 24 мин., что не очень блестяще, но тем не менее дает некоторое улучшение.

Таблица 17.4.

программы

Время (в минутах)

подготовка

выполнение

Браво, директор «Алькасара»!

1.2. Алгоритм Джонсона

Алгоритм Джонсона, который мы использовали выше, позволяет, таким образом, решать задачу установления очередности работ, выполняемых в два последовательных этапа; в некоторых случаях его даже можно распространить на трехэтапные, но не выше. Тем не менее он, как мы видели, весьма полезен.

Сейчас мы познакомимся с некоторыми случаями его применения к производственным процессам.

На рис. 17.6 схематически изображен процесс обработки, состоящий из расточки (машина А ) и последующей чистовой обработки (машина В ), которой подвергаются n различных деталей, поступающих в произвольном порядке для ремонта.

Время, идущее на каждую операцию, распределено очень неравномерно: обозначим через A i и B i время обработки i-й детали соответственно на машинах A и В .

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

p 1 , p 2 , ..., p i , ..., p n ,

который соответствовал бы наименее продолжительному полному ожиданию в промежутках между чистовой обработкой детали p j и детали p j+ 1 , причем сумма берется по последовательным значениям j .

Обозначим через T полное время, которое пройдет от начала расточки первой детали до конца чистовой обработки последней; пусть Х i есть время простоя между концом выполнения работы p i - 1 на машине В и началом работы p i на той же самой машине. Имеем (рис. 17.7)

и так как
известна, то надлежит минимизировать

Из рис. 17.7 можно еще усмотреть, что Х 1 = А 1 и

Следовательно, будет отыскиваться такое Х 2 , чтобы

Исследуем теперь сумму Х 1 + Х 2 ; имеем

Х 1 + Х 2 = Х 1 + max (A 1 + A 2 B 1 X 1 ;0 ) =

= max (A 1 + A 2 – B 1 ;X 1) =

= max (A 1 + A 2 – B 1 ;A 1)=

Аналогично,

Эта формула легко распространяется на n временных промежутков X i для некоторого порядка следования S деталей p i

ее можно записать еще лаконичнее:

Это означает, что берется максимум разностей, получаемых при каждом значении r , по всем r от 1 до n .

Таким образом, можно положить

Пусть теперь имеется порядок (S 1)

(S 1) = (p 1 , p 2 , p 3 , ..., p k- 1 , p k , p k +1 , p k+2 , …, p n )

и порядок (S 2 ), полученный из (S 1) перестановкой k -го и (k +1)-го элементов

(S 2 ) = (p 1 , p 2 , p 3 , ..., p k- 1 , p k+ 1 , p k , p k+2 , …, p n ).

Значения и , получаемые для порядков следования (S 1) и (S 2), одинаковы при всех r, кроме, может быть, r= k и r= k + 1.

    Стало быть, мы имеем

то какой-то из двух порядков следования (S 1) и (S 2) предпочтительнее. Порядок (S 1), в котором k+ 1 следует за k , будет лучше, чем (S 2), в котором k+ 1 предшествует k , если

Поэтому можно записать

Соотношение (1) при этих условиях принимает следующий вид:

Min (A k+ 1 ; B k ) < - min (A k ; B k+ 1)

или иначе

min (A k ; B k+ 1) < min (A k+ 1 ; B k ). (2)

Отсюда следует, что порядок (…, p k , p k+ 1 , …) предпочтительнее порядка (…, p k+ 1 , p k , …), если

min (A k ; B k+ 1) < min (A k+ 1 ; B k ).

Рассмотрим тогда порядок

(S′ ) = (... , p k , p l , ... ),

которого всегда можно достичь перестановками. Менять местами элементы p k и p l не нужно, если

min (A k ; B l) ≤ min (A l ; B k ); (3)

последнее выполняется, если A k не превосходит B l , A l , B k

min (A k ; B k ) ≤ min (A l ; B l).

Следовательно, если в таблице времен можно найти время, не превосходящее всех прочих A l или B l , то искомый порядок должен будет начинаться с p k , если время A k , будучи по-прежнему наименьшим, равно некоторым другим A l или B l , искомый порядок можно будет начинать также с p k .

Соотношение (3) выполняется еще в том случае, когда B l не превосходит A k , A l , B k , что можно также записать в виде

min (A l ; B l) ≤ min (A k ; B k ).

Следовательно, если в таблице времен можно отыскать время B l , не превосходящее всех прочих A k или B k , то искомый порядок должен завершаться элементом p l ; если время B l , будучи по-прежнему наименьшим, равно некоторым другим A k или B k , искомый порядок можно с таким же правом завершать элементом p l .

Легко заметить, что определение порядка следования можно тогда осуществлять по шагам согласно алгоритму Джонсона.

Обобщение на трехэтапные работы. Алгоритм Джонсона применим для последовательности n работ, подлежащих выполнению в таком порядке: А , В и С , в двух нижеследующих случаях:

min A i ≥ max B i или min C i ≥ max B i .

Тогда осуществляется поиск оптимальных сроков по суммам

A i + B i и B i + C i .

Пример. Пусть операции над деталями p 1 , ..., p 5 заданы сроками выполнения

A i , B i , C i ;

условие min A i = 6 ≥ rnax B i = 6, например, выполняется. Таким образом, мы имеем две таблицы:

Расточка

(A i )

Фрезеровка

(B i )

Чистовая обработка

(C i )


A i + B i

B i + C i


и алгоритм Джонсона позволяет выбрать

S = (p 4 , p 2 , p 3 , p 1 , p 5)

S = (p 4 , p 2 , p 1 , p 3 , p 5).

2. Задания для самостоятельного выполнения

2.1. Общие замечания

Задание лабораторной работы выполняется индивидуально. Варианты помеченные звездочкой имеют повышенную сложность и могут выполняться группой до 2-х человек.

Варианты помеченные звездочкой дают право на освобождение от экзамена (при полном выполнении) или на освобождение от одного вопроса на экзамене (при частичном выполнении). Уровень  полное/частичное выполнение  определяет преподаватель.

Для выполнения лабораторной работы вам необходимо:

    Ознакомиться с теорией главы 1.

    Ознакомиться с приложенной программой-решением задачи Форда-Фалкерсона.

    Выполнить задание к лабораторной работе.

    Написать и сдать отчет.

2.2. Варианты заданий

Вариант 1 (стандартный)

Опираясь на пример решения задачи Джонсона в прилагаемой программе, обобщить это решение на случай трехэтапных операций.

    Классифицировать данную систему в соответствии с теорией систем (курсом лекций).

    Указать для данной системы: множество входов, множество выходов, множество глобальных состояний.

    Записать реакцию системы (либо выходную функцию).

Вариант 2 *

    Разработать и описать комбинированный алгоритм (Фаулкс+Джонсон) по выбору допустимой последовательности операций и оптимизации этой ДОПУСТИМОЙ последовательности по времени.

    Создать автоматизированную систему (программу) вычисления по предложенному алгоритму.

ВНИМАНИЕ!!! Самодельные реализации принимаются только в MathCAD.

1.2. Оформление результатов работы

Вы должны представить письменный отчет (один на группу) по выполненной работе (1020 страниц, не считая листингов программы - листинги рекомендуется не печатать) и работоспособный код программы. Отчет должен быть оформлен в соответствии со стандартом [ 2 ].

Отчет должен состоять из следующих частей:

    титульный лист;

    введение;

    основная часть (может состоять из нескольких глав);

    заключение;

    список использованных источников.

Отчет должен содержать:

    краткий обзор математических алгоритмов сжатия информации, при-вет-ству-ется описание алгоритмов не упомянутых в данных методических указаниях;

    описание проблем, с которыми вы столкнулись при написании программы, и их решений;

    подробное описание вашего кода и наиболее интересных решений, использованных в нем;

    описание результатов сравнения эффективности работы вашего и предоставленного вам готового кода.

Работоспособный код вашей программы представляется в виде исходного файла (файлов) программы на дискете. Распечатывать полный листинг не нужно.

1.4. Прием зачета по результатам работы

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

    Знание основ теории.

    Знание устройства и взаимодействия частей представленного и/или своего кода программы.

    Умение компилировать код и запускать программу.

    Умение модифицировать свой код программы и способность объяснить назначение (функции) отдельных частей кода программы.

    Умение интерпретировать результаты сравнения работы своего и предоставленного вам готового кода.

Заключение

В результате выполнения этой работы:

    Вы сможете лучше понять что такое упорядочение операций.

    Ознакомитесь с примерами методов оптимизации порядка выполнения операций.

    Получите практический навык использования алгоритма L;jycjyf.

    Алгоритм Беллмана-Форда. Алгоритм Флойда. Топологическая сортировка. Сильно... . Потоки в сетях. Метод Форда-Уоршола. Алгоритм Джонсона для разреженных графов. Метаэвристики в примерах...

  1. Алгоритмы построения расписаний для одноприборных систем входящих в состав систем реального времени

    Документ

    Функции становится единственно значимым. В алгоритмах «упаковки» и алгоритмах сочетающих жадные стратегии и стратегии... М., Джонсон Д. Вычислительные машины и трудно решаемые задачи. - М.: Мир, 1982. Костенко В.А., Гурьянов Е.С. Алгоритм построения...

  2. Основная образовательная программа (100)

    Основная образовательная программа

    Задача «Максимальная выполнимость» Вероятностный алгоритм Джонсона . Дерандомизация. Алгоритм Гоеманса-Вильямсона. 3.11. Решение... (r|p)-центроиде. 13. Рандомизированные алгоритмы

В задаче Джонсона общее время производственного цикла зависит от порядка запуска деталей в обработку. Пусть имеется n деталей, каждая из которых должна последовательно пройти обработку сначала на первом, затем на втором станке. Предполагается заданным время t ij обработки i -й детали на j -м станке (i=1,2,...,n; j=1,2). Требуется определить такой порядок запуска деталей, при котором общая длительность их обработки на обоих станках будет минимальной.

Назначение сервиса . С помощью онлайн калькулятора можно решить задачу Джонсона для частного варианта ее постановки, когда число станков n=2 . При этом рассчитывается длительность совокупного производственного цикла для найденной оптимальной очередности запуска деталей в обработку. Результаты вычислений оформляются в отчете формата Word (Пример оформления).

ИНСТРУКЦИЯ . Для решения задачи необходимо задать количество деталей (строк).

Количество строк

Вставьте данные из Excel (A - первый столбец,B - второй столбец), нажмите Далее.

Правило Джонсона

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

Алгоритм Джонсона

  1. В обработку сначала запускают детали, требующие минимальное время обработки на первом станке в порядке возрастания этого времени.
  2. В обработку запускаются сначала детали, требующие максимальное время обработки на последнем станке в порядке убывания этого времени.
  3. В обработку запускаются сначала детали, у которых “узкое место” находится дальше от начала процесса обработки (“узким местом” для данной детали называется станок, на котором обработка этой деталей занимает наибольшее время).
  4. Обрабатываются вначале детали, у которых суммарное время обработки на всех станках максимальное в порядке убывания этого времени.