在触摸ArcGIS网络中的所有可用道路时计算最佳路线?


13

为了准备冬季,我们要计算在道路上撒盐的最佳路线。分析知道以下标准:

  • 车辆在单个装载点启动和停止
  • 所有可用的道路都需要撒上盐
  • 一条路线的时间不得超过验证时间(假设2小时)
  • 由于每辆车的盐分负荷有限,因此路线的距离受限于可用的盐分量。(假设10公里)

ArcGIS(10.0)的网络分析师假设您有一个起点和终点来计算路线。但是,在这种情况下,不是要计算从起点到目的地的最快路线,而是要在有限的时间范围内覆盖尽可能多的道路距离的最佳路线。

现在,我们正在考虑计算每个路段的中点并将其用作目的地以计算路线。


2
这听起来很像垃圾车路线,只有在那里卡车返回仓库倒空而盐重新装满。两者都需要访问网络的所有部分。
PolyGeo

非常真实 您有解决此类路由问题的技巧吗?
Mark Verschuur

在我们的管辖范围内,我们还有一个附加变量,即Sand。因为体积较小的道路会积沙,体积较大的道路会积盐。如果您想与我建立聊天室,我们可以全面讨论问题。我还可以为您提供一些有关我们所做的工作以及我们的解决方案是否可以比较的
见解

可以将其简化为多个车辆的提货和交付问题,并且有很多相关文章。
雅各布·卡尼亚

Answers:


5

我认为某些答案取决于道路网络的布局,这个问题可能值得在Math Stack Exchange(/math//)上发布,因为它似乎是一个图论问题。我认为这不是最佳的解决方案,但它可能有助于您更紧密地联系在一起。

您可以将道路网络划分为自然区域,其中路段的长度总和将大致等于卡车在给定负载下可以覆盖的数量。然后,对于每个区域,您都可以进行欧拉游,以获得可以触及所有路段的路线。样本python代码

def eulerian_tour(network_graph):
    graph = network_graph[:]
    route = []
    def find_route(start):
        for (i, j) in graph:
            if i == start:
                graph.remove((i, j))
                find_route(j)
            elif j == start:
                graph.remove((i, j))
                find_route(i)
        route.append(start)

    find_route(graph[0][0])
    route.reverse()
    return route

然后,您可以考虑在区域和仓库之间进行路由,并将访问路径分解为可用卡车的逻辑段。希望这可以帮助。


1

我将以这种方式处理此任务。ArcGIS Network Analyst有一个名为VRP的求解器,可以帮助您订购和管理路线。我会将网络数据集中的每个道路链接转换为点要素(例如,“ 要素到点(数据管理) GP工具”,或者首先将线分割为简单的两个顶点线段,然后将中间点变成中心点)。

说到VRP,这些将成为您的订单。然后,您将路线限制为一定的时间(2小时),您的仓库地点将同时是起点和终点。假设您有多辆车,您将能够获得一辆车的多条路线或同一辆车的多条路线。

我强烈建议您阅读本教程,该教程将帮助您了解如何在Network Analyst中使用VRP。我本人已将此求解器用于多个项目,发现它在很大程度上满足了我的业务工作流程,功能极为强大且可自定义。

请记住,Network Analyst可以在有限数量的输入订单(在您的情况下为道路的质心)中很好地工作。我成功完成了数千笔订单(多达9,000笔)。因此,如果您要为一个非常大的城市服务,则可以将您的路线限制为仅在某些城市范围内运营(就VRP-路线区域而言)。

如果您正在寻找专为高密度点路由设计的开箱即用且功能强大的解决方案,请考虑使用RouteSmart。它建立在ArcGIS之上,旨在解决此类问题。


感谢您的建议。我一定会去看看RouteSmart
Mark Verschuur
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.