有或无资源约束的初等最短路径问题
该模块解决了最短基本路径问题,即路径中的每个节点只能访问一次。边权重不需要为非负。
解决此问题的通用算法通过求解k路径问题,即通过反复解决非元素问题,并要求对于非元素路径中存在的节点,需要找到多条(k)路径。生成的算法从单一源到所有目的地[1].然而,如果考虑非常大的图形,则速度可能会非常慢。尤其是因为[1]中的算法存在固有缺陷,而对此的修复使其效率大大低于预期:参见ESPP.py中的注释。
当图中的每一条边都有正资源关联时,可以使用更强大的算法,但如果不是太多的边关联的资源成本为零,则可以将此要求放宽为非负资源。由此产生的基本资源约束最短路径问题(ESPPRC)可以通过首先对图进行预处理的算法进行求解[2]。在预处理期间,首先通过丢弃所有无法从源节点到达或无法到达目标节点而不违反资源限制的节点来修剪图形。随后,对于生成的修剪图中的每一对,都会寻找代价最小的路径,稍后将使用该路径来增加所谓的优势其他路径的路径。
预处理后,通过引入节点资源它计算节点在特定路径中使用的次数,以便可以强制元素。由于这个问题在本质上可能很快会呈指数级增长,因此必须引入的资源节点数量尽可能少是至关重要的。在该算法中,这是通过使用双重优势策略来实现的:一方面,只有当路径的资源消耗不受另一条路径支配时,路径才会被添加到可能的最短路径列表中。此外,当添加一条路径时,将丢弃由其控制的其他可能路径。另一方面,强大的优势是一种数学技巧,用于通过人工增加无法到达的节点的可能节点资源来加速收敛到最短路径[2]。由此产生的算法寻求ESPPRC单一来源到单一目的地问题。
安装
依赖关系
- 笨蛋
- 网络x
- 登录中
- 复制
- matplotlib(用于测试)
- 随机(用于测试)
- timeit(用于测试)
用法
入门
首先,有向图(网络x.有向图
)G公司
使用pylgreen需要有一个属性n个资源
例如,设置为
G公司 = nx(纳克斯).DiGraph(DiGraph)(n个资源=1)
或
G公司.图表['资源(_R)'] = 1
如果图形已经存在。
此外,每个图形边都应该有一个属性重量
,这是将沿路径最小化的。
此外,
从 皮格利姆 进口 工具
应该用于解耦有向图确保计算基本最短路径的源节点一定没有任何内边,因为算法不允许这样做:
工具.解耦源(G公司, 来源, 源(_I)='源_in')
复制来源
节点到源(_I)
并将所有in-edges移动到新节点。此操作在现场进行。
然后,可以使用
工具.取消耦合源(G公司, 来源, 源(_I)=`来源_ in`)
除此之外,
从 皮格利姆 进口 路径
应用于导入路径
继承自网络x.有向图
它表示一个可以循环的路径,因此它包含源节点的信息。除此之外,该类还为路径中的下一条边提供了迭代器、漂亮的打印等。
此外,它还用于表示来自ESPP和ESPPRC的解决方案路径。
基本最短路径
首先通过导入模块可以使用基本最短路径
从 皮格利姆 进口 静电除尘器
这个动态标记算法实现[1]:
返回 路径, 成本 = 国防后勤局(G公司, 来源, 最小_K=1, 输出pos = False(错误), 最大路径长度 = -1)
哪里G公司
si是从中找到最短路径的有向图来源
到所有其他节点。
(可选)通过最小值(_K)
可以更改每个节点返回的最小路径数,使用输出pos
也可以通过最大路径长度
,可以限制路径的最大长度,从而使问题更容易解决。
国防后勤局
中的输出路径
一个字典,其中的键是目标节点,对于其中的每一个,都会返回一个列表,其中包含类型最佳的路径路径
,按最低成本订购,长度至少为最小值(_K)
。成本本身在匹配字典中返回成本
.
然而,请注意,ESPP不应用于非常小的图形。下面的算法应该快得多。
具有资源约束的基本最短路径
首先通过导入模块,可以使用具有资源约束的基本最短路径
从 皮格利姆 进口 ESPPRC公司
这个一般状态空间扩充算法,GSSA公司
实施[2]:
最佳路径(_P), 最佳路径标签 = GSSA公司(G公司, 来源, 目标, 最大值(_R), res_最小值, 资源名称='资源成本')
哪里G公司
是要在其之间找到最短路径的有向图来源
和目标
根据中给出的最大资源使用量最大值(_R)
,可以在任何路径上使用的最大资源的数组,其中应该为每个资源指定一个值。
此外,请注意图表G公司
必须先进行预处理,这样它才能减少并具有要传递到的最小资源信息res_最小值
G公司, res_最小值 = ESPPRC公司.预处理(G_no_预处理, 来源, 目标, 最大值(_R), 资源名称='资源成本')
最后,在这些函数中,资源名称
可以用于指定要在内部用于图中边的资源的名称。
的输出GSSA公司
是一个最佳路径(_P)
的路径
类型和相应的最佳路径标签
这是一个2元组,第一个元素等于最佳路径的成本,第二个元素等于消耗的资源数组,小于或等于res最大值
.
测试
- 在中运行测试
/测试
使用python测试_[NAME].py
哪里[姓名]
是测试的名称。
- 将显示绘图和文本输出。
- 要调试,请更改
警告
到信息
或者可能调试
在里面logging.basicConfig(级别=logging.WARNING)
出现在python文件的顶部。
工具书类
[1]具有负成本循环的最短路径问题作者:Di Puglia Pugliese,Luigi(DOI:10.1007/s10589-015-9773-1)
[2]基本资源受限最短路径问题的加速标签设置算法作者:Boland,Natashia(DOI:10.1016/j.orl.2004.11.011)
版权
版权所有2018 Toon Weyens,Daan van Vugt