Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Всем привет! Необходимо сделать прокладку маршрута по складу. Есть схема склада, есть ненаправленный граф обхода склада (более 20 тыс вершин) Необходимо построить кратчайший маршрут между двумя произвольными вершинами склада. В принципе алгоритм Дейкстры не сложный, но хотелось бы перед началом реализации, послушать мнения. Наверняка кто-то делал подобное, подскажите какие подводные камни? как более эффективно реализовать на sql сервере на лету считать или заранее просчитать пути от каждой точки к каждой и хранить в БД? Может еще чего полезного посоветуете. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 11:22 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
1. SQLCLR? 2. OrientDB? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 11:40 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
PG81, Перемножаете все варианты и выбираете тот который нужно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 11:52 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
PG81более 20 тыс вершин заранее просчитать пути от каждой точки к каждой и хранить в БД 400 млн. маршрутов? ну-ну... PG81как более эффективно реализовать на sql сервере А почему обязательно на SQL-сервере? задача-то больше подходит для решения на стороне клиента... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 11:54 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Akina, Идея такая, что один раз рассчитать расстояния, и потом уже пользоваться только готовым результатом получая его из БД ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 12:09 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Если схема абсолютно статична - ну, наверное, это возможно. Алгоритмы получения всех путей в графе существуют, не вопрос... но представь, сколько оно молотить будет и сколько места зажрёт 400 кк маршрутов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 12:27 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
PG81, Т.е. "проверить, нет ли готового расчета для конкретных точек, если есть - то взять его, если нет - то рассчитать и сохранить"? Да, если стоимость путей считается редко - это, конечно, эффективнее, чем считать каждый раз заново. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 12:30 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
*меняется редко ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 12:32 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Akina, Если схема абсолютно статична, то получение всех путей в графе это одноразовая задача, поэтому не важно, сколько оно молотить будет, да и сколько места зажрёт 400 кк маршрутов не столь важно. Зато последующие запросы будут выполняться практически мгновенно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 12:34 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
в принципе эффективность еще зависит от связности графа - чем больше ребер, тем выгоднее хранить предрасчет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 12:40 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
PG81 , покопавшись по сусекам, нашёл когда-то написанный волновой алгоритм поиска пути для MySQL. Правда, он решает чутка другую задачу - поиск самого дешёвого среди самых коротких. Могу запостить, если нужен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 13:54 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Akina, Ну запости, я против не буду)) мне любопытно Я как сделаю первый вариант тоже выложу, на критику ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 14:12 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Посмотрел - для твоей задачи он даже проще, надо несколько инструкций удалить (сделал) и ничего не добавлять. Вот итог: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Исходные данные берутся из таблицы Код: sql 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 14:12 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
PG81Всем привет! Необходимо сделать прокладку маршрута по складу. Есть схема склада, есть ненаправленный граф обхода склада (более 20 тыс вершин) Необходимо построить кратчайший маршрут между двумя произвольными вершинами склада. В принципе алгоритм Дейкстры не сложный, но хотелось бы перед началом реализации, послушать мнения. Наверняка кто-то делал подобное, подскажите какие подводные камни? как более эффективно реализовать на sql сервере на лету считать или заранее просчитать пути от каждой точки к каждой и хранить в БД? Может еще чего полезного посоветуете. Мне кажется: 1. Для счета налету лучше все-таки использовать приложение, т.к. сервер плохо работает с рекурсией. Ну или если очень-очень хочется, то на SQL 2014 использовать dll процедуры. Это как раз для извращений, когда хочется код на Net непременно запустить на SQL. 2. Если результаты статичны или добавляются время от времени новые узлы, то можно использовать хранение статичной информации и иногда её обновлять. Тогда тут простой вариант - таблица, где перечислены через разделитель узлы, начальная точка, конечная точка, вес и кол-во узлов. Из нее запрос будет мгновенным в случае создания индекса по двум узлам с include полями из select-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 14:13 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Из MySQL-специфичного тут только INSERT IGNORE - это вставка в таблицу, когда вставляются только записи, не нарушающие условий уникальности, вне зависимости от наличия в наборе записей, нарушающих ограничения (такие записи игнорируются, причём разные игнорируемые записи могут нарушать требования разных индексов). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 14:15 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин, по идее граф будет меняться редко, ну раз в мес или реже. и связей достаточно много, кусок схемы на рисунке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 14:16 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
придумал, рекурсивную функцию оказалось уровень вложенности не должен превышать 32((( Как то нужно от нее теперь избавится блин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 17:36 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
PG81, привет! Я как-раз в прошлом году работал над такой задачей. Также граф с плечами/маршрутами, расчет пути алгоритмом Дейкстры. Когда сильно увеличился поток отправлений все уперлось в расчет маршрутов, т.к. для каждого отправления был постоянный перерасчет. Пока пробовали разные варианты оптимизации (которые, если честно, не сильно помогли), я продавил вариант с кэширование. На разработку с тестированием ушло всего несколько дней, т.к. ничего сложного в нем нет. Зато после этого как рукой сняло Как сделано: Весь кэш сбрасывается при вводе и выводе маршрутов в действие Желательно минимизировать частоту таких операций, или группировать их в пакеты. Наполнение кэша по мере необходимости Ищем путь для отправления в кэше, если нет - рассчитываем и записывам туда (перед добавлением учтите, что другая тразнакция может делать в этот момент тоже самое!). Этот подход позволяет распределить нагрузку равномерно, в отличие от полного пересчета всех путей после сброса кэша. Проверил, на текущий момент 1593 точки 5221 маршрута 6542 плеча В принципе немного, но если пересчитывать маршрут десятки (если не сотни) тысяч раз в день, то лишняя нагрузка будет ощутима! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 17:44 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
PG81, вот тут вам дали годный совет AkinaА почему обязательно на SQL-сервере? задача-то больше подходит для решения на стороне клиента... оффтоп может натолкнет на мыслиесли и нтересно для анализа сетей у Oracle сначала было PL/SQL API в рамках Oracle Topology Network, а потом они алгоритмы, связанные с анализом сети вынесли в java class'ы для сервера приложения. и на момент 11 g там было два API PL/SQL и Java. Причем для Java API они сделали специальный партишнинг сети (графа) в базе и куски сети хранят в блобах. Java' итератор когда пробегает по сети подкачивает эти блобы и есть кеширование там и т. п.. также можно зарегистрировать своего "визитора" и обрабатывать OnEdge/OnVertex и т. п.. тынц тынц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 17:49 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
PG81, Только сейчас увидел что ты из Твери.. Не из Интернет-Решений случайно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 17:50 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
PG81, На скуле желательно такое пилить на свежем In-Memory OLTP (Hekaton) если версия позволяет (SQL Server 2014 Enterprise). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.05.2015, 17:54 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Топикстартеру - удалость решить задачу? Встала похожая задача, только усложненная поиском оптимальной с точки зрения расстояния ячейки для размещения и всякими нюансами вроде включения в расчет костов на разворот техники при смене направления движения, стоимости подъема на уровень и повышенной стоимости прохода через определенные зоны склада (перемещение в другой блок склада штрафуется) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2015, 07:41 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Похоже ТС все решил почитает на лаврах :). По сабжу: Считать маршрут от каждой ячейки к каждой на складе с количеством ячеек более 100 тысяч смысла не имеет, тем более для включения пробега и трудоемкости операций как одного из коэффициентов целевой функции размещения. Надо упрощать В итоге весь склад разбил на области, включая z координату, определил смежный области, весь пол просчитал алгоритмом распространения волны, включив дополнительную стоимость прохода дефицитных областей (переходы, лифты) и количество разворотов техники в расчет. Алгоритм неидеален, из-за отсечения маршрутов с бОльшей стоимостью на каждому этапе отсекает потенциально более дешевые по разворотам маршруты, но для моих целей вполне достаточен. Оптимальный маршрут из области в область всегда, исключение - перемещение в соседний проход при наличии дорожек сверху и снизу. В конечном варианте стоимость перемещения топология ячеек внутри области накладывается на стоимость перемещений между областями и выбирается наилучший вариант. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.08.2015, 12:38 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
Ага, Если есть вопросы задавай, чуть позже расскажу как сам сделал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 00:28 |
|
||
|
Алгоритм Дейкстры на MS SQL Server
|
|||
|---|---|---|---|
|
#18+
На оптимальность не претендую, получилось что-то вроде такого: Таблица и заполнение: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Поиск: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2015, 10:59 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=38969799&tid=1686887]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
55ms |
get topic data: |
8ms |
get forum data: |
4ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 293ms |
| total: | 427ms |

| 0 / 0 |
