Метод ветвей и границ для задачи коммивояжера

Автор работы: Пользователь скрыл имя, 24 Мая 2013 в 14:31, курсовая работа

Краткое описание

Дана задача коммивояжера в классической формулировке: для некоторой группы городов с заданными расстояниями между ними требуется найти кратчайший маршрут посещения каждого города один раз с возвращением в исходный пункт. Кратчайший маршрут находится полным переборомбез учета повторяющихся путей (например, 1-2-3-1 и 2-3-1-2). При этом на плоскости полученный маршрут является границей многоугольника.

Содержание

1.Постановка задачи…………………………………………………..... 3
2. Математические основы решения задачи коммивояжера
2.1. Формулировка и некоторые свойства решений задачи коммивояжера…………………………………………………………….……
2.2. Постановка задачи коммивояжера как задачи на графе...…………………………………………..……………………………….
4
6
3. Постановка и описание алгоритма решения задачи
3.1. Алгоритм решения задачи…………………..……………….….
3.2. Оценка трудоемкости…………………………………………….
3.3. Результаты выполнения программы……………………………. 7
8
9
Приложение………………………………………………………………. 13
Литература………………………………………………………………… 17

Вложенные файлы: 1 файл

Курсовая.docx

— 70.05 Кб (Скачать файл)

Министерство  образования и науки Российской Федерации

Южно-Уральский государственный  университет

Механико-математический факультет

Кафедра прикладной математики

 

 

 

 

 

 

Курсовая  работа

По дисциплине «Дискретная оптимизация»

Тема: «Метод ветвей и границ для задачи коммивояжера»

 

 

 

 

 

 

Выполнила студентка группы ММ-440

__________ Басалаева  Н.Н.

«___» __________ 2013 г.

Проверил

__________ Эвнин А.Ю.

«___» __________ 2013 г.

 

 

 

 

Челябинск, 2013

Содержание

1.Постановка задачи………………………………………………….....

3

  1. Математические основы решения задачи коммивояжера
 
  1. Формулировка и некоторые свойства решений задачи коммивояжера…………………………………………………………….……
  2. Постановка задачи коммивояжера как задачи на графе...…………………………………………..……………………………….

 

4

 

6

  1. Постановка и описание алгоритма решения задачи
 
    1. Алгоритм решения задачи…………………..……………….….
    2. Оценка трудоемкости…………………………………………….
    3. Результаты выполнения программы…………………………….

7

8

9

Приложение……………………………………………………………….

13

Литература…………………………………………………………………

17


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПОСТАНОВКА ЗАДАЧИ

 

Дана  задача коммивояжера в классической формулировке: для некоторой группы городов с заданными расстояниями между ними требуется найти кратчайший маршрут посещения каждого города один раз с возвращением в исходный пункт. Кратчайший маршрут находится  полным перебором без учета повторяющихся путей (например, 1-2-3-1 и 2-3-1-2). При этом на плоскости полученный маршрут является границей многоугольника.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

МАТЕМАТЧЕСКИЕ ОСНОВЫ РЕШЕНИЯ ЗАДАЧИ КОММИВОЯЖЕРА

 

2.1 Формулировка и некоторые свойства решений задачи коммивояжера

 

Коммивояжер (бродячий торговец) должен выйти из первого города, посетить по разу в  неизвестном порядке города 2,1,3..n и вернуться в первый город. Расстояния между городами известны. В каком порядке следует обходить города, чтобы замкнутый путь (тур) коммивояжера был кратчайшим?

Чтобы привести задачу к научному виду, введем некоторые  термины. Города перенумерованы числами jÎТ=(1,2,3..n). Тур коммивояжера может быть описан циклической перестановкой t=(j1,j2,..,jn,j1), причём все j1...jn – разные номера; повторяющийся в начале и в конце j1, показывает, что перестановка зациклена. Расстояния между парами вершин Сij образуют матрицу С. Задача состоит в том, чтобы найти такой тур t:

…..(1)

Относительно  математической формулировки задачи коммивояжера уместно сделать два замечания:

1) В постановке Сij означали расстояния, поэтому они должны быть неотрицательными, т.е. для всех jÎТ:

Сij³0; Cjj=∞     (2)

(последнее  равенство означает запрет на  петли в туре), симметричными, т.е. для всех i,j:

Сij= Сji       (3)

и удовлетворять  неравенству треугольника, т.е. для  всех:

Сij+ Сjk³Cik        (4)

