Теория графов

История и основные термины теории графов. Представление их в электронно-вычислительной машине. Задача коммивояжера. Метод ветвей и границ. Решение задачи аналитическим методом. Постановка задачи, создание приложения для ее решения. Тестирование программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 04.09.2013
Размер файла 743,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Содержание

Введение

1. Теоретическая часть

1.1 История теории графов

1.2 Основные термины теории графов

1.3 Представление графов в ЭВМ

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

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

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

3. Решение задачи аналитическим методом

4. Создание приложения для решения задачи

4.1 Тестирование программы

4.2 Руководство пользователя

Заключение

Список использованных источников

Введение

теория граф коммивояжер программа

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

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

Самыми знаменитыми задачами в теории графов являются: задача о Кенигсбергских мостах, задача о трех домах и трех колодцах, задача о четырех красках.

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

Поэтому данная тема на современном этапе развития общества имеет не самое последнее по значимости место.

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

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

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

Что касается задачи проектирования, то она состоит в том, чтобы максимально просто добиться результата поставленной цели.

1. Теоретическая часть

1.1 История теории графов

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

Первые задачи теории графов были связаны с решением математических развлекательных задач и головоломок. Одним из первых результатов в теории графов явился критерий существования обхода всех ребер графа без повторений, полученный Л. Эйлером при решении задачи о Кенигсбергских мостах (рисунок 1). Вот пересказ отрывка из письма Эйлера от 13 марта 1736 году: ” Мне была предложена задача об острове, расположенном в городе Кенигсберге и окруженном рекой, через которую перекинуто 7 мостов. Спрашивается, может ли кто-нибудь непрерывно обойти их, проходя только однажды через каждый мост. И тут же мне было сообщено, что никто еще до сих пор не смог это проделать, но никто и не доказал, что это невозможно. Вопрос этот, хотя и банальный, показался мне, однако, достойным внимания тем, что для его решения недостаточны ни геометрия, ни алгебра, ни комбинаторное искусство. После долгих размышлений я нашел лёгкое правило, основанное на вполне убедительном доказательстве, с помощью которого можно во всех задачах такого рода тотчас же определить, может ли быть совершен такой обход через какое угодно число и как угодно расположенных мостов или не может“.

Рисунок 1 - Иллюстрация к задаче о Кенигсбергских мостах

Рассмотрев эту задачу, в 1736 году Эйлер доказал, что это невозможно, причем он рассмотрел более общую задачу: какие местности, разделенные рукавами рек и соединенные мостами, возможно обойти, побывав на каждом мосту ровно один раз, а какие невозможно.

Проблема четырех красок также выглядит как развлекательная задача, однако попытки ее решения привели к появлению некоторых исследований графов, имеющих теоретическое и прикладное значение. Проблема четырех красок формулируется так: ”Можно ли область любой плоской карты раскрасить четырьмя цветами так, чтобы любые две соседние области были раскрашены в различные цвета?”. Гипотеза о том, что ответ утвердительный, была сформулирована в середине 19 в. В 1976 году анонсировано положительное решение задачи с использованием ЭВМ.

Другая старая топологическая задача, которая особенно долго не поддавалась решению и будоражила умы любителей головоломок, известна как “задача о трех домах и трех колодцах” (рисунок 2). Имеется три дома и три колодца. Необходимо провести от каждого дома к каждому колодцу тропинку так, чтобы тропинки не пересекались:

Рисунок 2 - Иллюстрация к задаче о трех домах и трех колодцах

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

1.2 Основные термины теории графов

Терминология теории графов поныне не определена строго. В частности в монографии Гудман, Хидетниеми, 1981 сказано «В программистском мире нет единого мнения о том, какой из двух терминов "граф" или "сеть". Мы выбрали термин "сеть", так как он, по-видимому, чаще встречается в прикладных областях».

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

Граф - система, которая интуитивно может быть рассмотрена как множество кружков и множество соединяющих их линий. Кружки называются вершинами графа, линии со стрелками - дугами, без стрелок - ребрами. Граф, в котором направление линий не выделяется (все линии являются ребрами), называется неориентированным; граф, в котором направление линий принципиально (линии являются дугами) называется ориентированным.

Подграфом называется часть графа, образованная подмножеством вершин вместе со всеми ребрами (дугами), соединяющими вершины из этого множества. Если из графа удалить часть ребер (дуг), то получим частичный граф.

Две вершины называются смежными, если они соединены ребром (дугой). Смежные вершины называются граничными вершинами соответствующего ребра (дуги), а это ребро (дуга) - инцидентным соответствующим вершинам.

Путем называется последовательность дуг (в ориентированном графе), такая, что конец одной дуги является началом другой дуги. Простой путь - путь, в котором ни одна дуга не встречается дважды. Элементарный путь - путь, в котором ни одна вершина не встречается дважды. Контур - путь, у которого конечная вершина совпадает с начальной вершиной. Длиной пути (контура) называется число дуг пути (или сумма длин его дуг, если последние заданы).

Граф, для которого из (i, j) ? V следует (j, i) ? V называется симметрическим. Иначе, антисимметрическим.

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

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

Связный граф, в котором существует эйлеров цикл, называется эйлеровым графом.

1.3 Представление графов в ЭВМ

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

Известны различные способы представления графов в памяти компьютера, которые различаются объемом занимаемой памяти и скорость выполнения операций над графами. Представление выбирается, исходя из потребностей конкретной задачи.

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

Графы в ЭВМ можно представить следующими способами:

- Матрица смежности

Один из самых распространённых способов хранения графа - матрица смежности. Она представляет собой двумерный массив. Если в клетке i, j (i - строка, j - столбец) установлено значение пусто (как правило, это очень большая величина или величина, которой заведомо не может равняться вес ребра), то дуги, начинающейся в вершине i и кончающейся в вершине j, нет. Иначе дуга есть. Если она есть, то в соответствующую ячейку записывают ее вес. Если граф не взвешенный, то вес дуги считается равным единице.

Для представления графа матрицей смежности нужно V2 (где V - количество вершин) ячеек. Если граф почти полный, т.е. Е сопоставимо V2 (где Е - количество дуг), этот способ хранения графа наиболее выгоден, т.к. его очень просто реализовывать и память будет заполнена "нужными" значениями.

Но если это условие не выполняется, например, вершин до 10000 и ребер до 1000, то нам понадобиться ?2 * 100000000 / 10242 Мбайт памяти (по 2 байта на ячейку), что примерно равно 190 Мбайт, памяти. А на олимпиадах, как правило, ограничении на ее использование составляет 64 Мбайт. Значит, этот метод не годиться.

Кроме большого количества требуемой памяти и медленной работы на разреженных графах (графах, у которых E << V2) у матрицы смежности есть ещё один важный недостаток. Иногда в задачах нужно выводить не номера вершин, а номера дуг (рёбер) на вводе. Хранить эти номера матрица смежности «не умеет». Нужно реализовывать восстановление номера дуги (ребра) как-то иначе, а это совсем неудобно.

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

Для матрицы смежности n(p,q) = О(р2),

где p - число вершин,

q - число ребер.

Замечание:

Матрица смежности неориентированного графа симметрична относительно главной диагонали, поэтому достаточно хранить только верхнюю (или нижнюю) треугольную матрицу.

- Матрица инцидентности

Представление графа с помощью матрицы Н, отражающей инцидентность вершин и ребер, называется матрицей инцидентности, где для неориентированного графа

а для орграфа

Для матрицы инцидентности n(p,q) = О(pq),

где p - число вершин,

q - число ребер.

- Списки смежности

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

<номер_начальной_вершины>: <номера_смежных_вершин>

Наиболее естественно применять этот способ для задания орграфов, однако и для остальных вариантов он тоже подходит.

В случае представления неориентированных графов списками смежности, объем необходимой памяти

n(p,q) = O(p+2q),

где p - число вершин,

q - число ребер, а в случае ориентированных графов n(p,q) = O(p+q).

- Иерархический список

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

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

Задача коммивояжёра (коммивояжёр -- разъездной сбытовой посредник) -- одна из самых известных задач комбинаторной оптимизации, заключающаяся в отыскании самого выгодного маршрута, проходящего через указанные города хотя бы по одному разу с последующим возвратом в исходный город. В условиях задачи указываются критерий выгодности маршрута (кратчайший, самый дешёвый, совокупный критерий и т. п.) и соответствующие матрицы расстояний, стоимости и т. п. Как правило, указывается, что маршрут должен проходить через каждый город только один раз -- в таком случае выбор осуществляется среди гамильтоновых циклов.

Задача коммивояжёра есть NP-полная задача. Часто на ней проводят обкатку новых подходов к эвристическому сокращению полного перебора.

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

