![]() |
|
![]() ![]() ![]() |
|
Kurt |
|
|||
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: нет Всего: 36 |
Возникла необходимость решить след. задачу:
есть набор городов и описание связей между ними (цена билета, время на поездку etc.). Нужно сделать так: юзер вводит пункты отправки/назначения и насколько ему важно время, а прога находит оптимальный путь, возможно с пересадками. Собственно, проблемка не в алгоритме, а в их количестве. Поискал в сети, встречаются генетические алгоритмы, нейронные сети и т.п Народ, может, кто занимался этим делом? Киньте свое мнение, что лучше (какой алгоритм), что хуже и почему. Буду очень признателен. ;) Спешу заверить, что данная задача требуется исключительно для практических нужд и не является учебным заданием.. просто есть одна мысль.. -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
|||
|
||||
podval |
|
|||
![]() Где я? Кто я? ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3094 Регистрация: 25.3.2002 Где: СПб Репутация: 18 Всего: 62 |
Начни с классики. Формализуй задачу и примени метод динамического программирования.
Пусть не самый быстродействующий (особенно если размерность задачи большая), зато дающий гарантированный результат. |
|||
|
||||
Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: 2 Всего: 32 |
Ну на самом деле это классический алгоритм Дейкстры поиска оптимального пути между двумя вершинами графа. Можно посоветовать algolist.manual.ru - там хорошо это все описано. Если не поймешь, я могу выложить реализацию на паскале
-------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
Fedor |
|
||||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: 2 Всего: 32 |
Вот решил выложить сразу чтоб ты не мучался...
Взято из Кормен, Лейзерсон, Ривест - "Алгоритмы: построение и анализ" и переведено на українську мову для моей квалификационной работы. Уж прости...
И реализация на паскале... Моя.
-------------------- Мы - Днепряне. Мы всех сильней. |
||||
|
|||||
Alex101 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Смотри алгоритмы Дейкстры и Флойда-Уоршилла
-------------------- С уважением, А. Фролов. |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Г.А. на мой взгляд лучшее решение таких задач.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
Fedor |
|
|||
![]() Днепрянин ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2090 Регистрация: 8.2.2003 Где: Великий Репутация: 2 Всего: 32 |
А что такое Г.А.? -------------------- Мы - Днепряне. Мы всех сильней. |
|||
|
||||
Kurt |
|
||||
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: нет Всего: 36 |
here
У тебя, случаем, нет его реализации для моей задачи? Чтоб не с нуля начинать.. Смотрел на BaseGroup (ссылка выше..), но там немного не то - как я понимаю, в моей задаче хоромосомы имеют РАЗНОЕ количество генов. Или можно как-то свести к "однородным" хромосомам, чтоб кол-во генов было одинаково? В роли гена я хотел брать номер города, т.е. для пути 5-6-7 хромосома имеет 3 гена: 5, 6, 7. А для пути 5-7 - только два: 5, 7. Есть другой способ закодировать путь? -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
||||
|
|||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: нет Всего: 62 |
Kurt
Будешь смеяться, но я сам пытаюсь решить эту задачу. Хотел сделать движок для транспортных сайтов. Есть интересные наработки с 2-OPT, 1-OR, 2-OR и EX1 эвристиками. Но сама программа еще не готова. Я пока еще не знаю как это применить к нашей задаче, но чувствую надо использовать именно их, т.к. они самые быстрые. А у тебя есть какие-нить предложения?
Пустых генов добавить, чтобы они не учитывались оценщиком. -------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
Kurt |
|
||||
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: нет Всего: 36 |
Ого! Да мы, оказывается, конкуренты! У меня очень похожая задачка.
Хмм... А как ты обозначишь пустой ген? Допустим, некоторым числом, скажем, -1. Т.е. if(someArray[i]!=-1) тады учитывать. Все хорошо. НО! Что будет при скрещивании и мутациях? Ведь разрыв может произойти в любом месте хромосомы? Честно говоря, этот момент очень тревожен.. Т.е. есть, например, набор очень "удачных" хромосом, но при скрещивании они дадут потомство полностью неприспособленных особей, существенно оттянув тем самым конец алгоритма. Кстати, ты еще не пробовал, как все это работает при "пустых" генах? -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
||||
|
|||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Сразу оговорюсь, что все мои знания о Г. А. - из вышеупомянутой статьи, так что я могу сказать глупость ![]() Только вот я не понимаю, как может при таком выборе описания гена этот алгоритм сойтись. Может быть, попробовать так: ген номер x - это номер вершины графа, а 1 означает, что путь проходит через неё... В этом случае интуитивно я могу представить себе, как такое может дать результат. Но вот оценочная функция будет долгой... Хотя, если подумать... не так и долго... |
|||
|
||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
А если ещё подумать, то не так и быстро... Пока лезет в голову только определение сопротивления цепи между двумя точками - исходной и назначения, где каждое ребро графа - это резистор с сопротивлением, равным времени меремещения между вершинами. Тут та ещё работка
![]() Или если рекурсивно применять алгоритм ![]() Всё, пошёл спать, глупости в голову какие-то лезут ![]() |
|||
|
||||
Alex101 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 891 Регистрация: 8.4.2002 Где: Москва Репутация: 1 Всего: 10 |
Не ломайте зря голову, все равно оптимальнее Дейкстры (если из одного пункта) алгоритма не найти. Ребро графа и будет временем (стоимостью и т.п.).
P.S. Morpheus правильное решение предложил. Сложность O(N^2) Если найдете более оптимальное решение, то станете известными как Дейкстра ![]() -------------------- С уважением, А. Фролов. |
|||
|
||||
dm9 |
|
|||
![]() Дмитрий Копытин ![]() ![]() ![]() ![]() Профиль Группа: Vingrad developer Сообщений: 3876 Регистрация: 22.7.2002 Где: Москва Репутация: нет Всего: 137 |
Alex101, здесь, как я понял, не ставится цель решить задачу с абсолютной точностью, а ставится цель найти лучшее решение за ограниченное количество итераций со сложностью, меньшей квадратичной.
|
|||
|
||||
Kurt |
|
||||||||||
Увлеченный ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1662 Регистрация: 22.8.2003 Где: Краснодар Репутация: нет Всего: 36 |
Morpheus, разбираю твой код (с принципом алгоритма ознакомился.
![]() Не могу понять:
Нафига массив W, если он используется тока в одной сомнительной строчке:
В чем его предназначение? Согласно этому:
У тебя соответственно, A=G и B=d. Такого заполенния у тебя нет. Оно и без этого корректно работает?
ээ... Ввиду:
он же всегда вернет 65535... Блин, или вообще ни разу не зайдет в if.. Иль я где-то ошибаюсь? Подскажите, как правильно. ![]() -------------------- Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед) ... Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн) |
||||||||||
|
|||||||||||
![]() ![]() ![]() |
Правила форума "Алгоритмы" | |
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Алгоритмы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |