Как стать автором
Обновить

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

Время на прочтение 2 мин
Количество просмотров 11K
Алгоритмы *Математика *Научно-популярное
image

Натан Кляйн и его советники из Вашингтонского университета Анна Карлин и Шаян Гаран впервые за почти полвека смогли найти лучший способ решения задачи коммивояжера. Это одна из самых известных задач комбинаторной оптимизации, заключающаяся в поиске самого выгодного маршрута через указанные города с последующим возвратом в исходный город.
Читать дальше →
Всего голосов 20: ↑15 и ↓5 +10
Комментарии 6

Решение задачи коммивояжёра рекурсивным полным перебором

Время на прочтение 7 мин
Количество просмотров 40K
Программирование *Алгоритмы *
Из песочницы
Сформулируем задачу.
Дано N узлов, расположенных на плоскости. Задан входной узел (Вх) и выходной узел (Вых). Необходимо обнаружить кратчайший путь, охватывающий все узлы, начинающийся во входном узле, заканчивающийся в выходном узле и проходящий через каждый узел только один раз.

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

Однако обе эти формулировки при ближайшем рассмотрении оказываются частными случаями первоначальной формулировки.
Формулировка 1 подразумевает, что входным узлом может быть любой узел, а выходным — один из ближайших к нему. Что требует полного перебора всех ближайших узлов к произвольно выбранному узлу.
Формулировка 2 подразумевает, что входной узел задан, а выходным узлом может быть любой. Что требует полного перебора всех выходных узлов с последующим выбором кратчайшего пути из всех кратчайших.
Поэтому мы остановимся на первоначальной формулировке, и будем решать задачу в общем виде.
Читать дальше →
Всего голосов 13: ↑4 и ↓9 -5
Комментарии 16

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

Время на прочтение 3 мин
Количество просмотров 21K
Ненормальное программирование *Программирование *Алгоритмы *
В предыдущей публикации был рассмотрен алгоритм решения задачи коммивояжёра на плоскости рекурсивным полным перебором. Результат получился любопытным, но итоговый маршрут содержал очевидные неоптимальные участки. В предлагаемой заметке рассмотрен улучшенный алгоритм, который я назвал «рекурсивным жадным алгоритмом». Признаюсь сразу, итоговый маршрут в сравнении с рекурсивным полным перебором получается лучше, в среднем, на 8%.
Читать дальше →
Всего голосов 22: ↑18 и ↓4 +14
Комментарии 9

У нас было 540 точек, 120 мерчендайзеров, 30 ТП, 2 супервайзера, 5 таблиц в XLS и один пакет на ПО маршрутизации

Время на прочтение 6 мин
Количество просмотров 36K
Блог компании КРОК Геоинформационные сервисы *
image
Пример XLS-таблицы, которая используется до внедрения системы – и отлично подходит в качестве источника первичных данных.

Есть такой классный тип математических задач — маршрутизация торговых представителей (ТП). Хорошо известный каждому, изучавшему дискретную математику.

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

Фактически, задача сводится к двум:
  • Обобщенной задаче коммивояжера (TSP).
  • И построению оптимального расписания-плана.

При этом в задачах также учитываются доступные ресурсы (например, наличие машин, их вместимость, проходимость дорог и так далее), параметры точек (время ее работы точки, частота посещения, перечень задач, которые требуется решать в данной точке и так далее), изменения, например, внезапный переезд одного ларька на другой конец города. Ну и финальный штрих — довольно часто эта задача решается супервайзером с высшим гуманитарным образованием.
Читать дальше →
Всего голосов 31: ↑25 и ↓6 +19
Комментарии 51

Как я изобретал метод имитации отжига

Время на прочтение 7 мин
Количество просмотров 29K
Алгоритмы *C# *Математика *
Из песочницы

Доброго времени, Хабр!

Сподвигло меня на написание этой работы прочтение «Введение в оптимизацию. Имитация отжига». Так уж сложилось, что как раз недавно я столкнулся с задачей коммивояжера и для ее решения придумал алгоритм, суть которого, как оказалось, очень близка к идее алгоритма имитации отжига, описываемого в указанной статье. Более того, там даже есть «отсылка» к моей идее, а еще похожие обсуждения велись в комментариях, потому я решил, что сообществу будет интересно посмотреть на реализацию.
Читать дальше →
Всего голосов 32: ↑21 и ↓11 +10
Комментарии 13