Задача коммивояжёра относится к числу трансвычислительных: уже при относительно небольшом числе городов (66 и более) она не может быть решена методом перебора вариантов никакими теоретически мыслимыми компьютерами за время, меньшее нескольких миллиардов лет. Если в списке n городов, то число возможных путей обхода равно n! Поскольку 66! примерно равно 5,443449391Ч1092, а 67! ? 3,647111092Ч1094, задача проверки всех возможных путей становится трансвычислительной для n > 66.

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

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

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

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

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

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

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

Коммивояжер хочет объехать N городов и затем вернуться в начальный город, расстояния между которыми заданы. При этом желательно сделать это по наиболее короткому пути (т.к. коммивояжер не располагает лишними средствами на излишние перемещения между городами), где N =7. (таблица 1)

Таблица 1 - Исходные данные

А1

А2

А3

А4

А5

А6

А7

А1

0

6

11

6

8

8

8

А2

6

0

9

12

6

7

2

А3

11

9

0

3

6

3

7

А4

6

12

3

0

2

3

13

А5

8

6

6

2

0

1

5

А6

8

7

3

3

1

0

3

А7

8

2

7

13

5

3

0

3. Решение задачи аналитическим методом

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

Таблица 2 - Исходные данные

А1

А2

А3

А4

А5

А6

А7

А1

0

6

11

6

8

8

8

А2

6

0

9

12

6

7

2

А3

11

9

0

3

6

3

7

А4

6

12

3

0

2

3

13

А5

8

6

6

2

0

1

5

А6

8

7

3

3

1

0

3

А7

8

2

7

13

5

3

0

Возьмем в качестве произвольного маршрута:

X0 = (А1,A2);(A2,A3);(A3,A4);(A4,A5);(A5,A6);(A6,A7);(A7,А1)

Тогда F(X0) = 6+9+3+2+1+3+8=32

Для определения нижней границы множества воспользуемся операцией редукции или приведения матрицы по строкам, для чего необходимо в каждой строке матрицы найти минимальный элемент (таблица 3):

di = min(j) dij

Таблица 3 - Нашли минимум по строке

А1

А2

А3

А4

А5

А6

А7

di

А1

0

6

11

6

8

8

8

6

А2

6

0

9

12

6

7

2

2

А3

11

9

0

3

6

3

7

3

А4

6

12

3

0

2

3

13

2

А5

8

6

6

2

0

1

5

1

А6

8

7

3

3

1

0

3

1

А7

8

2

7

13

5

3

0

2

Затем вычитаем di из элементов рассматриваемой строки. В связи с этим во вновь полученной матрице в каждой строке будет как минимум один ноль.

Такую же операцию редукции проводим по столбцам (таблица 4):

dj = min(i) dij

Таблица 4 - Нашли минимум по столбцу

А1

А2

А3

А4

А5

А6

А7

А1

0

0

5

0

2

2

2

А2

4

0

7

10

4

5

0

А3

8

6

0

0

3

0

4

А4

4

10

1

0

0

1

11

А5

7

5

5

1

0

0

4

А6

7

6

2

2

0

0

2

А7

6

0

5

11

3

1

0

dj

4

0

1

0

0

0

0

После вычитания минимальных элементов получаем полностью редуцированную матрицу (таблица 5), где величины di и dj называются константами приведения.

Таблица 5 - Редуцированная матрица

А1

А2

А3

А4

А5

А6

А7

А1

0

0

4

0

2

2

2

А2

0

0

6

10

4

5

0

А3

4

6

0

0

3

0

4

А4

0

10

0

0

0

1

11

А5

3

5

4

1

0

0

4

А6

3

6

1

2

0

0

2

А7

2

0

4

11

3

1

0

Шаг №1.

Определяем ребро ветвления (таблица 6) и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).

Таблица 6 - Определяем ребро ветвления

А1

А2

А3

А4

А5

А6

А7

di

А1

0

0(0)

4

0(0)

2

2

2

0

А2

0(0)

0

6

10

4

5

0(2)

0

А3

4

6

0

0(0)

3

0(0)

4

0

А4

0(0)

10

0(1)

0

0(0)

1

11

0

А5

3

5

4

1

0

0(1)

4

1

А6

3

6

1

2

0(1)

0

2

1

А7

2

0(1)

4

11

3

1

0

1

dj

0

0

1

0

0

0

2

0

