我想使用networkx计算节能路线。为此,我考虑将电池约束建模为边缘成本函数。在下面的示例中,我想根据我车辆的蓄电池负载计算s和t之间的最短路线(b
)。我的网络约束将决定边缘成本函数
例如,在s
和v1
之间,如果s
处的电池负载高于18,则边缘成本将为18;如果s
处的电池负载低于18,则边缘成本将为18(接近无穷大)
是否可以定义networkx中最短路径算法将使用的边代价函数
或者你认为最好的解决方案是创建一个新的多有向图,其中所有不同的可能边缘成本都会根据起点的初始费用重新计算
编辑1: 为了简化问题,我们可以考虑负权重(对应于电池的充电)等于零。在第二次中,我将看到如何使用Johnson's algorithm。它似乎是在networkx(https://networkx.org/documentation/stable/reference/algorithms/generated/networkx.algorithms.shortest_paths.weighted.johnson.html)中实现的
编辑2: 最大电池负载为20,这解释了为什么电池负载在s和v_3之间没有增加,以及为什么不可能通过s->;v3->;v2
比如说
(PathFinder是DojsTr::DjjStA:图的执行)的C++包装
因此,现在我们有一个新的先前隐藏的约束,即电池容量最大为20。因此,我提出了另一种方法,它应该是针对可能出现的任何进一步限制的证据。它基于A* algorithm的思想
重新设计问题,使充电站位于节点,充电站之间的链路具有恒定的正成本。(在我看来,这是一个更自然的真实世界模型)
使用Dijsktra,仅考虑链路成本,从连接到当前完成节点(最初为起始节点)的每个节点查找到目的地的最便宜路径
对于连接到当前节点的每个节点,将当前节点的链路成本、1中计算的到目的地的成本减去节点提供的任何充电
从3中计算成本的每个节点中,选择最便宜的节点。跟踪用于到达此节点的路径并使其成为当前路径
从步骤2重复,直到到达目标节点
这是一个非常专业的问题,我不会将其添加到PathFinder选项中。如果它代表了一个严重的现实问题,而不仅仅是家庭作业或学术练习,那么在PathFindergithub存储库上打开一个问题,我们可以讨论为此开发一次性应用程序的细节
相关问题 更多 >
编程相关推荐