Поиск гамильтонова цикла в большом графе (задача коммивояжера). Часть 3

Время на прочтение 2 мин
Количество просмотров 9.2K
Программирование *

Всем доброго времени суток!


В этом небольшом посте я продолжу тему, которую поднимал в своих старых двух постах
Часть 1
Часть 2

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

Так что добро пожаловать под хабракат
Читать дальше →
Всего голосов 9: ↑5 и ↓4 +1
Комментарии 1

Муравьиный алгоритм MMAS

Время на прочтение 2 мин
Количество просмотров 13K
Высокая производительность *Программирование *Алгоритмы *
Из песочницы
Приветствую всех читателей. Сегодня попробую продолжить серию достаточно редких статей, посвящённым естественным алгоритмам. В частности, эта статья будет посвящена модификации муравьиного алгоритма, известной как Max-Min Ant System (MMAS). Я расскажу об отличиях от классического муравьиного алгоритма и о причинах внесения таких модификаций. Подробности под катом.
Читать дальше →
Всего голосов 11: ↑9 и ↓2 +7
Комментарии 2

Решение задачи коммивояжёра методом ближайшего соседа на Python

Время на прочтение 7 мин
Количество просмотров 39K
Python *

Быстрый и простой алгоритм требующий модификации


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

На ресурсе [2] приведена следующая вполне справедливая критика данного метода. «Маршрут не оптимальный (не самый короткий) и сильно зависит от выбора первого города. Фактически не решена задача коммивояжера, а найдена одна гамильтонова цепь графа». Там же предложен путь некоторого усовершенствования метода ближайшего соседа. «Следующий возможный шаг оптимизации — «развязывание петель» (ликвидация перекрестий). Другое решение — перебор всех городов (вершин графа) в качестве начала маршрута и выбор наикратчайшего из всех маршрутов». Однако реализация последнего предложения не приведена. Учитывая все перечисленные обстоятельства, я решил реализовать приведенный алгоритм на Python и при этом предусмотреть возможность выбора начального пункта по критерию минимальной длины маршрута.
Читать дальше →
Всего голосов 14: ↑12 и ↓2 +10
Комментарии 1

TSP problem. Mixed algorithm

Время на прочтение 13 мин
Количество просмотров 10K
Алгоритмы *Matlab *
Всем доброго времени суток. В прошлых статьях мы сравнивали два эвристических алгоритма оптимизации на симметричной задаче коммивояжера таких как: ACS (ant colony system — муравьиный алгоритм) и SA (simulating annealing — алгоритм имитации отжига). Как мы убедились у каждого свои плюсы и минусы.


Читать дальше →
Всего голосов 20: ↑20 и ↓0 +20
Комментарии 5

Нейросеть с амёбой решили задачу коммивояжера для 8 городов

Время на прочтение 3 мин
Количество просмотров 26K
Алгоритмы *Математика *Машинное обучение *Научно-популярное Биотехнологии

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

Группа японских исследователей из Университета Кейо в Токио продемонстрировала, что амёба способна генерировать приближённые решения удивительно сложной математической задачи, известной как задача коммивояжера.
Всего голосов 30: ↑25 и ↓5 +20
Комментарии 32

Электронная амеба и задача коммивояжера

Время на прочтение 11 мин
Количество просмотров 2.7K
Блог компании ua-hosting.company Алгоритмы *Производство и разработка электроники *Научно-популярное Биотехнологии


Какой самый ценный ресурс на планете? Нефть, вода или может чистый воздух? Самый ценный ресурс, по мнению многих, это время. Его всегда не хватает, люди постоянно куда-то спешат, а любая деятельность так или иначе связана с временем: сколько баррелей нефти добывает одна нефтяная платформа в единицу времени, сколько клиентов обслуживает ресторан в единицу времени, сколько строк кода пишет программист в единицу времени и т.д. Правильное распределение задач по времени играет важную роль не только в промышленных или корпоративных масштабах, но и в быту. Мы всегда стараемся распределить свой день так, чтобы он прошел максимально эффективно и без лишних проблем. Можно сказать, что мы каждый день, сами того не подозревая, решаем свою собственную версию задачи коммивояжера. Ученые из университета Хоккайдо, вдохновившись одноклеточными амебами, решили создать аналоговый компьютер по их подобию, который может предложить самый эффективный метод решения знаменитой задачи комбинаторной оптимизации. Почему именно амебы стали вдохновителями этого труда, по какому принципу работала созданная система, и насколько эффективно она решала задачу коммивояжера? Об этом мы узнаем из доклада ученых. Поехали.
Читать дальше →
Всего голосов 15: ↑14 и ↓1 +13
Комментарии 3