Наибольшая сумма констант приведения равна (2 + 0) = 2 для ребра (A2,A7), следовательно, множество разбивается на два подмножества (A2,A7) и (A2*,A7*).

Нижняя граница гамильтоновых циклов этого подмножества (таблица 7):

Таблица 7 - Находим нижнюю границу гамильтонового цикла

А1

А2

А3

А4

А5

А6

А7

di

А1

0

0

4

0

2

2

2

0

А2

0

0

6

10

4

5

0

0

А3

4

6

0

0

3

0

4

0

А4

0

10

0

0

0

1

11

0

А5

3

5

4

1

0

0

4

0

А6

3

6

1

2

0

0

2

0

А7

2

0

4

11

3

1

0

0

dj

0

0

1

0

0

0

2

2

В результате получим другую сокращенную матрицу (6 x 6), которая подлежит операции приведения.

После операции приведения сокращенная матрица будет иметь вид (таблица 8):

Таблица 8 - Сокращенная матрица

А1

A2

A3

A4

A5

A6

di

А1

0

0

4

0

2

2

0

A3

4

6

0

0

3

0

0

A4

0

10

0

0

0

1

0

A5

3

5

4

1

0

0

0

A6

3

6

1

2

0

0

0

A7

2

0

4

11

3

1

1

dj

0

0

0

0

0

0

1

Поскольку нижняя граница этого подмножества (A2,A7) меньше, чем подмножества (A2*,A7*), то ребро (A2,A7) включаем в маршрут.

Шаг №2.

Определяем ребро ветвления (таблица 9) и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).

Таблица 9 - Определяем ребро ветвления

А1

A2

A3

A4

A5

A6

di

А1

0

0(5)

4

0(0)

2

2

0

A3

4

6

0

0(0)

3

0(0)

0

A4

0(1)

10

0(1)

0

0(0)

1

0

A5

3

5

4

1

0

0(1)

1

A6

3

6

1

2

0(1)

0

1

A7

1

0

3

10

2

0(1)

1

dj

1

5

1

0

0

0

0

Наибольшая сумма констант приведения равна (0 + 5) = 5 для ребра (А1,A2), следовательно, множество разбивается на два подмножества (А1,A2) и (А1*,A2*).

Нижняя граница гамильтоновых циклов этого подмножества (таблица 10):

Таблица 10 - Находим нижнюю границу гамильтонового цикла

А1

A2

A3

A4

A5

A6

di

А1

0

0

4

0

2

2

0

A3

4

6

0

0

3

0

0

A4

0

10

0

0

0

1

0

A5

3

5

4

1

0

0

0

A6

3

6

1

2

0

0

0

A7

1

0

3

10

2

0

0

dj

0

5

0

0

0

0

5

В результате получим другую сокращенную матрицу (5 x 5), которая подлежит операции приведения.

После операции приведения сокращенная матрица будет иметь вид (таблица 11):

Таблица 11 - Сокращенная матрица

А1

A3

A4

A5

A6

di

A3

4

0

0

3

0

0

A4

0

0

0

0

1

0

A5

3

4

1

0

0

0

A6

3

1

2

0

0

0

A7

1

3

10

2

0

0

dj

0

0

0

0

0

0

Чтобы исключить подциклы, запретим следующие переходы: (A7,А1),

Поскольку нижняя граница этого подмножества (А1,A2) меньше, чем подмножества (А1*,A2*), то ребро (А1,A2) включаем в маршрут.

Шаг №3.

Определяем ребро ветвления (таблица 12) и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).

Таблица 12 - Определяем ребро ветвления

А1

A3

A4

A5

A6

di

A3

4

0

0(1)

3

0(0)

0

A4

0(3)

0(1)

0

0(0)

1

0

A5

3

4

1

0

0(1)

1

A6

3

1

2

0(1)

0

1

A7

1

3

10

2

0(2)

2

dj

3

1

1

0

0

0

Наибольшая сумма констант приведения равна (0 + 3) = 3 для ребра (A4,А1), следовательно, множество разбивается на два подмножества (A4,А1) и (A4*,А1*).

Нижняя граница гамильтоновых циклов этого подмножества (таблица 13):

Таблица 13 - Находим нижнюю границу гамильтонового цикла

А1

A3

A4

A5

A6

di

A3

4

0

0

3

0

0

A4

0

0

0

0

1

0

A5

3

4

1

0

0

0

A6

3

1

2

0

0

0

A7

1

3

10

2

0

0

dj

