HTML Diff
2 added 4 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>В этом уроке мы покажем, как работать с графами на примере задачи. Представим, что нам нужно найти кратчайший маршрут на складе для комплектации товаров. При этом не везде можно ездить, а пересечение коридоров на складе разрешено только в обозначенных "поворотных точках". Кроме того, направление движения должно соответствовать указанному для каждого коридора.</p>
1 <p>В этом уроке мы покажем, как работать с графами на примере задачи. Представим, что нам нужно найти кратчайший маршрут на складе для комплектации товаров. При этом не везде можно ездить, а пересечение коридоров на складе разрешено только в обозначенных "поворотных точках". Кроме того, направление движения должно соответствовать указанному для каждого коридора.</p>
2 <h2>Формулируем задачу в теории графов</h2>
2 <h2>Формулируем задачу в теории графов</h2>
3 <p>Сформулируем данную задачу, как оптимизационную в теории графов. Все пункты приема на складе образуют узел в графе, где ребра - разрешенные коридоры и расстояния между узлами. Начнем с упрощенного примера:</p>
3 <p>Сформулируем данную задачу, как оптимизационную в теории графов. Все пункты приема на складе образуют узел в графе, где ребра - разрешенные коридоры и расстояния между узлами. Начнем с упрощенного примера:</p>
4 <p>Граф выше - это два коридора с пятью пунктами приема в каждом коридоре. Все пункты - узлы на графе, с адресом в диапазоне от одного до десяти. Стрелки указывают разрешенное направление движения, а двойные стрелки указывают, что вы можете ехать в любую сторону.</p>
4 <p>Граф выше - это два коридора с пятью пунктами приема в каждом коридоре. Все пункты - узлы на графе, с адресом в диапазоне от одного до десяти. Стрелки указывают разрешенное направление движения, а двойные стрелки указывают, что вы можете ехать в любую сторону.</p>
5 <p>Если мы можем представить маршруты движения в виде графа, значит, мы можем использовать математические методы, известные из теории графов. Это поможет найти оптимальный маршрут движения между узлами - пунктами.</p>
5 <p>Если мы можем представить маршруты движения в виде графа, значит, мы можем использовать математические методы, известные из теории графов. Это поможет найти оптимальный маршрут движения между узлами - пунктами.</p>
6 <p>Приведенный выше пример графа можно описать с помощью матрицы смежности:</p>
6 <p>Приведенный выше пример графа можно описать с помощью матрицы смежности:</p>
7 <ul><li>Пример 1: разрешено перемещаться из узла 2 в 3, но не из 3 в 2. На это указывает единица в матрице смежности справа</li>
7 <ul><li>Пример 1: разрешено перемещаться из узла 2 в 3, но не из 3 в 2. На это указывает единица в матрице смежности справа</li>
8 <li>Пример 2: разрешено ехать как из узла 8 в 3, так и из 3 в 8, на что опять же указывают единица в матрице смежности. В данном случае симметрична</li>
8 <li>Пример 2: разрешено ехать как из узла 8 в 3, так и из 3 в 8, на что опять же указывают единица в матрице смежности. В данном случае симметрична</li>
9 </ul><h3>Вернемся к проблеме со складом</h3>
9 </ul><h3>Вернемся к проблеме со складом</h3>
10 <p>Реальный склад больше и сложнее, чем приведенный выше пример. Однако основные принципы работы с графиками остаются теми же. Чтобы упростить реальную задачу, представим небольшой склад:</p>
10 <p>Реальный склад больше и сложнее, чем приведенный выше пример. Однако основные принципы работы с графиками остаются теми же. Чтобы упростить реальную задачу, представим небольшой склад:</p>
11 <p>Рассмотрим подробнее эту сложную схему:</p>
11 <p>Рассмотрим подробнее эту сложную схему:</p>
12 <ul><li>Здесь показано общее количество полок (точек комплектации) - включена каждая 50-я полка, они отмечены черными квадратами</li>
12 <ul><li>Здесь показано общее количество полок (точек комплектации) - включена каждая 50-я полка, они отмечены черными квадратами</li>
13 <li>Всем точкам подбора присвоен адрес (номер узла) от 1-74</li>
13 <li>Всем точкам подбора присвоен адрес (номер узла) от 1-74</li>
14 <li>Стрелками показаны разрешенные направления движения, поворотные точки и короткие пути между коридорами</li>
14 <li>Стрелками показаны разрешенные направления движения, поворотные точки и короткие пути между коридорами</li>
15 </ul><p>Опишем этот граф в виде матрицы смежности. Еще включим в нее расстояние между различными узлами, так как нам нужно найти оптимальный маршрут:</p>
15 </ul><p>Опишем этот граф в виде матрицы смежности. Еще включим в нее расстояние между различными узлами, так как нам нужно найти оптимальный маршрут:</p>
16 <p>В этой матрице снова указаны все ограничения:</p>
16 <p>В этой матрице снова указаны все ограничения:</p>
17 <ul><li>Разрешенное направление движения</li>
17 <ul><li>Разрешенное направление движения</li>
18 <li>Разрешенные короткие пути</li>
18 <li>Разрешенные короткие пути</li>
19 <li>Расстояние между узлами</li>
19 <li>Расстояние между узлами</li>
20 </ul><p>Также на матрице мы четко видим короткий путь между узлами 21 и 41. Белые области матрицы представляют неразрешенные пути, обозначенные через бесконечное расстояние между этими узлами.</p>
20 </ul><p>Также на матрице мы четко видим короткий путь между узлами 21 и 41. Белые области матрицы представляют неразрешенные пути, обозначенные через бесконечное расстояние между этими узлами.</p>
21 - <p>Оптимизация графов - это хорошо известная область математики, которая уже успела прийти к нескольким методам и алгоритмам, которые могут решить этот тип проблемы. В этом примере мы основывали решение на<strong>алгоритме Флойда-Уоршалла</strong>. Он помогает искать кратчайшие пути во взвешенном графе, и эту темы мы рассмотрим подробнее по ходу курса. Одно выполнение алгоритма позволяет найти<strong>длины</strong>- суммированные веса кратчайших путей между всеми парами узлов. Хотя он не возвращает подробностей о самих путях, их можно восстановить с помощью простых модификаций алгоритма.</p>
21 + <p>Оптимизация графов - это хорошо известная область математики, которая уже успела прийти к нескольким методам и алгоритмам, которые могут решить этот тип проблемы. В этом примере мы основывали решение на<strong>алгоритме Флойда-Уоршалла</strong>. Он помогает искать кратчайшие пути во взвешенном графе, и эту тему мы рассмотрим подробнее по ходу курса. Одно выполнение алгоритма позволяет найти<strong>длины</strong>- суммированные веса кратчайших путей между всеми парами узлов. Хотя он не возвращает подробностей о самих путях, их можно восстановить с помощью простых модификаций алгоритма.</p>
22 - <p>Абстрактное представление склада в виде графа, не решает нашу задачу. При этом благодаря графу можно использовать математическую основу и алгоритмы из теории графов, чтобы решить задачу.</p>
22 + <p>Абстрактное представление склада в виде графа не решает нашу задачу. При этом благодаря графу можно использовать математическую основу и алгоритмы из теории графов, чтобы решить задачу.</p>
23 - <p>Существует несколько методов и алгоритмов, которые могут решить этот тип задачи. В данном примере мы использовали алгоритм Флойда-Уоршалла - он помогает искать кратчайшие пути во взвешенном графе. Его мы разберем в других уроках этого курса.</p>
 