Жадный алгоритм, ветви и границы для расписания мерчендайзеров (кейс Хакатона на оптимизацию)

Время на прочтение 6 мин
Количество просмотров 3.4K
Python *Клиентская оптимизация *Алгоритмы *Математика *Хакатоны
Из песочницы

Это пилотная статья. Будем благодарны за обратную связь. Если тема вызовет интерес, мы возможно примем решение выложить на GitHub наши исходники(python) и входные данные.

Случилось мне поучаствовать в марте 2021 г. в хакатоне с задачей на комбинаторику и оптимизацию. Команду решил собрать свежую, из одиночек, дрейфующих в пуле самого хака. Довольно быстро нашлись front и back, и втроем мы принялись старательно размышлять, как потратим деньги, когда выиграем. Надо сказать, что в хаках я не так давно, но уже успел поучаствовать и в ЛЦТ(Лидеры Цифровой Трансформации), и в Цифровом Прорыве. В последнем даже нам удалось занять бронзу в финале. Роль всегда у меня была project+product+ppt. Так вот этот мартовский хакатон меня заинтересовал живостью и насущностью бизнес проблем, которые там решались. Так как часто в хакатонских кейсах проблемы немного надуманы, решения этих проблем немного фееричны и не несут практического смысла, а побеждает профессиональная преза и поставленный питч. Опытные хакантощики, читающие эти строки, поймут. Но полно про хакатоны и про то, какие они бывают, а то собьемся с курса.

В этам хаке преза и даже front мало интересовали кейсодержателей. Это был натуральный бизнес хакатон с абсолютно живыми дата сетами и с натуральной бизнес болью. К слову сказать, наша команда не выиграла, а заняла третье место (всего до защиты дошло 5 команд). Теперь наконец к условию:

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

Читать далее
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 9

Как муравьи решают проблемы коммивояжёров

Время на прочтение 9 мин
Количество просмотров 14K
Алгоритмы *Математика *Читальный зал Научно-популярное Биология

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

Читать далее
Всего голосов 41: ↑41 и ↓0 +41
Комментарии 4

Автоматизация поиска гипер-параметров для алгоритма муравьиной колонии

Время на прочтение 10 мин
Количество просмотров 3.4K
Искусственный интеллект

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

Читать далее
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 3

Задача коммивояжера (TSP) точное решение — метод динамического программирования

Время на прочтение 9 мин
Количество просмотров 9.5K
Python *Алгоритмы *

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

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

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

Читать далее
Всего голосов 10: ↑10 и ↓0 +10
Комментарии 16

Задача коммивояжера (TSP) точное решение — метод ветвей и границ

Время на прочтение 17 мин
Количество просмотров 11K
Python *Алгоритмы *C *

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

Я говорю про NP-трудные задачи (NP-трудность - недетерминированная полиномиальная трудность по времени) и на одной из данного класса хочу акцентировать ваше внимание. Задаче коммивояжера.

Мы не будем рассматривать эвристические алгоритмы, нам нужно точное решение.

Читать далее
Всего голосов 32: ↑32 и ↓0 +32
Комментарии 42

Задача коммивояжера (TSP) точное решение — метод целочисленного линейного программирования (Integer programming)

Время на прочтение 20 мин
Количество просмотров 17K
Высокая производительность *Python *Совершенный код *Алгоритмы *

Дочитав эту статью до конца, вы сможете решать точно задачу коммивояжёра на сотню элементов за считанные секунды!

Заинтригованы? Тогда, добро пожаловать под кат.

Читать далее
Всего голосов 124: ↑124 и ↓0 +124
Комментарии 40