asadpour_atsp#
- asadpour_atsp(G, weight='weight', seed=None, source=None)[源代码]#
返回旅行商问题的近似解。
这个近似解是 Asadpour 等人开发的非对称旅行商问题最好的已知近似解之一,见 [1]。该算法首先求解 Held-Karp 松弛问题,以找到环权重的一个下界。接下来,它使用最大熵舍入方案构建无向生成树的指数分布,其中边在树中的概率对应于该边的权重。接下来,我们对该分布采样 \(2 \lceil \ln n \rceil\) 次,并在将弧的方向添加回边后保存最小的采样树。最后,我们增强然后短路该图,以找到旅行商的近似路径。
- 参数:
- Gnx.DiGraph
图应为完整的有权有向图。所有节点对之间的距离应包含在内,并且应满足三角不等式。也就是说,任意两个节点之间的直接边应为成本最低的路径。
- weight字符串,可选 (默认为“weight”)
对应边权重的边数据键。如果任何边没有此属性,则权重设为 1。
- seed整数,random_state 或 None (默认)
随机数生成状态的指示器。参见 随机性。
- source节点标签 (默认为 `None`)
如果给定,返回从给定节点开始和结束的环。
- 返回:
- cycle节点列表
返回旅行商为最小化旅行总权重可以遵循的环(节点列表)。
- 引发:
- NetworkXError
如果
G
不完整或节点少于两个,则算法引发异常。- NetworkXError
如果
source
不是None
且不是G
中的节点,则算法引发异常。- NetworkXNotImplemented
如果
G
是无向图。
参考文献
[1]A. Asadpour, M. X. Goemans, A. Madry, S. O. Gharan, and A. Saberi, An o(log n/log log n)-approximation algorithm for the asymmetric traveling salesman problem, Operations research, 65 (2017), pp. 1043–1061
示例
>>> import networkx as nx >>> import networkx.algorithms.approximation as approx >>> G = nx.complete_graph(3, create_using=nx.DiGraph) >>> nx.set_edge_attributes( ... G, ... {(0, 1): 2, (1, 2): 2, (2, 0): 2, (0, 2): 1, (2, 1): 1, (1, 0): 1}, ... "weight", ... ) >>> tour = approx.asadpour_atsp(G, source=0) >>> tour [0, 2, 1, 0]