Проектирование алгоритмов. Сортировка методом Грубой силы. Задача про Коммивояжёра (лекция 10)

Содержание

Слайд 2

Определение. Немного истории Применение алгоритма Алгоритмы построения План:

Определение.
Немного истории
Применение алгоритма
Алгоритмы построения

План:

Слайд 3

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

Ключевые слова:

алгоритм, свойства алгоритма: дискретность, детерминированность, понятность, результативность, конечность, массовость, исполнитель

алгоритма, сложность алгоритма
Слайд 4

Метод грубой силы

Метод грубой силы

Слайд 5

Слайд 6

Слайд 7

Пример сортировки методом «грубой силы»: сортировка выбором и пузырьком 28 16

Пример сортировки методом «грубой силы»: сортировка выбором и пузырьком

28

16

0

29

3

-4

56

-5

Слайд 8

Слайд 9

Исчерпывающий перебор Исчерпывающий перебор - подход к комбинаторным задачам с позиции

Исчерпывающий перебор

Исчерпывающий перебор - подход к комбинаторным задачам с позиции грубой

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

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

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

Слайд 10

Эйлеровы графы Работа Эйлера, датированная 1736 годом, положила начало теории графов.

Эйлеровы графы

Работа Эйлера, датированная 1736 годом, положила начало теории графов.
В этой

работе Эйлер изложил теорию, позволившую решить задачу о мостах Кенигсберга.
Перейдем к изложению задачи о кенигсбергских мостах. Она состоит в следующем.
Слайд 11

Эйлеровы графы Задача возникла в прусском городе Кенигсберг на реке Прегел.

Эйлеровы графы

Задача возникла в прусском городе Кенигсберг на реке Прегел. На

реке Прегел было два острова, один из которых – остров Кнайпхоф (это больший остров). Этот район и семь его мостов показаны на рисунке.
Слайд 12

Жители Кенигсберга интересовались, могут ли они, начав путь с одного участка

Жители Кенигсберга интересовались, могут ли они, начав путь с одного участка

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

Эйлеровы графы

Слайд 13

Жители Кенигсберга не могли найти такого пути. Задача заключалась в следующем:

Жители Кенигсберга не могли найти такого пути.
Задача заключалась в следующем: найти

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

Эйлеровы графы

Слайд 14

Эйлеровы графы

 

Эйлеровы графы

Слайд 15

Эйлеровы графы

 

Эйлеровы графы

Слайд 16

Эйлеровы графы

 

Эйлеровы графы

Слайд 17

Гамильтоновы графы Эйлеров цикл проходит через каждое ребро графа (один раз)

Гамильтоновы графы

Эйлеров цикл проходит через каждое ребро графа (один раз) и

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

Определение 2 Гамильтонов цикл в графе – это цикл, который проходит

Определение 2
Гамильтонов цикл в графе – это цикл, который проходит через

каждую вершину графа один раз.
Граф называется гамильтоновым, если он имеет гамильтонов цикл.
Этой терминологией мы обязаны игре, изобретенной в 1857 ирландским математиком Сэром Уильямом Роуэном Гамильтоном.

Гамильтоновы графы

Слайд 19

Сэр Уильям Роуэн Гамильтон (1805 – 1865) был выдающимся ирландским математиком.

Сэр Уильям Роуэн Гамильтон (1805 – 1865) был выдающимся ирландским математиком.

Закончив университет, в возрасте 22 лет он был избран профессором астрономии и Королевским Астрономом Ирландии.
Однако, его вклад в астрономию невелик; его наиболее значительные результаты относятся к математике и физике.

Гамильтоновы графы

Слайд 20

В 1843 он открыл кватернионы – одну из разновидностей обобщения комплексных

В 1843 он открыл кватернионы – одну из разновидностей обобщения комплексных

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

Гамильтоновы графы

Слайд 21

Итак, в 1857 году Уильям Роуэн Гамильтон придумал игру. Существует несколько

Итак, в 1857 году Уильям Роуэн Гамильтон придумал игру.
Существует несколько

версий того, как это произошло. По одной из версий он описал эту игру в письме к другу. Согласно другой, он действительно изобрел игру и продал ее производителю игрушек.

Гамильтоновы графы

Слайд 22

Гамильтоновы графы

 

Гамильтоновы графы

Слайд 23

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

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

раз, и вернуться в исходный город.

Гамильтоновы графы

Слайд 24

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

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

проходит через каждую вершину графа ровно один раз?

Гамильтоновы графы

Слайд 25

Ответ на последний вопрос решает головоломку Гамильтона, так как построенный граф

Ответ на последний вопрос решает головоломку Гамильтона, так как построенный граф

изоморфен графу, составленному из вершин и ребер додекаэдра.

Гамильтоновы графы

Слайд 26

