|
|
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
Вобщем смысле - задача коммивояжера. Только выходит он из склада должен пройти по всем клиентам и вернуться на склад так, чтобы попасть к каждому клиенту в определенный интервал времени. Если торговец приходит к клиенту раньше назначенного интервала - он ждет "начала интервала". Придти позже не допустимо. Требуется найти кратчайший путь или доказать что такого пути нет. Как решаю: Есть список решений (путь, время затраченное на этот путь, длинна пути). Инициализация: Список решений содержит пустой элемент: нулевое время и стоимость. 1. ПОКА Выбираем наименьший элемент А (недостроенный путь наименьшей длинны) и списка решений ЦИКЛ 2 Если А содержит всех клиентов Тогда Возврат(А) // - этот путь является решением. 3 ПОКА можно выбрать клиента К, которого нет в А ЦИКЛ // начинаем цикл 4. ЕСЛИ клиента нельзя добавить конец пути А ТОГДА продолжить; 5. Создаем новое недостроенное решение B = A. 6. Добавляем в конец пути B клиета К. Обновляем стоимости и время решения B. 7. Вставить в список решений B. 8. КонецЦикла; // идем пункту 3. 9. Удалить из списка решений A. 10. конецЦикла; // идем к пункту 1. Алгоритм работает. Вроде бы даже находит оптимальное решение за пару десятков сек для 15 клиентов~) Беда только одна Список Решений содержит очень большое количество элементов, что ввиду ограниченного объема оперативки не дает использовать его для большей размерности (надо хотя бы для 20-35). Отсюда вопрос: может у кого есть идеи как не хранить весь этот список в ОЗУ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 13:12:31 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Сорри, забыл офромить) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 13:15:39 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
насколько понимаю, все задачи коммивояжера решаются матрицами 4 8 15 16 23 42 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 15:07:31 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
Aklin Jнасколько понимаю, все задачи коммивояжера решаются матрицами Задача коммивояжера решается методом ветвей и границ, или применительно к коммивояжеру - метод Литтла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 16:07:52 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
здесь вроде тип алгоритма ближайшего соседа решение неоптимальное, но если конец пути оказывается довольно быстр, то считают (по принц. динам. прогр. Беллм.), что решение довольно оптимально Нехватка памяти если - миним. структуры, которая груз. в память и на которой поиск - гигабайты ячеек, но уже не яз. выс. ур. С СУБД наверно ничего не выйдет - "хитрые" селекты остануться комбинаторными. А вообще Прологи под это "заточены" - подгружают, перегружают, ускоряются, "ленятся", ... А промежуточные пункты-развилки путей допускаются? Насколько разряженная сеть связей между пунктами? ... Это учебное или практическое (например, Интернет-магазин)? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2009, 17:11:01 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
насколько понял здесь не метод динамического программирования, а метод ветвей и границ. Возможно используется обход в ширину, что требовательно к памяти. Попробуйте построить проход в глубину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2009, 00:02:55 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
AlexandrPlusА промежуточные пункты-развилки путей допускаются? Насколько разряженная сеть связей между пунктами? ... В том-то и беда, что что граф "почти" полный. т.е. почти от любого клиента можно приехать к любому другому - это в теории. На практике можно будет пользоваться эвристиками, чтобы значительно сократить этот перебор. AlexandrPlusЭто учебное или практическое (например, Интернет-магазин)? Учебно-практическое. Это маленькая часть дипломной работы. Мне надо пользоваться этой подзадачей, что бы решить VRPwTW(от Vehicle routing problem with time window. Задача маршрутизации транспортных средств с учетом ограничений на грузоподъемность, и временные окна клиентов ). Мои преподы желают видеть "точное решение". Если кому-то интересно - поделюсь материалом с которым пытаюсь разобраться (на английском) optimizer ... метод ветвей и границ Да, но... тут нужны оценки с низу и с верху... в этом вся проблема... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2009, 08:36:07 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
так каким методом решает приведенный алгоритм? все таки динамическим программированием? не узнаю ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2009, 12:26:33 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
stopa85AlexandrPlusА промежуточные пункты-развилки путей допускаются? Насколько разряженная сеть связей между пунктами? ... В том-то и беда, что что граф "почти" полный. т.е. почти от любого клиента можно приехать к любому другому - это в теории. На практике можно будет пользоваться эвристиками, чтобы значительно сократить этот перебор. Такое на практике едва ли будет. В смысле - реальные пути-дороги. stopa85 AlexandrPlusЭто учебное или практическое (например, Интернет-магазин)? Учебно-практическое. Это маленькая часть дипломной работы. Мне надо пользоваться этой подзадачей, что бы решить VRPwTW(от Vehicle routing problem with time window. Задача маршрутизации транспортных средств с учетом ограничений на грузоподъемность, и временные окна клиентов ). Мои преподы желают видеть "точное решение". Если кому-то интересно - поделюсь материалом с которым пытаюсь разобраться (на английском) optimizer ... метод ветвей и границ Да, но... тут нужны оценки с низу и с верху... в этом вся проблема... принимал участие в доработке одной корпор. ИС и давали задачку - есть гараж и несколько грузовиков - хотели в систему складского учета включить затраты (рабочее время шоферов, бензин, обслуживание грузовиков, ... "леваки" шоферов, чтобы пустые не гоняли) на перевозки и там же распределить грузы по грузовикам и назначить им пути - то есть не один, а несколько коммивояжеров, да еще грузы разложить - грузовики разные и временнЫе окна, чтобы грузы были приняты дальше заполнения транспортных листов из ИС с довводом с листов же в ИС после, не прошли, так как переключились на другие задачи А диплом для реального предприятия? Вообще любопытно. Решающий такие задачи софт коммерческий такой тоже уже есть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2009, 15:38:49 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.02.2009, 15:58:40 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
optimizerтак каким методом решает приведенный алгоритм? все таки динамическим программированием? не узнаю Да Вы правы. Это не метод динамического программирования и это не метод ветвей и границ. Это тупой поиск в ширину - он обречен на задачах большой размерности (25 клиентов это слишком много) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2009, 08:41:58 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
на задачах большой размерности все обречены :) Попробуйте, все таки, МВГ с проходом в глубину, с памятью точно проблем не будет. Проблемы будут со временем полного обхода дерева, т.е гарантированного нахождения оптимума. Для определения границы, если ничего оригинального не придумаете, то, в принципе, можно взять оценку текущего лучшего решения. Очень важную роль будет играть порядок сортировки ветвей при ветвлении (какие элементы решения в первую очередь рассматривать) - здесь надо применять эвристики для сортировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2009, 13:05:15 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
optimizer, Ок, попробую, правда результаты будут не скоро. Для оценки можно использовать решение Задачи линейного программирования (см рисунок), ну или с немного "расслабленными" ограничениями. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.02.2009, 16:19:21 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
хорошо, если можно представить задачу в ЛП, оценка границы результатом решения ЛП даст хороший отсев. ЗЫ динамическое программирование, имхо, имеет хорошую эффективность, но в любом случае она подвержена проклятию размерности и ее минус в том, что нельзя остановить на половине работы и довольствоваться тем что получилось, в отличие от МВГ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 03:07:35 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
optimizer, А что вы думаете по этому поводу? Количество преременных в задаче порядка o(x^2), (не считая переменных, которые мы будем вводить для того чтобы задачу к каноническому виду... найти допустимый базис...) Итого исходя из постановки для 30 клиентов будем иметь порядка 900 столбцов и 900 строк. Не многовато ли? Ведь решать ее придется много-много раз? Или это как раз не проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.02.2009, 09:45:22 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
stopa85optimizer, А что вы думаете по этому поводу? Количество преременных в задаче порядка o(x^2), (не считая переменных, которые мы будем вводить для того чтобы задачу к каноническому виду... найти допустимый базис...) Итого исходя из постановки для 30 клиентов будем иметь порядка 900 столбцов и 900 строк. Не многовато ли? Ведь решать ее придется много-много раз? Или это как раз не проблема? Чё то непонимаю :граф с 30 вершинами?-почему тупо перебором нельзя решить? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2009, 09:25:02 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
борщЧё то непонимаю :граф с 30 вершинами?-почему тупо перебором нельзя решить? А сколько, по-вашему, вариантов надо перебрать? Перестановки, что ли, да? Не напомните формулку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.02.2009, 12:13:49 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
только недавно решал такую задачу. Метод ветвей и границ. Решается через матрицу путей, если первоначально есть стоимости, время или длина каждого. Для решения нужна матрица х*х. По идее работать должно быстро ибо на каждую матрицу для расчетов требуется доля секунды. Матриц будет х штук. Каждая следующая на единицу меньше предыдущей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2009, 03:29:26 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
daunito, Если честно я Вас не совсем понял. Вы имеете ввиду алгоритм Литтла? (или что-то другое) Если В процессе нахождения Гамельтонова цикла - проверять может ли текущее разбиение (та часть что уже построена) представлять собой часть решения, если нет - отбрасывать ветвь. stopa85 Если торговец приходит к клиенту раньше назначенного интервала - он ждет "начала интервала". Придти позже не допустимо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.02.2009, 12:42:46 |
|
||
|
Динамическое программирование. Поиск оптимального пути с ограничениями.
|
|||
|---|---|---|---|
|
#18+
stopa85optimizer, А что вы думаете по этому поводу? Количество преременных в задаче порядка o(x^2), (не считая переменных, которые мы будем вводить для того чтобы задачу к каноническому виду... найти допустимый базис...) Итого исходя из постановки для 30 клиентов будем иметь порядка 900 столбцов и 900 строк. Не многовато ли? Ведь решать ее придется много-много раз? Или это как раз не проблема? сложно сказать, тем более не понимаю как будете делать ветвление, лучше попробовать, тем более существуют готовые реализации для решения задач ЛП ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2009, 22:58:01 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=35808840&tid=1344652]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
175ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 239ms |
| total: | 505ms |

| 0 / 0 |
