- •Санкт-петербургский университет
- •Введение
- •Литература
- •Графический способ решения задачи линейного программирования
- •Симплекс–метод
- •Алгоритм симплекс-метода
- •Транспортная задача. Общие понятия
- •Математическая постановка транспортной задачи
- •Методы нахождения опорного плана
- •1. Метод северо-западного угла
- •2. Метод минимального элемента
- •3. Метод аппроксимации Фогеля
- •Метод потенциалов нахождения оптимального плана транспортной задачи
- •Выбор кратчайшего пути
- •Задача коммивояжера
Задача коммивояжера
Агент по сбыту собирается посетить каждый из n городов по одному разу, выехав из одного города и вернувшись в него же. Обозначим расстояние между городами i и j как cij. Тогда задача коммивояжера математически буде записана следующим образом:
Решить задачу коммивояжера – это значит найти цикл. Данная задача является частным случаем целочисленного программирования. Одним из методов решения такой задачи будет метод ветвей и границ, суть которого состоит из двух этапов: вычисление нижней границы и ветвление. Метод ветвей и границ довольно трудоемок, поэтому мы будем решать задачу коммивояжера табличным способом.
Условия задачи коммивояжера задаются в виде матрицы расстояний, причем, если дуги xixj нет в графе задачи, то вместо cij будет “-“, при чем не обязательно cij=cji.
j i |
1 |
2 |
… |
n |
1 |
- |
c12 |
… |
c1n |
2 |
c21 |
- |
… |
c2n |
… |
… |
… |
… |
… |
n |
cn1 |
cn1 |
|
- |
Решим задачу коммивояжера на примере конкретной задачи, заданной следующей матрицей расстояний:
|
A1 |
A2 |
A3 |
A4 |
A5 |
A6 |
min |
A1 |
|
68 |
73 |
24 |
70 |
9 |
9 |
A2 |
58 |
|
16 |
44 |
11 |
92 |
11 |
A3 |
63 |
9 |
|
86 |
13 |
18 |
9 |
A4 |
17 |
34 |
76 |
|
52 |
70 |
17 |
A5 |
60 |
18 |
3 |
45 |
|
58 |
3 |
A6 |
16 |
82 |
11 |
60 |
48 |
|
11 |
|
|
|
|
|
|
|
|
Первым действием в решении данной задачи является так называемая операция приведения матрицы, которая основывается на том, что при уменьшении чисел какой-либо строки на одно и то же число длины всех маршрутов уменьшаются на это же число, так как в длину каждого маршрута в качестве слагаемого входят только по одному числу из каждой строки (столбца). Кратчайший маршрут при этом сохраняется, но его длина уменьшается на это число.
В последнем столбце таблицы записаны минимальные значения по строкам. Вычитая эти числа из соответствующих строк, получим следующую таблицу:
|
A1 |
A2 |
A3 |
A4 |
A5 |
A6 |
A1 |
|
59 |
64 |
15 |
61 |
0 |
A2 |
47 |
|
5 |
33 |
0 |
81 |
A3 |
54 |
0 |
|
77 |
4 |
9 |
A4 |
0 |
17 |
59 |
|
35 |
53 |
A5 |
57 |
15 |
0 |
42 |
|
55 |
A6 |
5 |
71 |
0 |
49 |
37 |
|
min |
0 |
0 |
0 |
15 |
0 |
0 |
Вычитая число 15 из столбца А4, мы получаем новую таблицу, которая называется приведенной:
|
A1 |
A2 |
A3 |
A4 |
A5 |
A6 |
min |
A1 |
|
59 |
64 |
0 |
61 |
0 |
0 |
A2 |
47 |
|
5 |
18 |
0 |
81 |
01 |
A3 |
54 |
0 |
|
62 |
4 |
9 |
0 |
A4 |
0 |
17 |
59 |
|
35 |
53 |
0 |
A5 |
57 |
15 |
0 |
27 |
|
55 |
0 |
A6 |
5 |
71 |
0 |
34 |
37 |
|
0 |
min |
0 |
0 |
0 |
0 |
0 |
0 |
|
Числа, которые вычитались, называются постоянными приведения. Так как каждая постоянная приведения входит как слагаемое в длину любого маршрута, то за нижнюю границу можно принять сумму всех постоянных приведения: L=L0+l, где l=(9+11+9+17+3+11)+(15)=75. Это начальный шаг алгоритма (применяется однократно).
Следующим шагом алгоритма является ветвление, так называемый общий шаг, который применяется неоднократно. Каждый раз нужно определить способ ветвления, а именно, выбирается дуга xixj и всё множество маршрутов разбивается на два подмножества: подмножество маршрутов 2, содержащих дугу xixj и подмножество 1, не содержащих дугу xixj.
Множество 1 получается из множества исключением маршрутов, содержащих дугу xixj. Исключать дугу мы будем в матрице расстояний замещением расстояния cij символом “”. Дуга для ветвления выбирается так, чтобы нижняя граница множества 1(xixj) была, по возможности, большой, т.е. чтобы при исключении этой дуги была большей сумма возникающих при этом постоянных приведения. Положительные постоянные приведения возникают лишь в том случае, когда в одном из соответствующих рядов xixj матрицы расстояний нет нулевых элементов.
Дугами ветвления могут быть дуги, для которых расстояние равно нулю. В нашем случае дугами ветвления могут быть x1x4 (9+18=18),x1x6 (0+9=9),x2x5 (5+4=9),x3x2 (4+15=19),x4x1 (17+5=22),x5x3 (15+0=15),x6x3 (5+0-5). В скобках указаны суммы постоянных приведения соответствующих нулевых расстояний. Очевидно, что дугой с максимальной суммой является x4x1, которую мы и выбираем для ветвления.
Матрица для подмножества дана следующей таблицей, для которой суммы постоянных приведения равна 5+17=22.
|
A1 |
A2 |
A3 |
A4 |
A5 |
A6 |
min |
A1 |
|
59 |
64 |
0 |
61 |
0 |
0 |
A2 |
47 |
|
5 |
18 |
0 |
81 |
0 |
A3 |
54 |
0 |
|
62 |
4 |
9 |
0 |
A4 |
“” |
17 |
59 |
|
35 |
53 |
17 |
A5 |
57 |
15 |
0 |
27 |
|
55 |
0 |
A6 |
5 |
71 |
0 |
34 |
37 |
|
0 |
min |
5 |
0 |
0 |
0 |
0 |
0 |
|
Конечно «перебор» не является оптимальной процедурой. Более приемлемым является соображение наличия «нулевой» дуги (в нашем случае x1x4 и x4x1).
Матрица 2(x4x1) получается в результате следующих действий:
исключаем строку А4 и столбец А1;
исключаем противоположную дугу x1x4 заменой расстояния с14на «»;
следим за тем, чтобы из ранее включенных в маршрут дуг и этой дуги не могли образовываться замкнутые контуры, не содержащие всех пунктов.
После исключения строки А4 и столбца А1 получаем следующую матрицу:
|
A2 |
A3 |
A4 |
A5 |
A6 |
min |
A1 |
59 |
64 |
“” |
61 |
0 |
0 |
A2 |
|
5 |
18 |
0 |
81 |
0 |
A3 |
0 |
|
62 |
4 |
9 |
0 |
A5 |
15 |
0 |
27 |
|
55 |
0 |
A6 |
71 |
0 |
34 |
37 |
|
0 |
min |
0 |
0 |
18 |
0 |
0 |
|
Сумма постоянных приведения равна 18. На следующей схеме представлен результат ветвления.
Большее значение нижней границы для 1 (97) по сравнению с нижней границей для 2 (93) позволяет надеяться, что в дальнейшем это множество будет отсечено. В качестве «более перспективного» выберем множество 2 и будем подвергать его ветвлению.
После вычитания суммы 18 из чисел столбца А4 получим матрицу:
|
A2 |
A3 |
A4 |
A5 |
A6 |
A1 |
59 |
64 |
“” |
61 |
0 |
A2 |
|
5 |
0 |
0 |
81 |
A3 |
0 |
|
44 |
4 |
9 |
A5 |
15 |
0 |
9 |
|
55 |
A6 |
71 |
0 |
16 |
37 |
|
Нулевые дуги и сумма соответствующих постоянных приведения для данной матрицы будут следующими: x1x6 (59+9=68),x2x4 (0+9=9),x2x5 (0+4=4),x3x2 (4+15=19),x5x3 (0+9=9),x6x3 (16+0=16). Максимальной из всех сумм постоянных приведения равна 68, что соответствует дуге x1x6. Таким образом, множество 2 нужно разбить на два непересекающихся подмножества и4(x1x6). Нижняя граница 3 равна сумме нижней границы 2 и 68, т.е. 93+68=161.
Для получения нижней границы 4 нужно выполнить следующие действия:
вычеркнем строку А1 и столбец А6;
заменим элемент с64 на “”, так как если этого не сделать, то будет замкнутый контур x4→x1→x6→x4 в который не все вершины входят.
В результате чего получим следующую матрицу расстояний для подмножества 4:
|
A2 |
A3 |
A4 |
A5 |
min |
A2 |
|
5 |
0 |
0 |
0 |
A3 |
0 |
|
44 |
4 |
0 |
A5 |
15 |
0 |
9 |
|
0 |
A6 |
71 |
0 |
“” |
37 |
0 |
min |
0 |
0 |
0 |
0 |
|
Как видно из матрицы, отличных от нуля постоянных приведения нет, поэтому нижняя граница 4 совпадает с нижней границей 2 и равна 93+0=93.
Выбираем среди «нулевых» дуг дугу с максимальной суммой постоянных приведения: x2x4 (0+9=9),x2x5 (0+4=4),x3x2 (4+15=19),x5x3 (0+9=9)x6x3 (37+0=37). Это дуга x6x3. Нижняя граница для подмножества 5 равна 93+37=130 и ее дальнейшее ветвление под большим вопросом.
Матрица 6 получается вычеркиванием строки А6 и столбца А3. Так как путь x4→x1→x6→x3 не должен превращаться в контур, то элемент с34 нужно заменить на «». В результате матрица 6 имеет вид:
|
A2 |
A4 |
A5 |
min |
A2 |
|
0 |
0 |
0 |
A3 |
0 |
“” |
4 |
0 |
A5 |
15 |
9 |
|
9 |
min |
0 |
0 |
0 |
|
Сумма постоянных приведения на данном этапе равна 9+0=9. Нижняя граница множества 6 будет равна 93+9=102. После вычитания числа 9 из строки А5 получим матрицу:
|
A2 |
A4 |
A5 |
A2 |
|
0 |
0 |
A3 |
0 |
“” |
4 |
A5 |
6 |
0 |
|
Рассматривая полученную матрицу 6 как множество для ветвления, выберем среди «нулевых» дуг дугу с максимальной суммой постоянных приведения: x2x4 (0+0=0),x2x5 (0+4=4),x3x2 (4+6=10),x5x4 (6+0=6). Это дуга x3x2. Множество 6 делится на два подмножества и8(x3x2). Нижняя граница для 7 будет равна нижней границе для 6 плюс сумма постоянных приведения (10): 102+10=112.
Чтобы получить матрицу 8 нужно вычеркнуть строку А3 и столбец А2 и вместо элемента с24 поставить прочерк “”:
|
A4 |
A5 |
A2 |
“” |
0 |
A5 |
0 |
|
Матрица 8 является приведенной, и поэтому нижние границы 8 и 6 совпадают и равны 102. Остается включить в маршрут единственно возможные дуги x2x5 и x5x4. Получаем замкнутый маршрут x4→x1→x6→x3→x2→x5→x4 с длиной пути l=102.
Остается сделать последний шаг: проверка оптимальности решения. Для этого нужно сравнить длину полученного замкнутого маршрута (102) с нижними границами концевых множеств схемы ветвления: 112, 130, 161 и 97. В нашем случае существует множество 1 с меньшим значением длины 97<102. Применим схему ветвления к множеству 1.
Так как матрица 1 не является приведенной, то вычтем из строки А4 число 17, а из столбца А1 число 5 и получим приведенную матрицу :
|
A1 |
A2 |
A3 |
A4 |
A5 |
A6 |
min |
A1 |
|
59 |
64 |
0 |
61 |
0 |
0 |
A2 |
42 |
|
5 |
18 |
0 |
81 |
0 |
A3 |
49 |
0 |
|
62 |
4 |
9 |
0 |
A4 |
“” |
0 |
42 |
|
18 |
36 |
0 |
A5 |
52 |
15 |
0 |
27 |
|
55 |
0 |
A6 |
0 |
71 |
0 |
34 |
37 |
|
0 |
min |
0 |
0 |
0 |
0 |
0 |
0 |
|
Нулевые дуги и сумма соответствующих постоянных приведения для данной матрицы будут следующими: x1x4 (0+18=18),x1x6 (0+19=19),x2x5 (5+4=9),x3x2 (4+0=4),x4x2 (18+0=18),x5x3 (15+0=15), x6x1 (0+42=42),x6x3 (0+0=0). Максимальная сумма из всех сумм постоянных приведения равна 42, что соответствует дуге x6x1. Таким образом, множество делится на два подмножестваи10(x6x1).
Нижняя граница подмножества равна нижней границе множестваплюс 42 (139), что больше 102, и, следовательно, множество9 не является оптимальным.
Чтобы получить матрицу расстояний 10, нужно из матрицы 1 вычеркнуть строку А6 и столбец А1 и элемент с16 заменить прочерком “”.
|
A2 |
A3 |
A4 |
A5 |
A6 |
min |
A1 |
59 |
64 |
0 |
61 |
“” |
0 |
A2 |
|
5 |
18 |
0 |
81 |
0 |
A3 |
0 |
|
62 |
4 |
9 |
0 |
A4 |
0 |
42 |
|
18 |
36 |
0 |
A5 |
15 |
0 |
27 |
|
55 |
0 |
min |
0 |
0 |
0 |
0 |
9 |
|
После приведения данной матрицы нижняя граница для 10 будет равна 97+9=106, что больше, чем 102.
Следовательно, найденный маршрут x4→x1→x6→x3→x2→x5→x4 является кратчайшим с длиной пути l=102.
Окончательно вся схема ветвления представлена ниже.
Задание 5.
Найти кратчайший из замкнутых маршрутов, проходящих точно по одному разу через каждый из шести городов А1, А2, А3, А4, А5 и А6. Расстояния между городами заданы следующей таблицей:
|
А1 |
А2 |
А3 |
А4 |
А5 |
А6 |
А1 |
- |
30 |
25 |
17 |
39 |
18 |
А2 |
31-2k |
- |
26 |
25 |
30 |
42-n |
А3 |
28 |
27 |
- |
29 |
18+n |
40 |
А4 |
37 |
16+m |
21 |
- |
17 |
25 |
А5 |
19 |
23 |
25 |
31 |
- |
19 |
А6 |
21 |
27 |
32 |
16 |
19+k |
- |