24 - <p>С помощью одного действия в алгоритме можно найти длины кратчайших путей между всеми парами узлов. При этом мы не узнаем подробности о каждом пути, а сможем восстановить их с помощью простых модификаций алгоритма.</p>
 
25 <p>Если дать этому алгоритму в качестве входных данных список заказов на сборку, в котором перечислены необходимые для комплектации товары, то можно получить оптимальный маршрут.</p>
23 <p>Если дать этому алгоритму в качестве входных данных список заказов на сборку, в котором перечислены необходимые для комплектации товары, то можно получить оптимальный маршрут.</p>
26 <p>Например, визуализируем результаты для короткого списка комплектации:</p>
24 <p>Например, визуализируем результаты для короткого списка комплектации:</p>
27 <p>Начнем с узла 0 и заберем товары в узлах 15, 45, 58 и 73. Алгоритм находит кратчайший допустимый маршрут между этими точками путем вычисления матрицы расстояний D. Затем ее можно использовать, чтобы определить общее расстояние между всеми узлами в списке комплектации:</p>
25 <p>Начнем с узла 0 и заберем товары в узлах 15, 45, 58 и 73. Алгоритм находит кратчайший допустимый маршрут между этими точками путем вычисления матрицы расстояний D. Затем ее можно использовать, чтобы определить общее расстояние между всеми узлами в списке комплектации:</p>
28 <ol><li>D[0][15] → 90 m</li>
26 <ol><li>D[0][15] → 90 m</li>
29 <li>D[15][45] → 52 m</li>
27 <li>D[15][45] → 52 m</li>
30 <li>D[45][58] → 34 m</li>
28 <li>D[45][58] → 34 m</li>
31 <li>D[58][73] → 92 m</li>
29 <li>D[58][73] → 92 m</li>
32 </ol><p>Общее расстояние =268m - это самый короткий путь</p>
30 </ol><p>Общее расстояние =268m - это самый короткий путь</p>
33 <p>Алгоритм протестировал несколько списков подбора в качестве входных данных и проверил предложенные маршруты движения и рассчитанное расстояние, и нашел оптимальный маршрут во всех случаях. Алгоритм соблюдает все наложенные ограничения.</p>
31 <p>Алгоритм протестировал несколько списков подбора в качестве входных данных и проверил предложенные маршруты движения и рассчитанное расстояние, и нашел оптимальный маршрут во всех случаях. Алгоритм соблюдает все наложенные ограничения.</p>
34 <h2>Выводы</h2>
32 <h2>Выводы</h2>
35 <p>В этом уроке вы увидели, как работать с графами на примере задачи. Мы нашли кратчайший маршрут на складе для комплектации товаров и использовали для этого матрицы смежности и алгоритм Флойда-Уоршалла.</p>
33 <p>В этом уроке вы увидели, как работать с графами на примере задачи. Мы нашли кратчайший маршрут на складе для комплектации товаров и использовали для этого матрицы смежности и алгоритм Флойда-Уоршалла.</p>