3

0

0

0

0

3

В результате получим другую сокращенную матрицу (4 x 4), которая подлежит операции приведения.

После операции приведения сокращенная матрица будет иметь вид (таблица 14):

Таблица 14 - Сокращенная матрица

A3

A4

A5

A6

di

A3

0

0

3

0

0

A5

4

1

0

0

0

A6

1

2

0

0

0

A7

3

10

2

0

0

dj

1

0

0

0

1

Чтобы исключить подциклы, запретим следующие переходы: (A7,А1), (A7,A4),

Поскольку нижняя граница этого подмножества (A4,А1) меньше, чем подмножества (A4*,А1*), то ребро (A4,А1) включаем в маршрут.

Шаг №4.

Определяем ребро ветвления (таблица 15) и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).

Таблица 15 - Определяем ребро ветвления

A3

A4

A5

A6

di

A3

0

0(1)

3

0(0)

0

A5

3

1

0

0(1)

1

A6

0(2)

2

0(2)

0

0

A7

2

10

2

0(2)

2

dj

2

1

2

0

0

Наибольшая сумма констант приведения равна (0 + 2) = 2 для ребра (A6,A3), следовательно, множество разбивается на два подмножества (A6,A3) и (A6*,A3*).

Нижняя граница гамильтоновых циклов этого подмножества (таблица 16):

Таблица 16 - Находим нижнюю границу гамильтонового цикла

A3

A4

A5

A6

di

A3

0

0

3

0

0

A5

3

1

0

0

0

A6

0

2

0

0

0

A7

2

10

2

0

0

dj

2

0

0

0

2

В результате получим другую сокращенную матрицу (3 x 3), которая подлежит операции приведения.

После операции приведения сокращенная матрица будет иметь вид (таблица 17):

Таблица 17 - Сокращенная матрица

A4

A5

A6

di

A3

0

3

0

0

A5

1

0

0

0

A7

10

2

0

0

dj

0

2

0

2

Чтобы исключить подциклы, запретим следующие переходы: (A7,А1), (A7,A4),

Поскольку нижняя граница этого подмножества (Е,В) меньше, чем подмножества (A6*,A3*), то ребро (A6,A3) включаем в маршрут.

Шаг №5.

Определяем ребро ветвления (таблица 18) и разобьем все множество маршрутов относительно этого ребра на два подмножества (i,j) и (i*,j*).

Таблица 18 - Определяем ребро ветвления

A4

A5

A6

di

A3

0(2)

1

0

1

A5

1

0

0(1)

1

A7

10

0(1)

0(0)

0

dj

1

1

0

0

Наибольшая сумма констант приведения равна (1 + 1) = 2 для ребра (A3,A4), следовательно, множество разбивается на два подмножества (A3,A4) и (A3*,A4*).

Нижняя граница гамильтоновых циклов этого подмножества (таблица 19):

Таблица 19 - Находим нижнюю границу гамильтонового цикла

A4

A5

A6

di

A3

0

1

0

1

A5

1

0

0

0

A7

10

0

0

0

dj

1

0

0

2

В результате получим другую сокращенную матрицу (2 x 2), которая подлежит операции приведения.

После операции приведения сокращенная матрица будет иметь вид (таблица 20):

Таблица 20 - Сокращенная матрица

A5

A6

di

A5

0

0

0

A7

0

0

0

dj

0

0

0

Поскольку нижняя граница этого подмножества (A3,A4) меньше, чем подмножества (A3*,A4*), то ребро (A3,A4) включаем в маршрут.

В соответствии с этой матрицей включаем в гамильтонов маршрут ребра (A5,A6) и (A7,A5).

В результате по дереву ветвлений гамильтонов цикл образуют ребра:

(A2,A7), (A7,A5), (A5,A6), (A6,A3), (A3,A4), (A4,А1), (А1,A2),

Длина маршрута равна F(Mk) = 26

4. Создание приложения для решения задачи

4.1 Тестирование программы

Введем исходные данные в матрицу Edit'ов (рисунок 3):

Рисунок 3 - Ввод исходных данных

Нажимаем кнопку «Найти путь» и наблюдаем результат (рисунок 4):

Рисунок 4 - Результат работы

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

4.2 Руководство пользователя

Запустив приложение Kommivoadger.exe, перед Вами откроется окно, предоставляющее возможность решать задачу коммивояжера метод ветвей и границ с максимальным количеством городов, равным 10.

