LINUX.ORG.RU
 
far_tuna

[Математикам]Помогите с решением


0

0

Здравствуйте всем!

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

Есть карта автомобильных дорог, скажем, Украины. Вопрос: как найти кратчайший путь, например, из Днепропетровска в Ужгород? Можно, конечно, перебрать все возможные пути и выбрать минимальный из них, но тогда получаются кучи заведомо неверных вариантов... К слову, зачем ехать из Днепра в Ужгород через Донецк, конечно, для бешеной собаки собсно и 7 верст не крюк, и все же, это около шестисот лишних километров? Плюс ко всему, надо еще учесть такой вариант, что на кратчайшом пути, возможно что-то вроде ремонта дороги или движение перекрыто и целесообразнее поехать обходным путем и т.д.
Вот как задать это дополнительное условие (про ремонт дороги и перекрытость движения)?

Игры разума натолкнули на мысль, что кратчайший путь ищется по алгоритму Дейкстры, но что с этим делать дальше, непонятно :(


Спасибо заранее за помощь.



// =^_^=

ЗАСТАВЬ КОМПЬЮТЕР ПОЛИВАТЬ ОГОРОД

автоматизация своими руками: электроприборы под контролем компьютера
beware of programmers who carry screwdrivers!
http://www.unicontrollers.com/products/unc01x

[#]  

Re: [Математикам]Помогите с решением

>Вопрос: как найти кратчайший путь, например, из Днепропетровска в Ужгород?

Рекомендую телепортацию.

anonymous ()
[#]  

Re: [Математикам]Помогите с решением

алгоритм A* c весами.

anonymous ()
[#]  

Re: [Математикам]Помогите с решением

> Вот как задать это дополнительное условие (про ремонт дороги и перекрытость движения)?

Измерять дорогу не длиной, а временем. Время = длина/(крейсерская скорость) + бонусы (все эти ремонты и т.д.)

anonymous ()
[#]  
soomrack

Re: [Математикам]Помогите с решением

Вроде это обычно решается динамическим программированием на графах. до каждого узла на расстоянии n ребер считаешь кратчайший путь, уже зная кратчайший путь до узлов на расстоянии n-1. Вот. А вообще это кажется NP полная задача, т.е. все известные алгоритмы имеют экспоненциальное время выполнения (от числа узлов). вот.

** ()
[#]  

Re: [Математикам]Помогите с решением

используй ГЛОНАС

anonymous ()
[#]  

Re: [Математикам]Помогите с решением

Может попробовать генетический алгоритм?

anonymous ()
[#]  

Re: [Математикам]Помогите с решением

Ну что тут поделаешь... - только вдоль.

anonymous ()
[#] Ответ на: Re: [Математикам]Помогите с решением от soomrack 14.06.2008 15:12:36  

Re: [Математикам]Помогите с решением

> Вроде это обычно решается динамическим программированием на графах. до каждого узла на расстоянии n ребер считаешь кратчайший путь, уже зная кратчайший путь до узлов на расстоянии n-1. Вот. А вообще это кажется NP полная задача, т.е. все известные алгоритмы имеют экспоненциальное время выполнения (от числа узлов). вот.

Очень умно звучит, но 4.2. Алгоритм Дейкстры квадратичен, а алгоритм Флойда-Уоршелла (поиск кратчайших путей между всеми парами вершин) кубический.

anonymous ()
[#]  

Re: [Математикам]Помогите с решением

Судя по описанию это задача на графах. Гугл: поиск кратчайшего пути в графе.

*** ()
[#]  
matich

Re: [Математикам]Помогите с решением

Кратчайший путь между двумя точками - прямая. Ответ: проложить новую трассу.

* ()
[#] Ответ на: Re: [Математикам]Помогите с решением от smh 14.06.2008 15:19:12  
far_tuna

Re: [Математикам]Помогите с решением

> Судя по описанию это задача на графах. Гугл: поиск кратчайшего пути в графе.

Так это... кратчайший путь ищется достаточно успешно, а как туда приплести про дополнительные условия?

* ()
[#]  
soomrack

Re: [Математикам]Помогите с решением

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

Сложность сохранится (кубическая, спс анонимусу).

** ()
[#] Ответ на: Re: [Математикам]Помогите с решением от far_tuna 14.06.2008 15:21:15  
soomrack

Re: [Математикам]Помогите с решением

>> Может попробовать генетический алгоритм?

> Стесняюсь спросить, а что это? ;)

в данной задаче -- лажа.

** ()
[#] Ответ на: Re: [Математикам]Помогите с решением от far_tuna 14.06.2008 15:24:20  

Re: [Математикам]Помогите с решением

> Так это... кратчайший путь ищется достаточно успешно, а как туда приплести про дополнительные условия?

Похоже можно просто удалить ремонтируемые\перекрытые дороги-рёбра из графа.

*** ()
[#] Ответ на: Re: [Математикам]Помогите с решением от far_tuna 14.06.2008 15:24:20  

Re: [Математикам]Помогите с решением

>> Судя по описанию это задача на графах. Гугл: поиск кратчайшего пути в графе.

> Так это... кратчайший путь ищется достаточно успешно, а как туда приплести про дополнительные условия?

В вес ребра. Дорога с ремонтом имеет бесконечный вес.

** ()
[#] Ответ на: Re: [Математикам]Помогите с решением от far_tuna 14.06.2008 15:29:15  
soomrack

Re: [Математикам]Помогите с решением

Ну да, теперь у кажлого ребра есть два свойства:
1. Время в пути по этому ребру
2. Вероятность его отказа

Обсчитываешь следующий массив:
вероятность, время в пути
вероятность, время в пути
вероятность, время в пути

0.9; 2 часа
0.8; 1 час
0.7; 10 мин.

ЗЫ: для уменьшения объема данным можно считать, что вероятность задана с точностью до 0.01.

** ()
[#]  
kranky

Re: [Математикам]Помогите с решением

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

*** ()
[#] Ответ на: Re: [Математикам]Помогите с решением от anonymous 14.06.2008 15:30:41  
far_tuna

Re: [Математикам]Помогите с решением

> в каком вузе и на какой специальности такие дипломы ?

Диплом по логистике, кафедра САПР. Что Вас смущает в _таких_ дипломах?

* ()
[#] Ответ на: Re: [Математикам]Помогите с решением от far_tuna 14.06.2008 15:35:04  
soomrack

Re: [Математикам]Помогите с решением

Нормальный диплом. Ибо дипломник должен уметь адаптировать известные методы к известным задачам.

** ()
[#] Ответ на: Re: [Математикам]Помогите с решением от soomrack 14.06.2008 15:34:00  
soomrack

Re: [Математикам]Помогите с решением

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

** ()
[#] Ответ на: Re: [Математикам]Помогите с решением от kranky 14.06.2008 15:34:56  

Re: [Математикам]Помогите с решением

> Согласен с предыдущим оратором - функцией на рёбрах графа должно быть не расстояние, а время.

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

***** ()
[#] Ответ на: Re: [Математикам]Помогите с решением от soomrack 14.06.2008 15:34:00  
far_tuna

Re: [Математикам]Помогите с решением

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

* ()
[#] Ответ на: Re: [Математикам]Помогите с решением от far_tuna 14.06.2008 15:44:14  

Re: [Математикам]Помогите с решением

> "Ремонт"-это штука такая, например, с 8:15 до 9:45 по этому ребру проехать нельзя, то бишь, пользователь может задать, что сегодня в определенное время на участке будет "ремонт", а прога должна с учетом этого выбрать обходной путь или решить, что выгоднее будет подождать окончания "ремонта"...

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

***** ()
[#] Ответ на: Re: [Математикам]Помогите с решением от far_tuna 14.06.2008 15:44:14  
soomrack

Re: [Математикам]Помогите с решением

>"Ремонт"-это штука такая, например, с 8:15 до 9:45 по этому ребру проехать нельзя, то бишь, пользователь может задать, что сегодня в определенное время на участке будет "ремонт", а прога должна с учетом этого выбрать обходной путь или решить, что выгоднее будет подождать окончания "ремонта"...

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

Время пути по ребру = время проезда по нему + ожидание пока его откроют (исходя из текущего времени). Вот.

ЗЫ: интереснее все-таки считать с надежностью пути.

ЗЗЫ: а где это есть ремонт с соблюденным расписанием?

** ()
[#] Ответ на: Re: [Математикам]Помогите с решением от soomrack 14.06.2008 15:27:01  

Re: [Математикам]Помогите с решением

а почему? Вот и вероятности тут накопали.
Можно ещё муравьиные алгоритмы посмотреть.

anonymous ()
[#] Ответ на: Re: [Математикам]Помогите с решением от anonymous 14.06.2008 15:49:45  
soomrack

Re: [Математикам]Помогите с решением

>а почему? Вот и вероятности тут накопали. Можно ещё муравьиные алгоритмы посмотреть.

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

** ()
[#] Ответ на: Re: [Математикам]Помогите с решением от soomrack 14.06.2008 15:52:43  

Re: [Математикам]Помогите с решением

>Локально оптимальное решение не имеет никакого отношение к глобальному оптимальному,

>>Ремонт"-это штука такая, например, с 8:15 до 9:45 по этому ребру проехать нельзя, то бишь, пользователь может задать, что сегодня в определенное время на участке будет "ремонт", а прога должна с учетом этого выбрать обходной путь или решить, что выгоднее будет подождать окончания "ремонта"...

anonymous ()
[#] Ответ на: Re: [Математикам]Помогите с решением от anonymous 14.06.2008 16:02:34  
soomrack

Re: [Математикам]Помогите с решением

И че? Я имел ввиду, что градиентные методы тут не работают, а генетические алгоритмы основаны на них (в основной своей массе).

** ()
[#]  
anonymousI

Re: [Математикам]Помогите с решением

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

* ()
[#] Ответ на: Re: [Математикам]Помогите с решением от soomrack 14.06.2008 15:49:19  
far_tuna

Re: [Математикам]Помогите с решением

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

Бинго!! :)

> а где это есть ремонт с соблюденным расписанием?

Это условность, вместо ремонта может быть все, что угодно, неработающий по средам светофор; мент, засевший в кустах, на 35 км ходу, каждодневно с 12-00 до 19-00; пересечение дороги стадом барашков и все в таком духе.

И еще вопрос: куда впихать функцию подсчета времени и где описать расписание для каждного ребра?

/me чувствует, как блондинчатые волосы становятся все светлее и светлее..

* ()
[#] Ответ на: Re: [Математикам]Помогите с решением от anonymousI 14.06.2008 16:17:21  
anonymousI

Re: [Математикам]Помогите с решением

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

* ()
[#] Ответ на: Re: [Математикам]Помогите с решением от anonymousI 14.06.2008 16:17:21  

Re: [Математикам]Помогите с решением

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

anonymous ()
[#] Ответ на: Re: [Математикам]Помогите с решением от anonymous 14.06.2008 16:20:56  
redgremlin

Re: [Математикам]Помогите с решением

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

***** ()