Решение головоломки Гамильтона показано на рисунке. Гамильтоновы графы

Решение головоломки Гамильтона показано на рисунке.

Гамильтоновы графы

Слайд 27

НАХОЖДЕНИЕ ГАМИЛЬТОНОВА КОНТУРА МИНИМАЛЬНОЙ ДЛИНЫ. ЗАДАЧА КОММИВОЯЖЕРА​

НАХОЖДЕНИЕ ГАМИЛЬТОНОВА КОНТУРА МИНИМАЛЬНОЙ ДЛИНЫ.
ЗАДАЧА КОММИВОЯЖЕРА​

Слайд 28

Слово «гамильтонов» связано с именем известного ирландского математика У. Гамильтона, которым

Слово «гамильтонов» связано с именем известного ирландского математика У. Гамильтона, которым

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

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

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

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

Несмотря на внешнее сходство постановок, задачи распознавания эйлеровости и гамильтоновости графа

Несмотря на внешнее сходство постановок, задачи распознавания эйлеровости и гамильтоновости графа

принципиально различны. Легко узнать, является ли граф эйлеровым и, в случае положительного ответа, алгоритм Флёри позволяет достаточно быстро построить один из эйлеровых циклов. Ответить на вопрос, является ли данный граф гамильтоновым, как правило, очень трудно.​

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

Слайд 31

Что такое «задача коммивояжёра» Благодаря ей у нас есть навигаторы и

Что такое «задача коммивояжёра»

Благодаря ей у нас есть навигаторы и системы

принятия решений.
В 19-м и 20-м веке по городам ездили коммивояжёры (сейчас их называют «торговые представители»). Они ходили по домам и предлагали людям купить разные товары. Тактика была такой: коммивояжёр приезжал в город, обходил большинство домов и отправлялся в следующий город. Города были небольшими, поэтому обойти всё было вполне реально.
Чем больше городов посетит коммивояжёр, тем больше домов он сможет обойти и больше заработать с продаж. Самая большая проблема, которая всегда стояла перед коммивояжёрами, звучала так:
как быстрее всего объехать все города в этом районе?
Слайд 32

В 19-м веке все добирались из города в город на лошадях

В 19-м веке все добирались из города в город на лошадях

и повозках, поэтому время полностью зависело от расстояния между городами. С другой стороны, коммивояжёру нужно было вернуться домой после поездок, поэтому классическая задача коммивояжёра звучит так:
как найти самый короткий маршрут между городами, чтобы побыть в каждом хотя бы по одному разу и вернуться домой.
Кажется, что задача очень простая и современные компьютеры могут быстро её решить, но это не так. Если городов будет больше 66, то компьютеру понадобится несколько миллиардов лет, чтобы найти правильный ответ. Давайте выясним, почему это так.
Слайд 33

Что такого особенного в этой задаче? На самом деле это задача

Что такого особенного в этой задаче?

На самом деле это задача не про расстояния,

а про поиск оптимального решения по выбранному параметру в сложной системе. Дело в том, что расстояние — это только одна характеристика маршрута. А могут быть и другие:
Время в пути. Время не обязательно напрямую зависит от расстояния. Например, в Санкт-Петербурге можно пойти ночью самым коротким путём и застрять на разводке мостов. По расстоянию это будет километр, а по времени — три часа.
Количество и частота. У нас могут быть лимиты на посещения: не более или не менее определённого количества городов. В классической задаче — нужно побыть в каждом городе не менее одного раза. Также могут быть ограничения вроде «не более одного раза» или «побывать в каждом городе дважды».
Направление движения. Не по всем дорогам можно проехать в обе стороны — есть направления с односторонним движением. Это значит, например, что из одной точки до другой не получится доехать напрямую. Значит, придётся выбирать другой маршрут.
Зависимости. Например, вам нужно по пути отвезти документы в одно учреждение, но перед этим забрать их в другом. Если не выполнить этот порядок, поездка теряет смысл, потому что не выполнено важное условие.
Всё сразу. Может оказаться так, что нам нужно построить такой маршрут:
посетить все города центрального региона самым коротким путём;
в каждом городе посмотреть три главных достопримечательности;
потратив минимум денег на дорогу и проживание;
побывать в каждом городе не больше одного раза;
и успеть всё это за 5 дней. 
Слайд 34

Всё и сразу не получится Возьмём для примера маршрут по указанным

Всё и сразу не получится

Возьмём для примера маршрут по указанным городам.

В нём 5 условий:
Все города региона.
Каждый город проезжать не более одного раза.
Общая длина маршрута должна быть минимальной.
Общая сумма потраченных денег на дорогу и проживание должна быть минимальной.
Общая длительность поездки не должна превышать 5 дней.
Скорее всего, ни нам, ни компьютеру не получится построить такой маршрут, чтобы выполнить все условия сразу. Это окажется физически невозможно.
Чтобы такого не было, заранее выбирают одно или два критичных условия, а остальное как получится. Например, нам важно уложиться в 5 дней. Вторым важным параметром, допустим, выберем просто посещение каждого города. Вот что у нас получится в итоге:
⚠️ Все города региона.
⚠️ Общая длительность поездки не должна превышать 5 дней.
Каждый город можно проезжать сколько угодно раз.
Общая длина маршрута — как получится.
Хотелось бы, чтобы общая сумма потраченных денег на дорогу и проживание должна быть минимальной, но на всякий случай возьмём с собой денег с запасом.
Теперь нам гораздо проще построить такой маршрут, потому что есть главные критерии, а остальным можно пожертвовать.
Слайд 35

Почему это сложно для компьютера Возьмём простой случай: у нас есть

Почему это сложно для компьютера

Возьмём простой случай: у нас есть города

и таблица расстояний между ними. Задача — найти самый короткий маршрут посещения всех городов ровно по одному разу, без возвращения в первый город.
Если у нас в таблице 4 города, то вариантов первого выбора у нас тоже 4.
Когда мы выбрали первый город, то у нас есть 3 варианта, в какой город поехать вторым.
Во втором городе у нас вариантов следующего города осталось 2 — третий либо четвёртый.
В третьем городе у нас остаётся всего один вариант, куда поехать для завершения маршрута.
Так как в города мы можем поехать в любой последовательности, то всего у нас получается 4 × 3 × 2 × 1 = 24 варианта маршрута. Это называется факториал числа, когда нам нужно последовательно перемножить все числа от 1 до этого числа.
Слайд 36

Когда у нас 24 варианта и всего один параметр — минимальный

Когда у нас 24 варианта и всего один параметр — минимальный

маршрут, — компьютер легко с этим справится простым перебором. Но если таких городов будет уже 15, у нас появится почти полтора миллиарда комбинаций маршрутов. Это уже сложнее, но за час-полтора мощный компьютер справится и с этим. И это только с одним параметром!
Если мы к 15 добавим ещё два города, то получим уже 355 миллиардов комбинаций. Такой объём вычислений потребует гораздо больше времени. Теоретический предел для компьютера — 66 городов. Если городов 67, то число возможных комбинаций маршрутов будет равно 36×1093 — это больше предела Бремерманна. Для справки, в Узбекистане 120 городов.

Почему это сложно для компьютера

Слайд 37

? Что за предел Бремерманна Представьте компьютер размером с нашу Землю

? Что за предел Бремерманна
Представьте компьютер размером с нашу Землю на современных транзисторных

процессорах. В нём миллиарды миллиардов транзисторов, и все они работают на максимально возможной частоте. Такой компьютер может обработать 1075 операций в секунду. Если такой компьютер будет работать столько, сколько существует Земля, то за всё это время он сможет обработать 1093 бит информации. А при 67 городах наше число маршрутов получается в 36 раз больше, поэтому компьютер никогда не сможет рассчитать нужный нам маршрут.
Слайд 38

И что тогда делать? Если нам нужен самый короткий идеальный маршрут,

И что тогда делать? 
Если нам нужен самый короткий идеальный маршрут, то мы сможем

его найти только для небольшого числа городов. Но если можно отойти от идеала и сделать маршрут чуть длиннее, то с этим компьютер уже может справиться.
Дело в том, что когда мы добавляем допустимую погрешность в решение, компьютеру становится намного проще найти ответ. В этом случае задача сводится к тому, чтобы подобрать любой маршрут, который укладывается в рамки допустимой погрешности. Для этого используют специальные алгоритмы, которые позволяют за приемлемое время найти маршрут с погрешностью 1% от минимальной длины.
Слайд 39

На алгоритмах решения задачи коммивояжёра построены все современные навигаторы в машинах

На алгоритмах решения задачи коммивояжёра построены все современные навигаторы в машинах

и телефонах. Ведь ровно это алгоритм и делает: ищет самый короткий маршрут между двумя точками, а в качестве промежуточных «городов» у него перекрёстки.
Но это не единственное применение этого алгоритма, ещё он используется:
для организации логистики и перевозок в крупных компаниях, чтобы строить оптимальные маршруты по времени, объёму груза и топливу;
в системах принятия решений, когда на входе есть много параметров и нужно найти оптимальную цепочку действий;
на производстве при организации конвейера, чтобы сократить время простоя и сделать сборку деталей максимально эффективной;
при составлении туристических маршрутов;
в экономике для анализа эффективности финансовых инструментов.

Где применяется

Слайд 40

Задача коммивояжёра Задача коммивояжёра — одна из самых известных задач комбинаторной

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

Задача коммивояжёра — одна из самых известных задач комбинаторной оптимизации,

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