В поле слева, перед вами представлено условие задачи в общем виде, если Вы ни разу не встречались с задачами подобного типа, то есть возможность прочитать теоретический материал, используя меню вкладки «Справка» пункт «Кто такой коммивояжер?». Если Вам необходимо вернуться к условиям задачи, то для этого имеется необходимая кнопка «Вернуться к условиям задачи».

В данной программе есть возможность 2 способами вводить данные:

Ниже, под условием, в сплывающем списке, необходимо выбрать количества городов, справа, вручную вводим соответствующие данные о расстоянии между городами. После ввода и сверки правильности ввода, нажимаем на кнопку «Найти путь». Вследствие чего, мы можем наблюдать, что появилось значение у «Длины пути», соответствующее минимальному значению, а так же «Оптимальный путь», показывающий последовательный обход городов. Введенные данные можно сохранить, что позволит, в дальнейшем не вводить их повторно. Для этого в меню, во вкладке «Файл» выбираем пункт «Сохранить» и выбираем путь. Не забываем вводить имя файла, а так же обратите внимание, что файл должен иметь формат *kom.

Если у Вас уже имеется сохранений файл, то через меню, во вкладке «Файл» выбрать «Открыть». Тем самым, у нас автоматически заполнятся значения ячеек. Дальше нажимаем на кнопку «Найти путь», вследствие чего мы увидим решение данной задачи методом ветвей и границ.

Заключение

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

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

Данная тема, по моему мнению, будет всегда актуальна, так как наш мир все больше и больше становится связанным на отношениях с торговлей, а в этой сфере, задачи, связанные с нахождением кратчайшего пути просто необходимы. Даже мы, того не подозревая, практически каждый день сталкиваемся с данными типами решения задач: к примеру, Вам необходимо добраться до какого то место назначения, Вы непроизвольно будет составлять алгоритм своих действий. На каком автобусе Вам будет быстрее доехать? На какой из улиц, в данное, время есть пробки, и попадете ли Вы в нее? Где выйти и с какой стороны лучше обойти? Эти и многие вопросы начинают тревожить наше сознание. Даже когда Вы пользуетесь GPS, он, по предоставленным ему сведениям (о пробках, о месте нахождения и месте назначения, о погодных условиях и пр.) предоставляет Вам один из самых коротких и удобных, для Вас маршрутов.

Данная мне задача, о путнике - коммивояжере, также связана с передвижением. Ему необходимо выйти из одного города, пройти по всем и вернуться обратно, причем по самого минимальному пути, дабы он не располагает ни излишками средств, ни излишками времени.

Решив ее аналитическим, а также программным способом, использую язык программирования Delphi, я убедилась, в правильности своего решения.

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

В ходе решения задачи была составлена программа на языке Delphi 7, которая в дальнейшем была описана в курсовой работе. Программа предназначена для решения задач, не превышающих 10 городов, методом ветвей и границ.

Список использованных источников

1. Бурков, В.Н., Заложнев, А.Ю., Новиков, Д.А. Теория графов в управлении организационными системами. - Москва: Синтег, 2001.

2. Новиков, Ф.А. Дискретная математика для программистов. - Санкт-Петербург: изд. дом «Питер», 2002.

3. Новиков, Ф.А. Дискретная математика: Учебник для вузов. Стандарт третьего поколения. - Санкт-Петербург: изд. дом «Питер», 2011.

4. Прилуцкий, М.Х. Математические основы информатики. Нижний Новгород: Нижег.гос.ун-т, 2000.

5. Партыка Т.Л., Попов И.И. Математические методы - Москва: Форум, 2005.

Размещено на Allbest.ru

...