В математической постановке говорится о произвольной матрице. Сделано это потому, что  имеется много прикладных задач, которые описываются основной моделью, но всем условиям (2) – (4) не удовлетворяют. Особенно часто нарушается условие (3) (например, если Сij – не расстояние, а плата за проезд: часто туда билет стоит одну цену, а обратно – другую). Поэтому мы будем различать два варианта задачи коммивояжера: симметричную задачу, когда условие (3) выполнено, и несимметричную – в противном случае. Условия (2) – (4) по умолчанию мы будем считать выполненными.

2) В несимметричной  задаче коммивояжера все туры t=(j1,j2,..,jn,j1) и t’=(j1,jn,..,j2,j1) имеют разную длину и должны учитываться оба. Разных туров очевидно (n-1)!.

Зафиксируем на первом и последнем месте в  циклической перестановке номер j1, а оставшиеся n-1 номеров переставим всеми (n-1)! возможными способами. В результате получим все несимметричные туры. Симметричных туров имеется в два раза меньше, так как каждый засчитан два раза: как t и как t’. Можно представить, что С состоит только из единиц и нулей. Тогда С можно интерпретировать как граф, где ребро (i,j) проведено, если Сij=0, и не проведено, если Сij=1. Тогда, если существует тур длины 0, то он пройдет по циклу, который включает все вершины по одному разу. Такой цикл называется гамильтоновым циклом. Незамкнутый гамильтонов цикл называется гамильтоновой цепью (гамильтоновым путем).

В терминах теории графов симметричную задачу коммивояжера можно сформулировать так:

Дана  полная сеть с n вершинами, длина ребра (i,j) = Сij. Найти гамильтонов цикл минимальной длины. В несимметричной задаче коммивояжера вместо «цикл» надо говорить «контур», а вместо «ребра» – «дуги» или «стрелки».

Некоторые прикладные задачи формулируются как  задачи коммивояжера, но в них нужно  минимизировать длину не гамильтонова цикла, а гамильтоновой цепи. Такие  задачи называются незамкнутыми. [1]

 

 

 

 

2.2 Постановка задачи коммивояжера как задачи на графе

 

Формулировка: Множество городов: . Расстояние между городами i и j: . П – множество перестановок элементов А, перестановка

 

Если  городам поставить в соответствии вершины графа, а соединяющих  их дорогам дуги, то в терминах теории графов задача заключается в определении  гамильтонова контура минимальной  длины.

Гамильтоновым контуром называется путь, проходящий через все вершины графа, у  которого начальная вершина совпадает  с конечной.

Здесь под  длиной контура понимают не количество дуг, входящих в контур, а сумму  их длин. Длина соответствующей дороги – вес ребра. Граф должен быть полным, т.е. в нем имеются все возможные  ребра. Если же граф не является полным, то его можно дополнить недостающими ребрами с весом равным . [2]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ПОСТАНОВКА И ОПИСАНИЕ АЛГОРИТМА  РЕШЕНИЯ ЗАДАЧИ

 

3.1 Алгоритм решения задачи

 

В курсовой работе для решения задачи о коммивояжере применяется метод ветвей и границ, относящийся к методам дискретной оптимизации. В сущности, это полный перебор решений, который оптимизируется за счет того, что при переборе вариантов  по определенным признакам отсекаются неоптимальные множества перебора. Так как количество вершин от уровня к уровню возрастает в факториальной  прогрессии, то отсечение вершин верхних  уровней значительно сокращает  общее число перебираемых вариантов.[3]

Общая схема  метода такова:

1. Все  множество разбивается на N-1 подмножеств,  каждое из которых оценивается  верхней и нижней оценками.

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

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

4. Находятся минимальные верхняя и нижняя оценки. Если они равны и достигнуты на одном и том же множестве, то это значит, что получено оптимальное решение и алгоритм заканчивает работу, иначе возврат к шагу 2.[4]

 

 

 

 

 

 

 

 

 

 

3.2 Оценка трудоемкости

 

В задаче коммивояжера с n городами прямой перебор требует рассмотрения (n-1)! различных маршрутов. Метод ветвей и границ требует в среднем 1,26n операций. [5]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3.3 Результат выполнения программы

 

В результате запуска файла main.m получаем:

    1. График начального расположения точек(Рис.1)

 

Рис.1

 

    1. Первоначальная( предполагаемая) траектория (Рис.2)

Рис.2

 

    1. Наилучшая траектория, полученная в результате пересчета, по методу ветвей и границ. (Рис.3)

 

Рис.3

  1. Минимальный цикл длиной: 434.7954

 

 

  1. Цикл:

           T =       1    27    30    26    28    12    29     4     8     3    11

                                   7     2    15     9    10     6     5    13    18    19    20

              

                                   14    24    23    22    21    16    17    25

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

В результате запуска файла main2.m получаем:

    1. График начального расположения точек. (Рис.4)

Рис. 4.

 

    1. Первоначальная траектория (предполагаемая). (Рис.5)

