当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python NetworkX traveling_salesman_problem用法及代码示例


本文简要介绍 networkx.algorithms.approximation.traveling_salesman.traveling_salesman_problem 的用法。

用法:

traveling_salesman_problem(G, weight='weight', nodes=None, cycle=True, method=None)

G中找到连接指定节点的最短路径

此函数允许在不是完整图和/或推销员不需要访问所有节点的网络上近似解决旅行推销员问题。

此函数分两步进行。首先,它使用 nodes 中的节点之间的 all-pairs shortest_paths 创建一个完整的图。新图中的边权重是原始图中每对节点之间的路径长度。其次,使用一种算法(默认: christofides 表示无向, asadpour_atsp 表示有向)用于逼近这个新图上的最小哈密顿循环。可用的算法有:

  • christofides

  • greedy_tsp

  • simulated_annealing_tsp

  • threshold_accepting_tsp

  • asadpour_atsp

一旦找到哈密顿循环,这个函数post-processes 来适应原始图的结构。如果 cycleFalse ,则删除最大的权重边以形成哈密顿路径。然后,用于该分析的新完整图上的每条边都将替换为原始图上这些节点之间的shortest_path。

参数

GNetworkX 图

一个可能的加权图

nodes节点集合(默认=G.nodes)

要访问的节点的集合(列表、集合等)

weight字符串,可选(默认=”weight”)

边权重对应的边数据键。如果任何边不具有此属性,则权重设置为 1。

cycle布尔(默认值:真)

指示是否应返回循环或路径。注意:周期是近似的最小周期。该路径只是删除了该循环中最大的边。

method函数(默认:无)

一个函数,它在所有节点上返回一个循环,并在完整图上逼近旅行商问题的解决方案。然后使用返回的循环在 G 上找到相应的解决方案。 method 应该是可调用的;接受输入 Gweight ;并返回循环中的节点列表。

提供的选项包括 christofides() greedy_tsp() simulated_annealing_tsp() threshold_accepting_tsp()

如果 method is None :将 christofides() 用于无向 G threshold_accepting_tsp() 用于有向 G

要为这些提供的函数指定参数,请构造声明特定值的 lambda 函数。 method 必须有 2 个输入。 (见例子)。

返回

列表

G 中沿路径的节点列表,该路径具有通过 nodes 的最小路径的近似值。

抛出

NetworkXError

如果G 是有向图,则它必须是强连接的,否则无法生成完整的版本。

例子

>>> tsp = nx.approximation.traveling_salesman_problem
>>> G = nx.cycle_graph(9)
>>> G[4][5]["weight"] = 5  # all other weights are 1
>>> tsp(G, nodes=[3, 6])
[3, 2, 1, 0, 8, 7, 6, 7, 8, 0, 1, 2, 3]
>>> path = tsp(G, cycle=False)
>>> path in ([4, 3, 2, 1, 0, 8, 7, 6, 5], [5, 6, 7, 8, 0, 1, 2, 3, 4])
True

构建(curry)你自己的函数来为方法提供参数值。

>>> SA_tsp = nx.approximation.simulated_annealing_tsp
>>> method = lambda G, wt: SA_tsp(G, "greedy", weight=wt, temp=500)
>>> path = tsp(G, cycle=False, method=method)
>>> path in ([4, 3, 2, 1, 0, 8, 7, 6, 5], [5, 6, 7, 8, 0, 1, 2, 3, 4])
True

相关用法


注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.algorithms.approximation.traveling_salesman.traveling_salesman_problem。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。