Задача коммивояжёра Коммивояжер - не свободно путешествующий турист, а деловой человек,

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

Коммивояжер - не свободно путешествующий турист, а деловой человек, ограниченный

временными, денежными или какими-либо другими ресурсами. Гамильтонова задача может стать задачей о коммивояжере, если каждое из ребер снабдить числовой характеристикой. Это может быть километраж, время на дорогу, стоимость билета, расход горючего и т.д. Таким образом, условные характеристики дадут числовой ряд, элементы которого могут быть распределены между ребрами как угодно.
Слайд 42

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

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

1832 году книга с названием «Коммивояжёр — как он должен вести себя и что должен делать для того, чтобы доставлять товар и иметь успех в своих делах — советы старого курьера»

!

В книге описана задача, но математический аппарат для её решения не применяется. Зато в ней предложены примеры маршрутов для некоторых регионов Германии и Швейцарии.​
Ранним вариантом задачи может рассматриваться англ. Icosian Game Уильяма Гамильтона 19 века, которая заключалась в том, чтобы найти маршруты на графе с 20 узлами. Первые упоминания в качестве математической задачи на оптимизацию принадлежат Карлу Менгеру, который сформулировал её на математическом коллоквиуме в 1930 году.​

Слайд 43

Рассмотрим задачу о коммивояжере. Имеются n городов, расстояния (стоимость проезда, расход

Рассмотрим задачу о коммивояжере.
Имеются n городов, расстояния (стоимость проезда, расход горючего

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

Слайд 44

Будем считать, что задача коммивояжера задана в виде матрицы. Для получения

Будем считать, что задача коммивояжера задана в виде матрицы. Для получения

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

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

Слайд 45

Уточненная оценка снизу длин гамильтоновых контуров определяется в виде: Метод приведения

Уточненная оценка снизу длин гамильтоновых контуров определяется в виде:
Метод приведения матрицы

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

Для возможности применения математического аппарата для решения задачи её следует представить

Для возможности применения математического аппарата для решения задачи её следует представить

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

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

Слайд 47

Контрольные вопросы 1. Назовите основные предположения, которым должна удовлетворять модель ЛП.

Контрольные вопросы

1. Назовите основные предположения, которым должна удовлетворять модель ЛП.
2.

Назовите основные этапы формализации задачи ЛП.
3. Сформулируйте проблему, которую можно формализовать как задачу ЛП.
4. Дайте определение задачи ЛП.
5. Дайте определение допустимого решения задачи ЛП и допустимого множества решений задачи ЛП.
6. Что понимают под оптимальным решением задачи ЛП?
7. Дайте определение выпуклого множества.
8. Что такое крайняя (экстремальная) точка множества?
9. Какую структуру имеет множество допустимых решений задачи ЛП?
10. Сформулируйте алгоритм геометрического метода решения задачи ЛП.
11. В чем отличие решения задачи ЛП максимизации от задачи ЛП минимизации при геометрическом методе?
12. Сколько решений может иметь задача ЛП?
13. В чем сущность анализа оптимального решения на чувствительность?
14. Дайте определение активного (связывающего) ограничения.
15. Что такое дефицитный ресурс?
16. Что понимают под теневой (двойственной) ценой ресурса?
17. Чему равна теневая цена недефицитного ресурса?
18. Можно ли улучшить значение целевой функции, изменяя запас недефицитного ресурса?
19. Всегда ли изменение коэффициентов целевой функции приводит к изменению оптимального решения задачи ЛП?
Слайд 48

Используемая литература Основная: Кормен Т., Лейзерсон Ч., Ривест Р. «Алгоритмы. Построение

Используемая литература

Основная:
Кормен Т., Лейзерсон Ч., Ривест Р. «Алгоритмы.
Построение и анализ»,

2013 г.
Дополнительная:
1. Г.Шилтд Самоучитель С++. 5-е издание. “БХВ Петербург” 2010 г.
2. Колдаев Основы_алгоритмизации_и программирования. 2013 г.
3. Род Хаггарти «Дискретная математика для программистов» 2012 г.
4. Томас Х. Кормен «Алгоритмы. Вводный курс» 2014 г.
5. Г.Уоррен «Алгоритмические трюки для программистов», 2014 г.
Слайд 49

Интернет ресурсы 1. http://www.tuit.uz 2. http://www.atdt.uz 3. http://www.zivonet.uz 4. http://www.softportal.com 5. http://www.microsoft.com 6. http://www.wikipedia.org 7. http://www.intuit.ru

Интернет ресурсы

1. http://www.tuit.uz
2. http://www.atdt.uz
3. http://www.zivonet.uz
4. http://www.softportal.com
5. http://www.microsoft.com
6. http://www.wikipedia.org
7. http://www.intuit.ru