Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Voprosy_k_ekzamenu_2012_metody_optimizatsii_1.doc
Скачиваний:
9
Добавлен:
21.09.2019
Размер:
12.78 Mб
Скачать

32.Алгоритм решения задачи дискретного программирования методом ветвей и границ на примере решения задачи коммивояжера.

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

Суть метода пусть имеется множество Л, содеражащее бесконечное множество допустимых решений задачи. Разбиваем множество на 2 подмножества по определенному правилу, к-е формируются в зависимости от условий конкретной задачи. Затем для Л1 и Л2 вычисляется оценка по правилу определяющему условию задачи. Для дальнейшего ветвления выбирается то подможество, оценка к-го меньше ветвления. Это продолжается до нахождения оптимума.

Постановка задачи дискретного программирования.

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

Алгоритм решения методом ветвей и границ:

1.Указать правило разбиения Л и осуществить начальные разложения

2.Указать правило вычисления оценки подмножеств

3.Учесть, что для дальнейшего ветвления выбирается подмножество с наименьшей оценкой.

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

Вычисляем наименьшее значение столбца.

В результате получаем приведенную матрицу Л0.

Просматриваем все нулевые элементы приведенной матрицы с целью выбора такой дуги, к-я обеспечит наибольшее уменьшение длины.

  1. Задача о кратчайшем пути на графе, алгоритм Форда (Дейкстры).

Рассмотрим взвешенный граф G{V,U) без петель и контуров, любой дуге Uij = (i,j)  U которого поставлено в соответствие число 1ij, называемое длиной (в общем случае, весом). Если граф содержит ребра, то любое из них можно заменить на пару противо­положно ориентированных дуг с той же длиной. Требуется найти пути из выделенной вершины ко е V во все остальные вершины графа, длина (или суммарный вес) каждого из которых минимальна.

Пусть для любой вершины Vi V графа G{V,U) элементы I’(i).v’(i) означают длину и предпоследнюю вершину кратчайшего пути из источника I в вершину Vi, а элементы I(i), v(i) - длину и предпо­следнюю вершину некоторого (не обязательно кратчайшего) тли. Пару (I(i), v(i)) назовем временной меткой, а пару (I’(i).v’(i)) - по­стоянной меткой. Обозначим через R множество помеченных вер­шин. Алгоритм Дийкстры заключается в том. что на любой итерации одна очередная вершина Vi присоединяется к множеству помечен­ных вершин R и получает постоянную метку (I’(i).v’(i)), которая в дальнейшем не меняется. А для остальных вершин j  R (т е. для j  VR) пересматриваются текущие значения длин I(j)). Результаты вы­числений на всех итерациях заносятся в таблицу. Рассмотрим алго­ритм Дийкстры построения дерева кратчайших путей на примере.

Пример 13. Туристическая фирма организовывает экскурсион­ные туры на автобусе с посещением ряда городов зарубежья (v1, v2, vз, v4, v5, v6,V7) (рис. 2.16). Выезд планируется из Минска (V0). Тре­буется найти кратчайшие пути из Минска в эти города, если извест­ны расстояния между городами (в тыс. км).

Р ешение. Составим математическую модель задачи. Вершины графа можно интерпретировать как пересечение дорог, а ребра - как участки дорог, связывающих вершины. Любому ребру можно поставить в соответствие длину данного участка дороги в километ­рах. Тогда задача сведется к нахождению кратчайшего пути из вер­шины V0 (Минска) во все остальные вершины графа. Расставлять метки на рис. 2.17 и заполнять табл. 2.8 будем по ходу алгоритма Дийкстры.

Алгоритм Дейкстры:

  1. Так как все пути будут выходить из вершины и,, ее сразу по­мечают. т.е. присваивают I(0):=0’, V(0):=V’0, R:={V0}

  2. Для остальных вершин определяют длину I(j) по формуле и указывают предпоследнюю вершину пути:

Т аким образом, в табл. 2.8. заполняют первую строку:

  1. И з непомеченных вершин находят номер i VR, для которого достигается минимум

В нашем примере

4.Если l(i)=∞ (т.е. минимум равен∞) и множество помеченных вершин не совпадает с множеством V(т.е.R≠V), то алгоритм заканчивается свою работу. В вершины, не имеющие постоянной метки,не существует пути из выделенной вершины V0. Иначе переходят к пункту 4.

5. Если l(1) < ∞ (т.е. минимум конечен), то полагают

В данном примере

6. Если R=V (или i=S), то найдены все кратчайшие пути во все вершины графа. Алгоритм заканчивает свою работу. Иначе переходят к пункту 7.

7. Если R≠V (I≠S), то рассматривают дуги (i,j) U, которые существует, т.е. i R, j=VR. Полагают

Где I’(i) – постоянная метка вершины Vi(начала дуги), Iij – длина дуги (Vi,Vj), I(j) – временная метка вершины Vj (конца дуги).

Если I’ (i)+lij<l(j), то присваивают V(j):=Vi, ниаче временная метка v(j) вершины Vj не меняется. Незаполненные клетки данной строки переписывают из соответствующих столбцов. Переходят к пункту 2.

В табл. 2.8 заполняют вторую строку. Для этого находят дуги с началом в последней отмеченной вершине, а с концом – в неотмеченной. В нашем примере это дуги с началом в вершине V3:(V3,V2),(V3,V5),(V3,V6). Для них считают l(2),l(5),l(6) соответственно:

Аналогично заполняют третью строку табл. 2.8.:

а) пункт 3 алгоритма:

б) пункт 5 алгоритма:

в)пункт 7 алгоритма: находят дуги с началом в вершине V1((V1,V2) ,(V1,V5),(V1,V4)) и вычисляют l(2),l(5),l(4) соответственно:

Незаполненные клетки переписываются из второй строки. Остальные строки заполняются аналогично. В данном примере выпишем кратчайшие пути из вершины V0 во все остальные вершины графа

Так, отправляясь в город туристическая фирма в целях посещения наибольшего числа городов предпочтет маршрут V0-V3-V2-V5-V6,хотя на обратной дороге можно сразу следовать в город V5, при этом наименьшее расстояние не изменится.