Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
45
Добавлен:
12.02.2015
Размер:
267.26 Кб
Скачать

Задача о коммивояжере.

Пусть имеется n городов. Известны расстояния rij от i-го города до j-го. Необходимо объехать все эти города, посетив каждый из них один и только один раз так, чтобы суммарное расстояние было минимальным.

Формализуем эту задачу.

Пусть I={1,2,…,n} множество номеров («названий») городов. Необходимо найти такую биекцию

F: I J; (*)

чтобы последовательность городов i1, i2,..., in , такая, что ij+1=F( i­j ) образовывала цикл и величина имела минимальное значение.

Наиболее трудно формализуется здесь является условие, чтобы последовательность городов i1, i2,..., in , такая, что ij+1=F( i­j ) образовывала цикл. Наиболее просто это можно выразить так: все элементы последовательности различны и принимают значения всех городов от 1 до n причем i1=F( in ).

Условие оптимизации, таким образом, имеет вид

.

Раскроем смысл функции F – если i - номер очередного “города”, то j=F(i)- номер следующего “города” (то есть j- есть номер города, посещаемого после города с номером i).

Попробуем свести эту задачу к булевской. Вновь введем матрицу , размерностьюn *n. Элементы этой матрицы зададим так:

.

,

Очевидно условия (1) и (2), которые мы задали в задаче о назначении также выполняются:

Однако теперь смысл этих условий другой: из каждого города коммивояжер выезжает только в один город и в каждый города он въезжает только из одного города.

Вновь целевая функция – длина маршрута R- записывается с помощью формулы (3):

.

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

Замечание: под символом , здесь и далее мы понимаем достаточно большое число.

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

Приведем пример, где может возникнуть необходимость в решении задачи о коммивояжере (ЗК). При роботизированной сборке печатной платы необходимо найти наикротчайший маршрут сборки и одновременно наилучшего распределения деталей по питателям робота. Для этого формулируем задачу о коммивояжере для 2n городов, так что четные города – места установки деталей разных номиналов на плате, а нечетные – места их хранения в питателях. Расстояние между «городами» полагаем равным геометрическому расстоянию, если i и j разной четности, иначе полагаем его равным .

Методы решения целочисленных задач

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

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

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

Система нулей называется независимой, если в каждой строке и в каждом столбце стоит единственный ноль

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

Пример.

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

.

Тогда решение дается матрицей

.

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

Эти методы:

  • Метод динамического программирования

  • Метод ветвей и границ

  • Метод Гомори

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

Соседние файлы в папке Лекции