我在使用Python和networkx创建一个遗传算法来解决旅行商问题。我正在添加一个条件,以便收敛到令人满意的解:路径中不能有交叉边。我想知道networkx是否有一个快速函数来验证图形是否具有交叉边,或者至少想知道是否有可能创建这样一个函数。
该图形是使用点列表("path")创建的,每个点都有x坐标和y坐标。点的顺序索引到旅游路线的路径。我创建了一个 "nx.Graph()" 对象,如下所示:
该图形是使用点列表("path")创建的,每个点都有x坐标和y坐标。点的顺序索引到旅游路线的路径。我创建了一个 "nx.Graph()" 对象,如下所示:
G = nx.Graph()
for i in range(len(path)):
G.add_node(i, pos=(path[i].x, path[i].y))
for i in range(len(path)-1):
G.add_edge(i, i+1)
G.add_edge(len(path)-1, 0)
一个收敛但不是最优解的例子:
使用nx.get_node_attributes(G,'pos')
输出点:
{0: (494, 680), 1: (431, 679), 2: (217, 565), 3: (197, 581), 4: (162, 586), 5: (90, 522), 6:(138, 508), 7: (217, 454), 8: (256, 275), 9: (118, 57), 10: (362, 139), 11: (673, 89), 12: (738, 153), 13: (884, 119), 14: (687, 542), 15: (720, 618), 16: (745, 737), 17: (895, 887), 18: (902, 574), 19: (910, 337), 20: (823, 371), 21: (601, 345), 22: (608, 302), 23: (436, 294), 24: (515, 384), 25: (646, 495)}
这里有一篇支持收敛条件的文章: http://www.ams.org/publicoutreach/feature-column/fcarc-tsp