Автор работы: Пользователь скрыл имя, 02 Ноября 2012 в 08:38, курсовая работа
При решении многомерных задач оптимизации предлагается совместное применение методов ветвей и границ и динамического программирования. На первом этапе задача решается методом динамического программирования отдельно по каждому из ограничений. Последовательности, полученные в результате решения функционального уравнения динамического программирования, в дальнейшем используется для оценки верхней (нижней) границы целевой функции. На втором этапе задача решается методом ветвей и границ. При использовании этого метода определяется способ разбиения всего множества допустимых вариантов на подмножества, то есть способ построения дерева возможных вариантов, и способ оценки верхней границы целевой функции.
Комплексное применение методов динамического программирования и ветвей и границ позволяет повысить эффективность решения дискретных задач оптимизации. При решении задач большой размерности с целью уменьшения членов оптимальной последовательности используются дополнительные условия отсечения.
ВВЕДЕНИЕ 3
1 ОПИСАНИЕ ЗАДАЧИ ЦЕЛОЧИСЛЕННОГО ПРОГРАММИРОВАНИЯ 4
2 МЕТОД ВЕТВЕЙ И ГРАНИЦ 5
2.1 Описание метода ветвей и границ 5
2.2 Алгоритм действия метода ветвей и границ 5
2.3 Общий алгоритм решения задач с помощью метода границ и ветвей, его суть 7
2.4 Пример использования метода ветвей и границ 8
3 ПРИМЕНЕНИЕ МЕТОДА ВЕТВЕЙ И ГРАНИЦ ДЛЯ РЕШЕНИЯ ЗАДАЧ РАЗЛИЧНОГО ТИПА 9
3.1 Применение метода ветвей и границ для задач календарного планирования 9
3.2 Задача коммивояжера 12
3.2.1 Формулировка задачи 12
3.2.2 Метод ветвей и границ 12
3.3 Применение метода ветвей и границ для задач календарного планирования 15
ЗАКЛЮЧЕНИЕ 19
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ 20
D(sk(1))=min D(sj(1)). (3.1.13)
Ветвление. Выбрав наиболее перспективный вариант последовательности sk(1), развивают его построением всех возможных подпоследовательностей длиной 2 с началом sk(1) вида sk+1(2)= (sk(1), j), где j не входит в sk.
Вычисление оценок производят в соответствии с соотношениями (3.1.6), (3.1.7), (3.1.8).
3)k-й шаг. Допустим, что уже проведено k шагов, в результате чего построены варианты s1(k), s2(k) ,…,sk(k), а именно подпоследовательности длиной k.
Выбираем самый перспективный вариант sS(k) такой, что
D(ss(k))=min D(sj(k)).
Множество Gs(k) разбиваем на (n — k) подмножеств, каждое из которых образуется добавлением к последовательности ss(k) некоторого элемента ik+1 такого, что ik+1 .
Оценка определяется в соответствии с соотношениями (3.1.6) — (3.1.9).
В результате строим дерево вариантов следующего вида: вершина О отвечает s = 0, вершины первого уровня G1(1), G2(1)..., Gn(1) соответствуют последовательностям длиной 1, т. е. s1(1) = 1, s2(1) = 2,..., sn(1) = п и т. д. Каждая конечная вершина отвечает последовательности максимальной длины n.
Признак оптимальности. Если sv(n) отвечает конечной вершине дерева, причем оценка наименьшая из оценок всех вершин, то sv(n) — искомый вариант.
3.2 Задача коммивояжера
3.2.1 Формулировка задачи
Задача коммивояжёра является одной
из самых известных задач
В этом случае, очевидно, что задача коммивояжера – это задача отыскания кратчайшего гамильтонова цикла в полном графе.
Можно предложить следующую простую схему решения задачи коммивояжера: сгенерировать все n! возможных перестановок вершин полного графа, подсчитать для каждой перестановки длину маршрута и выбрать кратчайший. Однако, n! с ростом n растет быстрее, чем любой полином от n, и даже быстрее, чем . Таким образом, решение задачи коммивояжера методом полного перебора оказывается практически неосуществимым, даже при достаточно небольших n.
Решить задачу коммивояжера также можно с помощью алгоритма Крускала и «деревянного» алгоритма. Эти методы ускоряют разработку алгоритма по сравнению с методом полного перебора, однако не всегда дают оптимальное решение.
Существует метод решения
3.2.2 Метод ветвей и границ
Решение задачи коммивояжера методом ветвей и границ по-другому называют алгоритмом Литтла.
Если считать города вершинами графа, а коммуникации (i,j) – его дугами, то требование нахождения минимального пути, проходящего один и только один раз через каждый город, и возвращения обратно, можно рассматривать как нахождение на графе гамильтонова контура минимальной длины.
Для практической реализации идеи метода ветвей и границ применительно к задаче коммивояжера нужно найти метод определения нижних границ подмножества и разбиения множества гамильтоновых контуров на подмножества (ветвление).
Опишем алгоритм Литтла для нахождения минимального гамильтонова контура для графа с n вершинами. Граф представляют в виде матрицы его дуг. Если между вершинами Xi и Xj нет дуги, то ставится символ «∞».
Алгоритм Литтла для решения задачи коммивояжера можно сформулировать в виде следующих правил:
1. Находим в каждой строке матрицы минимальный элемент и вычитаем его из всех элементов соответствующей строки. Получим матрицу, приведенную по строкам, с элементами
. (3.2.1)
2. Если в матрице , приведенной по строкам, окажутся столбцы, не содержащие нуля, то приводим ее по столбцам. Для этого в каждом столбце матрицы выбираем минимальный элемент , и вычитаем его из всех элементов соответствующего столбца. Получим матрицу
, (3.2.2)
каждая строка и столбец, которой содержит хотя бы один нуль. Такая матрица называется приведенной по строкам и столбцам.
3. Суммируем элементы и , получим константу приведения
, (3.2.3)
которая будет нижней границей множества всех допустимых гамильтоновых контуров, то есть
. (3.2.4)
4. Находим степени нулей для
приведенной по строкам и
. (3.2.5)
5. Выбираем дугу , для которой степень нулевого элемента достигает максимального значения
. (3.2.6)
6. Разбиваем множество всех
7. Приводим матрицу
. (3.2.7)
8. Находим множество
9. Делаем приведение матрицы гамильтоновых контуров . Пусть - константа ее приведения. Нижняя граница множества определится так:
. (3.2.8)
10. Сравниваем нижние границы
подмножества гамильтоновых
Процесс разбиения множеств на подмножества сопровождается построением дерева ветвлений.
11. Если в результате ветвлений получаем матрицу , то определяем полученный ветвлением гамильтонов контур и его длину.
12. Сравниваем длину гамильтонова
контура с нижними границами
оборванных ветвей. Если длина
контура не превышает их
3.3 Применение метода ветвей и границ для задач календарного планирования
Рассмотрим применение разновидности метода ветвей и границ — метода «последовательного конструирования и анализа вариантов» для решения задачи календарного планирования трех станков.
Заданы п деталей di (i = 1, 2, ..., n), последовательно обрабатываемых на трех станках R1, R2, R3, причем технологические маршруты всех деталей одинаковы. Обозначим ai ,bi ,ci — длительность обработки деталей di на первом, втором и третьем станках соответственно.
Определить такую очередность запуска деталей в обработку, при которой минимизируется суммарное время завершения всех работ Tц.
Можно показать, что в задаче трех станков очередность выполнения первых, вторых и третьих операций в оптимальном решении может быть одинаковой (для четырех станков это свойство уже не выполняется). Поэтому достаточно определить очередность запуска только на одном станке (например, третьем).
Обозначим sk = (i1, i2 , ..., ik) — некоторую последовательность очередности запуска длиной k (1 £ k £ п) и A (sk), В (sk), С (sk) — время окончания обработки последовательности деталей sk на первом, втором и третьем станках соответственно.
Необходимо найти такую
С(sопт) = min С (s).
s
Покажем, как можно рекуррентно вычислять A (sk), В (sk), С (sk). Пусть sk+1 = (sk ,ik+i), т. е. последовательность деталей sk+1 получена из деталей sk с добавлением еще одной детали ik+1. Тогда
A (sk+1) = A (sk)+ ,
В (sk+1) = max [A (sk+1); В (sk)] + ,
С (sk+1) = max [В (sk+1); С (sk)] +
Для задачи трех станков можно использовать следующее правило доминирования .
Если s — некоторая начальная последовательность, а — под последовательность образованная из s перестановкой некоторых символов, то вариант s доминирует над , когда выполняются следующие неравенства: А (s) £ А ( ), В (s) £ В ( ), С (s) £ С ( ), причем хотя бы одно из них выполняется как строгое неравенство.
Способ конструирования
Пусть имеется начальная
dC(s) = С(s) + , (3.3.1)
dB(s) = В (s) + + min cj , (3.3.2)
dA(s) = A (s) + + (3.3.3)
где J (s) — множество символов, образующих последовательность s.
За оценку критерия С (s) для варианта s можно принять величину
D(s) = max {dA(s), dB (s), dC (s)}. (3.3.4)
Тогда ход решения задачи трех станков можно представить следующей формальной схемой.
Нулевой шаг. Задание множества G(0), образуется всеми возможными последовательностями (s = 0).
Вычисление оценки для множества G0:
где D(0) = max {dA(0), dB (0), бC (0)},
; ; .
Первый шаг. Образование множеств G1(1) U G1(2) U... …G1(n).
Подмножество Gk определяется всеми последовательностями с началом ik(k — 1, ...,n ).
Вычисление оценок. Оценку для последовательности sk определяют из соотношения (3.3.4), т. е.
D(sk) = max {dA(sk), dB (sk), dC (sk)}; k = 1, n.
Выбор варианта для продолжения. Из всех подпоследовательностей, построенных на предыдущем шаге, выбирают наиболее перспективную последовательность sk с наименьшей оценкой, т. е.
D(sk(1))=min D(sj(1)).
Ветвление. Выбрав наиболее перспективный вариант последовательности sk(1), развивают его построением всех возможных подпоследовательностей длиной 2 с началом sk(1) вида sk+1(2)= (sk(1), j), где j не входит в sk.
Вычисление оценок производят в соответствии с соотношениями (3.3.1), (3.3.2), (3.3.3).
k - ш а г. Допустим, что уже проведено k шагов, в результате чего построены варианты s1(k), s2(k) ,…,svk(k), а именно подпоследовательности длиной k.
Выбираем самый перспективный вариант sS(k) такой, что D(ss(k))=min D(sj(k)).
Множество Gs(k) разбиваем на (п — k) подмножеств, каждое из которых образуется добавлением к последовательности ss(k) некоторого элемента ik+1 такого, что ik+1 .
Оценка определяется в соответствии с соотношениями (3.3.1) — (3.3.4).
В результате строим дерево вариантов следующего вида: вершина О отвечает s = 0, вершины первого уровня G1(1), G2(1)..., Gn(1) соответствуют последовательностям длиной 1, т. е. s1(1) = 1, s2(1) = 2,..., sn(1) = п и т. д. Каждая конечная вершина отвечает последовательности максимальной длины п.
Признак оптимальности. Если sv(n) отвечает конечной вершине дерева, причем оценка наименьшая из оценок всех вершин, то sv(n) — искомый вариант, иначе переходим к продолжению варианта с наименьшей оценкой.
Пример. Рассмотрим задачу трех станков, условия которой приведены в табл. 3.3.1:
Таблица 3.3.1
Длительность операций |
Деталь | ||||
1 |
2 |
3 |
4 |
5 | |
ai bi ci |
2 3 4 |
5 2 4 |
1 1 2 |
3 4 2 |
3 5 2 |
Нулевой шаг. s = 0.
dA(s =0)=A(0)+ + =0+14+3=17;
dB(s=0)=В(0)+ +mincj =0+15+2=17;
dC(s = 0) = С(0) + =14 .
Тогда ∆ (s = 0) = max {17, 17,14} = 17.
Первый шаг. Конструируем все возможные последовательности длиной 1
s1(1) = 1; s2(1) = 2; s3(1) = 3; s4(1) = 4; s5(1) = 5.
Находим dA(1) = A1 + + = 14 + 3 = 17;
dB(1)(s =0)=В1+ + =5+12+2=19;
dC(1) = С1 + = 9 + 10 = 19 .
Откуда ∆ (1) = max {17, 19, 19} = 19.
Аналогично определяем ∆ (2), ∆ (3), ∆ (4), ∆ (5).
Второй шаг. Среди множества подпоследовательностей длиной 1, s1(1) = 1, s2(1) = 2,..., s5(1) = 5 выбираем наиболее перспективную s = 1, для которой величина оценки-прогноза ∆ (s) оказывается наименьшей. Далее развиваем ее, конструируя возможные варианты длиной 2, т. е. (1.2), (1.3), (1.4), (1.5).
Для каждого из этих вариантов вновь определяем оценки по формулам (3.3.1) — (3.3.4).
Процесс вычислений продолжаем аналогично.
Процесс построения дерева вариантов приведен на схеме.
Каждой конечной вершине дерева вариантов будет отвечать полная последовательность s = i1,i2,,.in. Если для некоторой такой вершины величина оценки ∆ (s) не превосходит величины оценок для всех остальных вершин, то эта оценка определяет искомый оптимальный вариант. В противном случае разбиваем более перспективный вариант с наилучшей оценкой.
Информация о работе Анализ метода ветвей и границ в задачах линейного программирования