Автор Тема: Задача коммивояжёра & GPS.  (Прочитано 17651 раз)

XYZ

  • Консультант
  • Сэнсей
  • Сообщений: 4 625
  • Гетеронормативизм - это норма
    • Просмотр профиля
    • Не содержит гмо...
Re: Задача коммивояжёра & GPS.
« Ответ #25 : 29.09.2011, 13:43:15 »
Блин, хоть садись и языг изучай.... ))) На чём счас круто программировать, что изучить для написания сабжа?
вливйся в http://www.osmand.net/ , там как раз с маршрутизацией не очень гладко. зато уже есть готовая векторная карта от OSM.
писано оно на жабе, я так понимаю.

Bulawka

  • Сэнсей
  • Сообщений: 1 769
  • Ждём всех на RandomRace.ru
    • Просмотр профиля
    • www.bulawka.ru
Re: Задача коммивояжёра & GPS.
« Ответ #26 : 29.09.2011, 15:25:20 »
А возможно, еще быстрее - дворами. Но 100% адекватных средств навигации в городе для пешеходов/велосипедистов просто не существует, так что пишу о том, что есть...
Кстати, ситигайд легчайше водит по дворам всяких промзон, если на шоссе рядом мегапробка.
И из ситигайда я на прошлом БГ узнал про весьма нетривиальный съезд с КАД к Ручьям (который с фуро-парковки начинается).
Не поверил и поехал мимо, в пробку, как потом выяснилось -- зря не поверил.

Alone_Stranger

  • Флудер
  • Сообщений: 252
    • Просмотр профиля
    • Этот и некоторые другие БГ
Re: Задача коммивояжёра & GPS.
« Ответ #27 : 13.11.2011, 15:57:08 »
ИМХО, при некоторых допущениях, в первом приближении все сводится к уже решенной многими способами задаче:
http://ru.wikipedia.org/wiki/Задача_коммивояжёра.
Имея нетбук с выносным ЖПС в рюкзаке можно не только решить задачу один раз для КП на этапе, но решать ее постоянно динамически с учетом текущей скорости движения и другой обстановки (например о пробках). Ведь автонавигаторы делают примерно тоже самое, но для двух точек. То есть алгоритмы (пусть нам в настоящее время неизвестные) существуют.
Далее можно построить граф всех КП на этапе, где каждый перегон между каждым КП (ну эвристически дурацкие пути можно и повыкидывать) будет считаться с помощью уже решенной задачи в автомобильном пофигаторе - потом к этому графу применяется алгоритм для решения этой задачи - И ВУАЛЯ!

ЗЫ: курите Кнута и Дейкстру, язык программирования - дело даже не десятое! (если решать задачу с нуля)

Любитель Петербурга

  • Консультант
  • Сэнсей
  • Сообщений: 3 799
    • Просмотр профиля
Re: Задача коммивояжёра & GPS.
« Ответ #28 : 13.11.2011, 19:26:20 »
???

Цитировать
То есть алгоритмы (пусть нам в настоящее время неизвестные) существуют.

Нам - это кому? В смысле - узкому кругу БГ-шников или человечеству? Задача коммивояжёра "в первом приближении" весьма далека от БГ-реальности (тем более - от реальности любых видов спорта с ориентированием, в городе ещё хоть как-то можно использовать адресный план и сетку улиц). Если её худо-бедно умеют решать, то без гарантии и только в плане минимизации расстояния, но не времени. Ибо скорость не учитывается - нет таких алгоритмов (см. тему про 2GIS в разделе БГ-2011, ответы разработчиков). Да и как её учесть, если она непредсказуема вообще говоря?

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

Alone_Stranger

  • Флудер
  • Сообщений: 252
    • Просмотр профиля
    • Этот и некоторые другие БГ
Re: Задача коммивояжёра & GPS.
« Ответ #29 : 18.11.2011, 14:25:23 »
???
Цитировать
То есть алгоритмы (пусть нам в настоящее время неизвестные) существуют.
Нам - это кому?
Нам - это людям, общающимся в данной теме. Лично мне известно о принципиальном существовании этих и подобных алгоритмов, причем находящих решение за "разумное" время применительно к сетке КП в городе на современных вычислительных машинах. Но мне неизвестны эти алгоритмы в точности.

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

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

