Неужели задачу коммивояжёра впервые поставил австрийский художник?
Речь о конкретной конфигурации для 17 пунктов.
И эта конфигурация к нам сюда из Московского Энергетического Института приплыла.
Может, что-то на подсознательном .уровне..
Амальгама |
Привет, Гость! Войдите или зарегистрируйтесь.
Вы здесь » Амальгама » Лукоморье 2.0 » Другая тень
Неужели задачу коммивояжёра впервые поставил австрийский художник?
Речь о конкретной конфигурации для 17 пунктов.
И эта конфигурация к нам сюда из Московского Энергетического Института приплыла.
Может, что-то на подсознательном .уровне..
Ага! Вот же она! Не в ту папку сохранил...
Пятая, и последняя итерация:
Все восемь пунктов чудесным образом разбились на пары,
и осталось всего четыре пункта!
В сухом остатке получилось четыре всего лишь пункта, которые, если их соединить последовательно в правильном порядке KLMNK,
образуют выпуклый четырехугольник и, как мы уже знаем, это есть кратчайший маршрут на этих четырех пунктах.
Теперь нужно двинуться обратно, строго соблюдая ту же последовательность действий, только в обратном порядке,
то-есть переходя от четырех пунктов к восьми, затем к девяти, десяти, тринадцати, и , наконец, к исходным семнадцати пунктам.
Поскольку "есть время объединять пункты, и есть время разделять пункты".
Но мы пока этого делать не будем.
Потому что переход от четырех сразу к восьми пунктам, совсем не сложный, но пестрит разноцветными линиями, так что в глазах рябит.
Чтобы как-то объяснить алгоритм обратного разделения пунктов, и что при этом происходит, я перейду по накатанной схеме от четырех пунктов к трем, а потом быстренько -обратно к четырем - пара действий лишних в плане решения задачи коммивояжера, но весьма полезных в методическом плане, для понимания алгоритма, и его работы.
Итак, делаем шестую итерацию:
Получаем один взаимно-кратчайший маршрут, между пунктами M и N, находим последний медианный пункт Р, и получаем треугольник KLP, крайнюю точку нашего движения на уменьшение числа пунктов.
Отредактировано Лукомор (2019-09-13 08:45:02)
знал бы где упал
постелил бы бабу с возу
знал бы где упал
постелил бы бабу с возу
Баба с возу
вылетит - не поймаешь!
Отредактировано Лукомор (2019-08-20 11:47:21)
Крайняя итерация заключалась в том, что отрезок MN мы заменили медианным пунктом P,
который мы соединили с пунктами K и L.
Высадив бабу с воза, и развернув кобылу на обратный путь, мы должны проделать следующее:
восстановить отрезок MN, исключив пункт Р,
и
соединить концы восстановленного отрезка - пункты М и N - с пунктами К и L.
В отличие от отдельного пункта, который можно соединить с двумя пунктами единственным образом,
отрезок с двумя теми же пунктами можно соединить "либо так, либо наоборот".
И нам необходимо выбрать такую "полярность" подключения, чтобы суммарная длина двух соединительных отрезков была минимальной.
Компьютер это посчитает, сделав перебор из двух вариантов, а мы с вами видим и так, что сумма длин двух "красных" линий, больше, чем сумма длин двух "зеленых".
Вот эти зеленые и выберем.
Дальше я везде буду придерживаться такой красно-зеленой нотации.
Теперь нам нужно перепрыгнуть от четырех пунктов к восьми.
Мы восстанавливаем отрезки:
№3 - Е (исключив из рассмотрения пункт К)
№9 - B (исключив пункт L)
№0 - F (исключив пункт M)
№1 - J (исключив пункт N)
Эти четыре отрезка надо соединить теперь так, чтобы получился замкнутый маршрут минимальной длины.
Чтобы не делать полный перебор всех вариантов, я разбиваю процедуру на два этапа.
На предварительном этапе, благо его можно проводить для каждого из четырех новых отрезков по отдельности, этот выбор никак не влияет на соседние отрезки,
я выбираю отрезок (например №9 - В) и сравниваю, опять же, два варианта суммы расстояний от его концов до старых пунктов, K и M, как будто трех других новых отрезков еще нет.
Так я поступаю независимо с каждым новым отрезком, полагая на время, что это единственный новый отрезок, а остальные все точкипункты из прошлой итерации.
Выясняется (я всё посчитал), что:
Сумма длин отрезков (№3 - L) и (E - N)
меньше чем (№3 - N) и (E - L).
Сумма длин отрезков (№9 - K) и (B - M)
меньше чем (№9 - M) и (B - K).
Сумма длин отрезков (№0 - N) и (F - L)
меньше чем (№0 - L) и (F - N).
Сумма длин отрезков (№1 - K) и (J - M)
меньше чем (№1 - M) и (J - K).
Таким нехитрым подсчетом на первом этапе мы выяснили,
в направлении какого конкретно нового отрезка пойдет соединительная линия от каждого из восьми новых пунктов.
На втором этапе я выясняю окончательно, с какими пунктами конкретно будет соединяться каждый новый пункт.
Для этого мы попарно соединяем пункты, из которых более короткие пути ведут во встречных направлениях.
Мы выяснили на предварительном этапе, что из пункта №3 соединительная линия пойдет в сторону пункта L,
то -есть, теперь уже в направлении пары, (№9 - В) ,
а от точки №9 - в направлении пункта К, то-есть теперь уже в направлении пары (№3 - Е).
Из этих четырех пунктов совпадают только два №3 и №9.
Вот их мы и соединим окончательно.
Аналогично, из пункта Е будем двигаться в направлении пунктов №1 и J, из пункта №1 в направлении №3 или Е.
Соединяем, соответственно, совпавшие пункты №1 и Е.
Точно также совпадут пункты B и F, №0 и J.
Окончательная картинка получившегося кратчайшего маршрута через 8 пунктов такова:
А я сейчас пойду за хлебушком, и еще по кратчайшему маршруту по восьми пунктам на базар, а по возвращении мы продолжим решать нашу задачку...
Отредактировано Лукомор (2019-09-13 08:45:59)
При объединении пунктов, мы переходили от 9 пунктов к 8.
Теперь нас ждет обратный переход от 8 пунктов к 9.
Для моих постоянных читателей,
которые вместе со мной совершили героический переход от четырех пунктов сразу к восьми пунктам -
это семечки.
Действительно, вот окончательная схема для 8 пунктов.
Мы должны точку J разделить на точки №15 и H.
Точка J была соединена с точками №0 и №1.
Имеем 2 варианта полярности соединения:
Либо №15 - №0 и Н - №1,
либо наоборот - №15 - №1 и Н - №0.
прямым расчетом находим, что первый вариант предпочтительнее (зеленые линии).
Соединяем.
Отредактировано Лукомор (2019-08-20 12:12:22)
легко понять ...(с)
легко понять ...(с)
Там всё просто.
Что непонятно, то либо пропускаем, либо сразу задаем вопросы, а то я потом тоже забуду, о чем шла речь...
Я дико извиняюсь, но мой эклер подсказывает, что я где-то похожее с группированием видел... Но я своему эклеру не верю. Он карамелизирован.
Двухфазные (кластерные) алгоритмы.
Смысл подхода двухфазных алгоритм состоит в разбиении задачи на две операции — группирование вершин для будущего маршрута (кластеризация) и решение задачи коммивояжера (ЗК) для каждой из этих групп. Двухфазные методы также делятся на еще две группы алгоритмов:
1) сначала происходит кластеризация, затем выполняется поиск решения ЗК;
2) сначала ищется решение ЗК, а затем оно делится на несколько маршрутов. При этом ЗК решается на всем исходном множестве вершин.
Смысл подхода двухфазных алгоритм состоит в разбиении задачи на две операции — группирование вершин для будущего маршрута (кластеризация) и решение задачи коммивояжера (ЗК) для каждой из этих групп.
- Знаете ли вы, кто был главным противником антиалкогольной компании,
объявленной Горбачевым?
- Пьяницы?
- Некрасивые женщины!
ЗЫ: Карлсон улетел, но угрожал вернуться.
ЗЗЫ: Цифру назови - длину кратчайшего маршрута для этой задачи...
Отредактировано Лукомор (2019-08-20 12:28:40)
попугай усевшись на плече Кацмана
заорал гнусным голосом
- НА ГЛОБУС !
-НА ГЛОБУС !!
ЗЫ: Карлсон улетел, но угрожал вернуться.
А чо сразу бегемот?
А мы, пока Шарпер угадывает цифру для длины кратчайшего маршрута, поднимаемся от 9 точек к 10.
Пункт Н мы заменяем обратно отрезком №13 - G.
Снова из двух возможных вариантов выбираем один, более короткий (зеленые линии, не красные), получается вот такая хрень:
На следующей итерации заменяем отрезки E, F, G на отрезки №11 - А, №14 - С, №4 - D:
И, наконец, переходим к 17 пунктам:
В результате не сложных преобразований переходим к заключительному варианту:
И этот вариант, внезапно, дает более короткий маршрут,
чем метод ближайшего соседа после распутывания всех явных и скрытых петель,
после всех возможных и невозможных ухищрений:
452.472 против 453.182.
Мы вновь победили!!!
Но и это еще не всё!
Внезапно мы замечаем, что скрытая петля, между пунктами №8 и №15, здесь вновь присутствует,
и можно ее распутать, как мы уже делали ранее, сократив и этот маршрут:
Тем самым, впервые, но не в последний раз, пробита психологическая отметка в 450 км.
для этой задачи!
Новый рекорд : 448.150.
УРА, товарищи!!!
Отредактировано Лукомор (2019-08-20 13:17:18)
А чо сразу бегемот?
Цифру назови - длину кратчайшего маршрута для этой задачи...
Цифру назови - длину кратчайшего маршрута для этой задачи...
Откуда мне ее знать? Я ваще примус починяю...
А чо сразу бегемот?
Вот по моим наблюдениям, пеккемоот никкоктаа не сраазу.
Это не твой метод. Ещё при советской власти реализовали
Я дико извиняюсь, но мой эклер подсказывает, что я где-то похожее с группированием видел...
Двухфазные (кластерные) алгоритмы.
ЭхЪЪ!
Недаром говорят: "Как свой метод назовёте, так критики и слетятся!"
Надо всё-таки было назвать, как и задумывал изначально,
не "Метод Объединения Пунктов", а просто:"Метод Пластилиновой Вороны"!
Помните там , в эпическом мультике,
одна пластилиновая картинка скатывалась до куска пластилина,
а потом из этого куска раскатывалась совсем другая картинка?!
Это про мой метод, как раз!
Ничего, вот свой следующий метод, про который я расскажу чуть позднее я назвал "Метод Термоусадки"!
Замучитесь гуглить, нет ничего похожего!
Отредактировано Лукомор (2019-08-20 18:27:04)
Недаром говорят: "Как свой метод назовёте, так критики и слетятся!"
Да я -то чо? Я ничо. Меня интересуют только точные методы, так что я просто услышал звон и решил проинформировать
"Метод Термоусадки"!
попугай усевшись на плече Кацмана
заорал гнусным голосом
- НА ГЛОБУС !
-НА ГЛОБУС !!
Что-то я утомился в таком темпе флудить...
Беру краткосрочный отпуск на три дня.
А где-то ориентировочно в субботу, но не позднее понедельника,
напомню о своем втором открытии, и изложу своё второе изобретение,
в виде метода решения задачи коммивояжера, на этом втором открытии полностью базирующемся.
Если же до конца понедельника не объявлюсь:
"Значит, либо одно из двух,
либо одно из трёх!"© Лукомор
так что я просто услышал звон и решил проинформировать
Так информируй уже! :
1) сначала происходит кластеризация, затем выполняется поиск решения ЗК;
2) сначала ищется решение ЗК, а затем оно делится на несколько маршрутов. При этом ЗК решается на всем исходном множестве вершин.
Вот я только что представил учёному содружеству "Амальгама" абсолютно новый алгоритм, сиречь метод,
он который из двух, тобою проинформированных?..
Может ты просто слышал звон?
Так это в церкви колокола звонили...
или трамвай проехал...
Отредактировано Лукомор (2019-08-20 18:53:39)
Вот отвлекся тут на бегемота, и забыл, что надо подвести итоги.
Так вот, представленный метод свободен от серьезных недостатков,
присущих методу "ближайшего соседа".
!. Он никогда не дает, в результате его применения,
маршрутов с пересечением отрезков (явных петель),
которые гарантированно отсекаются на этапе разделения пунктов.
2. Он не зависит от выбора начального пункта,
поскольку на первой итерации этапа объединения пунктов
выбираются первые участки маршрута сразу от всех пунктов одновременно.
К сожалению представленный метод имеет серьезный недостаток.
Он не находит скрытые петли, из-за чего найденный маршрут не является абсолютно кратчайшим.
Меня интересуют только точные методы,
Как говорил Остап Бендер:
"Гарантию дает только страховой полис!".
Применительно к задаче коммивояжера: точный метод всего лишь один - полный перебор!
Все остальные методы - эвристические, в большей или в меньшей степени эффективные...
Применительно к задаче коммивояжера: точный метод всего лишь один - полный перебор!
Да. И не факт, что не существует способа
Применительно к задаче коммивояжера: точный метод всего лишь один - полный перебор!
Все остальные методы - эвристические, в большей или в меньшей степени эффективные...
Топик можно закрывать?
То есть, все авторы алгоритмов автоматически делятся на перебирастов и эвреев. С этого момента поподробнее, пожалуйста, а то тут уже лавочку закрывать собираются.
делятся на перебирастов и эвреев
Я Вам это ужо припомню!
Топик можно закрывать?
Не факт!
Мне вот пришла такая мысль в сознание:
Возможно для решения задачи коммивояжера за полиномиальное время нужно пользоваться не одним каким-то методом, а гибко и плавно переходить с одного метода на другой совершенствуя решение, подобно тому, как сложное изделие не изготавливается при помощи одной лишь кувалды, а требует соответствующего инструментария и.т.п.
Вот вечер понедельника, и я готов продолжить отчет о своих изысканных изысканиях в причудливом и загадочном мире коммивояжеров.
Короче,
"Я тут порисую... немножко!"
(с) Лукомор
Возможно для решения задачи коммивояжера за полиномиальное время нужно пользоваться не одним каким-то методом, а гибко и плавно переходить с одного метода на другой совершенствуя решение, подобно тому, как сложное изделие не изготавливается при помощи одной лишь кувалды, а требует соответствующего инструментария и.т.п.
Мне так кажется, что для больших карт должны быть эффективны алгоритмы с фрагментацией карты. Там должны быть методы крупного уровня, которые оптимально рубят карту на куски, и мелкого уровня, которые строят тракеторию внутри каждого куска.
Ну типа, на карте есть есть десять городков по 10 точек в каждом, маршрут строится внутри каждого городка, а потом один раз между городками. Такая задача много легче, чем для 100 равноценных точек на едином пространстве.
В принципе, таких уровней может быть и не два, а больше.
И да, еще могут быть разные алгоритмы для разных типов карт.
Я глобально согласен с тем, что такие комбинированные подходы будут плодотворнее, чем попытки построить единый универсальный алгоритм для любых карт с любым количеством точек.
Вы здесь » Амальгама » Лукоморье 2.0 » Другая тень