Подобные документы

  • Постановка и решение дискретных оптимизационных задач методом дискретного программирования и методом ветвей и границ на примере классической задачи коммивояжера. Этапы построения алгоритма ветвей и границ и его эффективность, построение дерева графов.

    курсовая работа [195,5 K], добавлен 08.11.2009

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

    курсовая работа [3,5 M], добавлен 08.08.2013

  • Задача о ранце как задача комбинаторной оптимизации. Задача о загрузке, рюкзаке, ранце. Постановка и NP-полнота задачи. Классификация методов решения задачи о рюкзаке. Динамическое программирование. Метод ветвей и границ. Сравнительный анализ методов.

    курсовая работа [1,7 M], добавлен 18.01.2011

  • Постановка задачи о коммивояжере. Нахождение оптимального решения с применением метода ветвей и границ. Основной принцип этого метода, порядок его применения. Использование метода верхних оценок в процедуре построения дерева возможных вариантов.

    курсовая работа [167,8 K], добавлен 01.10.2009

  • Возникновение информатики во второй половине XX столетия. Теория графов. Понятие и терминология теории графов. Некоторые задачи теории графов. Математическая логика и теория типов. Теория вычислимости и искусственный интеллект.

    реферат [247,4 K], добавлен 15.08.2007

  • Моделирование передвижения муравьев. Метод ветвей и границ, ближайшего соседа. Ограничения, накладываемые на агента в стандартной постановке задачи коммивояжера. Использование графа видимости в алгоритме муравья. Структура данных алгоритма муравья.

    дипломная работа [1,7 M], добавлен 07.02.2013

  • Математическая модель решения задачи коммивояжера. Поиск кратчайшего замкнутого пути обхода нескольких городов и возвращения в исходную точку. Описание программы и результатов ее тестирования. Основная форма программы после вывода конечных данных.

    курсовая работа [603,3 K], добавлен 21.10.2012

  • Методы ветвей и границ первого и второго порядка. Оптимальный и пассивный поиск. Недостатки метода Ньютона. Метод золотого сечения. Примеры унимодальных функций. Динамическое и линейное программирование. Метод Жордана-Гаусса. Решение задачи коммивояжера.

    курсовая работа [1,1 M], добавлен 20.07.2012

  • Концептуальная модель операции. Математическая постановка задачи. Описание метода ветвей и границ, прямого перебора. Проектирование сценария диалога. Описание структур данных. Ручная реализация решения задачи с помощью алгоритма Литла и перебора.

    курсовая работа [202,6 K], добавлен 14.12.2013

  • Постановка линейной целочисленной задачи. Метод отсекающих плоскостей. Дробный алгоритм решения полностью целочисленных задач. Эффективность отсечения Гомори. Сравнение вычислительных возможностей метода отсекающих плоскостей и метода ветвей и границ.

    курсовая работа [178,2 K], добавлен 25.11.2011

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

    курсовая работа [2,0 M], добавлен 12.02.2013

  • Применение теории графов и алгоритмов на графах среди дисциплин и методов дискретной математики. Граф как совокупность двух множеств. Основные способы численного представления графа. Элементы и изоморфизмы графов. Требования к представлению графов в ЭВМ.

    курсовая работа [162,2 K], добавлен 04.02.2011

  • Модификация алгоритма RPC таким образом, чтобы он не требовал входного параметра, но сохранил свою гибкость при решении задачи нахождения максимальной клики для разных графов. Метод ветвей и границ. Построение функции-классификатора. Листинг алгоритма.

    курсовая работа [197,8 K], добавлен 06.10.2016

  • Сущность и назначение основных алгоритмов оптимизации. Линейное программирование. Постановка и аналитический метод решения параметрической транспортной задачи, математическая модель. Метод решения задачи об оптимальных перевозках средствами MS Excel.

    курсовая работа [465,6 K], добавлен 24.04.2009

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

    курсовая работа [4,0 M], добавлен 05.03.2012

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

    курсовая работа [1,1 M], добавлен 03.07.2011

  • Оптимизация решения задачи с помощью алгоритма отжига. Анализ теории оптимизации как целевой функции. Метод градиентного спуска. Переменные и описание алгоритма отжига. Представление задачи коммивояжера через граф. Сведение задачи к переменным и решение.

    курсовая работа [784,0 K], добавлен 21.05.2015

  • Особенности решения транспортной задачи распределительным методом и анализ результатов. Построение математической модели, алгоритма. Создание программы для решения транспортной задачи распределительным методом в программной среде Borland Delphi 7.

    курсовая работа [1000,7 K], добавлен 23.06.2012

  • История и термины теории графов. Описание алгоритма Дейкстры. Математическое решение проблемы определения кратчайшего расстояния от одной из вершин графа до всех остальных. Разработка программы на объектно-ориентированном языке программирования Delphi 7.

    контрольная работа [646,9 K], добавлен 19.01.2016

  • История возникновения, основные понятия и теоремы теории графов. Способы предоставления графов в компьютере. Матрица смежности, инциденций, списки смежности и массив дуг. Программа определения кратчайшего пути в графах. Язык программирования Delphi.

    курсовая работа [823,5 K], добавлен 24.11.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.