см. тему про 2GIS в разделе БГ-2011, ответы разработчиков
Систему 2GIS (не в обиду разработчикам) считаю картографической, но никак не навигационной. Ситигид и ему подобные, имхо, для примеров куда больше годятся.

Гипотетически: пусть мы снимаем скорость с приёмника, а компьютер её как-то прогнозирует дальше. И что? На сложной трассе новая порция данных с навигатора способна перевернуть весь план, а следующая вернуть всё обратно. Да этак только вред будет, а не оптимизация.
Для этого обсчет нужен динамический - то есть в реальном времени, чтобы "новая порция данных" приходила, согласно NMEA, ежесекундно (есть и более продвинутые варианты до 10 герц). Много Вы сможете за секунду убежать так, чтобы ситуация изменилась кардинально? Уехать - да, например проехать нужный поворот - ну так не страшно (см. ниже).

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

Любитель Петербурга

  • Консультант
  • Сэнсей
  • Сообщений: 3 799
    • Просмотр профиля
Re: Задача коммивояжёра & GPS.
« Ответ #30 : 18.11.2011, 15:27:26 »
О том, что существуют автомобильные навигаторы, успешно решающие задачу для 5-6 точек, я в курсе. Только это не задача коммивояжёра, а целая пачка задач коммивояжёра. Там сложный граф с миллионами узлов. Сначала нужно найти по этому графу лучшие пути между всеми парами точек, и только потом перебирать варианты с порядком взятия. А теперь: 5!=120, 10!=3000000.  20! это уже одних цифр около двух десятков, такое количество вариантов если и впишется в "головку от торпеды", то с самыми современными технологиями и за большие деньги. 30! уже точно не впишется даже за большие деньги.

Наконец, задача "Броневика" наиболее проста среди всех БГ-задач. Ибо автомобиль не устаёт, и его скорость не зависит от времени суток. Так что задача минимизации времени с учётом весовых коэффициентов на ограничения скорости по участкам почти не отличается от задачи минимизации расстояния. Скорость же бегуна и велосипедиста предсказать крайне сложно - она в том числе зависит от морально-волевых качеств, взаимодействия партнёров внутри команды, а также эффекта "паровоза" при следовании по трассе многих команд. Об "Атланте" и вовсе стоило бы умолчать - к непредсказуемости скорости добавляется комбинация нескольких способов передвижения с разной скоростью у каждого способа ... уфф!
« Последнее редактирование: 18.11.2011, 15:38:29 от Любитель Петербурга »

Alone_Stranger

  • Флудер
  • Сообщений: 252
    • Просмотр профиля
    • Этот и некоторые другие БГ
Re: Задача коммивояжёра & GPS.
« Ответ #31 : 19.11.2011, 16:52:44 »
О том, что существуют автомобильные навигаторы, успешно решающие задачу для 5-6 точек, я в курсе. Только это не задача коммивояжёра, а целая пачка задач коммивояжёра. Там сложный граф с миллионами узлов. Сначала нужно найти по этому графу лучшие пути между всеми парами точек, и только потом перебирать варианты с порядком взятия.
Учитывая быстродействие современных встраиваемых (обычно ARM) процессоров и примерного знания этих алгоритмов, что-то мне говорит о том, что точек там не так уж и много - тысячи в лучшем случае, да и пути между всеми парами не считали даже на заре ЭВМ когда компьютеры были ОЧЕНЬ большими. Ведь к каждому алгоритму решения задачи в лоб, методом прямого перебора (в ширину или в глубину - не важно) существует несколько (а то и несколько десятков) методов его оптимизации, да еще и эвристический анализ никто не отменял.
Плюс ко всему, сдается мне, что в динамическом режиме нужно будет пересчитывать далеко не все (даже с учетом оптимизации и эвристики), а лишь изменения!

А теперь: 5!=120, 10!=3000000.  20! это уже одних цифр около двух десятков, такое количество вариантов если и впишется в "головку от торпеды", то с самыми современными технологиями и за большие деньги. 30! уже точно не впишется даже за большие деньги.
А не нужно ничего вписывать на торпеду, кроме терминального сервера с ЖПС приемником и мобильным интернетом - эту задачу даже не самый навороченный смартфон потянет. Остальное может решаться в ЛЮБОМ месте на чем угодно - одном большом компе, сети больших компов, вычислительной стойке или нейронной сети (да хоть SETI@HOME). Для этого вовсе не нужно таскать с собой непосредственно вычислитель! Достаточно кормить его свежими данными о своем местоположении и изменении маршрута (например появлении новых КП) - информацию о пробках и погоде (например туман, гололед) он вынет из интернета сам. Потом также в терминальном режиме зашлет вам обратно просчитанный маршрут.

