Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Исследование алгоритмов оптимизации.doc
Скачиваний:
15
Добавлен:
01.05.2014
Размер:
331 Кб
Скачать

Краткие общие сведения

Поставленная задача очень напоминает задачу о назначениях и отличается от последней лишь наличием дополнительного условия (6.3). Это обстоятельство, однако, делает ее нелинейной и не позволяет применить к ее решению методы линейного программирования (служащие, в частности, базой классического "венгерского" метода решения за­дачи о назначениях). Тем не менее, задача коммивояжера может ус­пешно решаться с помощью весьма общего метода решения переборных задач - метода ветвей и границ.

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

- 26 -

Процесс последовательного деления через конечное число шагов приводит к появлению подмножества, содержащего всего одно решение. Для такого подмножества оценка снизу целевой функции может быть заменена ее точным значением, которое объявляется так называемым "рекордом". С момента появления "рекорда" появляется возможность сравнивать с ним "потенциальные возможности", заложенные в каждом из получившихся подмножеств:

а) если оценка снизу целевой функции на каком-либо подмножест­ве больше, чем "рекорд", то соответствующее подмножество можно ис­ключить из дальнейшего рассмотрения;

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

Процесс разбиения на подмножества удобно фиксировать в виде дерева, вершины которого соответствуют подмножествам.

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

а) способ выбора очередного подмножества, подлежащего разбие­нию, и правило, по которому оно осуществляется.

б) метод получения оценки.

1. Правило разбиения:

а) любое подмножество разбивается на две части;

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

в) правило выбора упомянутого пути будет приведено ниже.

2. Способ получения оценки снизу стоимости маршрутов, входящих в подмножество.

Подмножество маршрутов удобно кодировать с помощью пары:

а) (i(1),j(1)), ..., (i(l),j(l)) - набора путей, включаемых во все маршруты подмножества;

б) матрицы вида:

j1

jn-l+1

i1

C'i1,j1

C'i1,jn-l+1

...

...

in-l+1

C'in-l+1,j1

...

C'in-l+1,jn-l+1

- 27 -

Здесь {i1,i2,...,in-l+1} = {1,2,...,n} \ {i(1),i(2),...,i(l)} - номера городов, для которых в рамках данного подмножества остается откры­тым вопрос о том, куда из них двигаться; аналогичный смысл имеет множество {j1,j2,...,jn-l+1}. Числа C'ip,jq - это модифицированные стоимости переездов (см.ниже). Некоторые из них могут быть равны бесконечности, что означает запрет движения по соответствующим путям.

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

1. Редуцировать матрицу стоимостей, т.е. последовательно вы­честь из каждой строки ее минимальный элемент, после чего осущест­вить ту же процедуру применительно к столбцам. Сумма вычитаемых в процессе редукции чисел Х – редукционная сумма - даст искомую оценку.

2. Для каждого из нулевых элементов редуцированной матрицы С'ij вычислить

3. Осуществить разбиение по тому пути, для которого величина Δij максимальна.

4. В подмножестве маршрутов, исключающих путь (i, j), соответ-ствующую стоимость положить равной бесконечности и провести редук-цию по i-й строке и j-му столбцу. Сумма X + Δij даст оценку снизу.

5. В подмножестве маршрутов, включающих путь (i, j), осущест-вить следующую последовательность действий:

а) вычеркнуть элементы i -й строки и j -го столбца;

б) найти путь, движение по которому может привести к образова­нию внутреннего цикла, и положить его стоимость равной бесконеч-нос­ти (в простейшем случае, в частности, при разбиении исходного мно­жества, - это путь (j, i));

в) провести редукцию получившейся матрицы;

г) добавить редукционную сумму к X и получить оценку снизу для рассматриваемого подмножества.

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

- 28 –