Рис. 5

 

    1. Наилучшая траектория, полученная в результате пересчета, по методу ветвей и границ. (Рис.6)

 

Рис.6

    1. Минимальный цикл длиной :   423.9045
    2. Цикл:

       T =     1    30    29    27    26    28    25    24    23    22    21

                               20    18    19    17    16    15    14    13    12    11     5

 

                               6    10     9     8     7     4     3     2

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Приложение

main.m

xx(1)=45;yy(1)=7;

xx(2)=91;yy(2)=89;

xx(3)=83;yy(3)=46;

xx(4)=65;yy(4)=41;

xx(5)=64;yy(5)=60;

xx(6)=68;yy(6)=69;

xx(7)=83;yy(7)=69;

xx(8)=87;yy(8)=32;

xx(9)=74;yy(9)=78;

xx(10)=71;yy(10)=71;

xx(11)=91;yy(11)=56;

xx(12)=54;yy(12)=32;

xx(13)=59;yy(13)=67;

xx(14)=37;yy(14)=45;

xx(15)=72;yy(15)=94;

xx(16)=2;yy(16)=34;

xx(17)=7;yy(17)=22;

xx(18)=22;yy(18)=90;

xx(19)=25;yy(19)=62;

xx(20)=38;yy(20)=54;

xx(21)=4;yy(21)=50;

xx(22)=13;yy(22)=40;

xx(23)=18;yy(23)=40;

xx(24)=24;yy(24)=42;

xx(25)=25;yy(25)=1;

xx(26)=41;yy(26)=26;

xx(27)=45;yy(27)=21;

xx(28)=44;yy(28)=35;

xx(29)=58;yy(29)=35;

xx(30)=33;yy(30)=21;

tsp(xx,yy)

 

main2.m

xx(1)=87;yy(1)=7;

xx(2)=91;yy(2)=38;

xx(3)=83;yy(3)=46;

xx(4)=71;yy(4)=44;

xx(5)=64;yy(5)=60;

xx(6)=68;yy(6)=69;

xx(7)=83;yy(7)=69;

xx(8)=87;yy(8)=76;

xx(9)=74;yy(9)=78;

xx(10)=71;yy(10)=71;

xx(11)=58;yy(11)=69;

xx(12)=54;yy(12)=62;

xx(13)=51;yy(13)=67;

xx(14)=37;yy(14)=84;

xx(15)=41;yy(15)=94;

xx(16)=2;yy(16)=99;

xx(17)=7;yy(17)=64;

xx(18)=22;yy(18)=60;

xx(19)=25;yy(19)=62;

xx(20)=18;yy(20)=54;

xx(21)=4;yy(21)=50;

xx(22)=13;yy(22)=40;

xx(23)=18;yy(23)=40;

xx(24)=24;yy(24)=42;

xx(25)=25;yy(25)=38;

xx(26)=41;yy(26)=26;

xx(27)=45;yy(27)=21;

xx(28)=44;yy(28)=35;

xx(29)=58;yy(29)=35;

xx(30)=62;yy(30)=32;

tsp(xx,yy)

 

tsp.m

function tsp()

N=30;

a=0.6;

t0=10;

tf=0.001;

figure(1);

plot(xx,yy,'b+');% вывод точек на экран

xx1=xx; 

xx1(31)=xx(1);

yy1=yy;

yy1(31)=yy(1);

figure(2);

plot(xx1,yy1);%вывод первоначальной траектории на экран

for i=1:N

    for j=1:N

        if i==j

            continue;

        end

   d(i,j)=sqrt((xx(i)-xx(j)).^2+(yy(i)-yy(j)).^2); % расстояние между точками

    end

end

gen=1;

while gen<=10

    [f,T]=trp(a,d,t0,tf);% запуск задачи коммивояжера

    opf(gen)=f;

    path(gen,:)=T;

    gen=gen+1;

end 

min(opf)

T % вывод цикла на экран

for i=1:N

    xx2(i)=xx(T(i));

    yy2(i)=yy(T(i));

end

xx2(31)=xx(1);

yy2(31)=yy(1);

figure(3);

plot(xx2,yy2);% вывод наикратчайшего пути на экран

 

function [f,T]=trp(a,d,t0,tf)% задача коммивояжера

   [m,n]=size(d);

   L=1000*n;

   t=t0;

   pi0=1:n;

   min_f=0;

   for k=1:(n-1)

        min_f=min_f+d(pi0(k),pi0(k+1));

    end

    min_f=min_f+d(pi0(n),pi0(1));

    p_min=pi0;

    while t>tf

        for k=1:L

            kk=rand;

Информация о работе Метод ветвей и границ для задачи коммивояжера