Наконец, задача "Броневика" наиболее проста среди всех БГ-задач. Ибо автомобиль не устаёт, и его скорость не зависит от времени суток. Так что задача минимизации времени с учётом весовых коэффициентов на ограничения скорости по участкам почти не отличается от задачи минимизации расстояния.
ХМ..... Скорость автомобиля на дороге как раз очень зависит от: времени суток (светло-темно, солнце низко в глаза), состояния погоды (мокрый снег, проливной дождь, ясно, гололед), качества бензина, свежезалитого на очередной заправке и как он перемешивается с оставшимся в баке бензином....

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

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

Об "Атланте" и вовсе стоило бы умолчать - к непредсказуемости скорости добавляется комбинация нескольких способов передвижения с разной скоростью у каждого способа.
Не вижу принципиальных сложностей вписывания нескольких способов передвижения с разной скоростью в алгоритм - достаточно лишь добавить дополнительные ветви с весами в граф. Где-то тут даже обсуждали онлайн сервис о местонахождении ОТ. Почему бы не получать инфу с него? Пусть пока и не в каждом городе....

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

Любитель Петербурга

  • Консультант
  • Сэнсей
  • Сообщений: 3 799
    • Просмотр профиля
Re: Задача коммивояжёра & GPS.
« Ответ #32 : 19.11.2011, 19:46:01 »
как говорится - флаг в руки! Я нахожу, что дело не стоит того, чтобы заниматься им бесплатно, и не вижу достаточного количества покупателей, готовых работу оплатить хотя бы когда она будет готова. В теории всё хорошо, а что будет на практике, выяснится только при попытке внедрения.

Цитировать
Учитывая быстродействие современных встраиваемых (обычно ARM) процессоров и примерного знания этих алгоритмов, что-то мне говорит о том, что точек там не так уж и много - тысячи в лучшем случае

Вероятно действительно так. Вспоминаю недавнюю поездку по Карельскому перешейку, когда навигатор, где бы мы ни находились, упорно посылал на трассу Скандинавия. Хотя по карте невооружённым глазом были видны пути более короткие. Что мы тогда вообще хотим оптимизировать? У нас нет графа, реально отображающего возможные пути на автомобиле, а что говорить о велосипедистах и пешеходах? Любопытно, подумал ли кто о роллерах - у них свои особенности.

Цитировать
ХМ..... Скорость автомобиля на дороге как раз очень зависит от: времени суток (светло-темно, солнце низко в глаза), состояния погоды (мокрый снег, проливной дождь, ясно, гололед), качества бензина, свежезалитого на очередной заправке и как он перемешивается с оставшимся в баке бензином....

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

Цитировать
ИМХО, для себя на велосипеде могу предсказать скорость куда точнее, чем на автомобиле - потому как меньше не зависящих непосредственно от меня обстоятельств. Бегом - еще точнее!

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

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

Угу. не забудьте добавить в граф каждый эскалатор и переход метро. И спрогнозировать количество пассажиров на станции в момент прибытия, можно ли будет бежать по эскалатору или придётся стоять (эта информация может повлиять на решение ехать в метро и очень важна!). И выясните на левых сайтах, где ездят левые маршрутки (а ни ГЛОНАСС, ни расписания у них нет).  И главное, заложите во всё это тысячи и десятки тысяч ветвей графа, по которым можно бежать бегом. Уж точно никто и никогда не заложит веточку от Броневой до Маршала Говорова под ЗСД или народную тропинку от бульв. Дружбы до Авиационной ул. в Красном Селе. И попробуйте (см. выше) спрогнозировать скорость бегуна, да поточнее - ошибка в одну минуту приведёт к непопаданию в электричку и весь замечательно выстроенный маршрут рухнет.

Я это уже не в порядке дискуссии, а в порядке предложений по совершенствованию алгоритма. Желаю успеха.

« Последнее редактирование: 19.11.2011, 19:49:50 от Любитель Петербурга »