Я пытаюсь использовать Travel_salesman_problem NetworkX, чтобы найти кратчайший путь между узлами, но, похоже, он возвращает более длинный путь, чем необходимо. Вот минимальный пример:
Я пытаюсь использовать Travel_salesman_problem NetworkX, чтобы найти кратчайший путь между узлами, но, похоже, он возвращает более длинный путь, чем необходимо. Вот минимальный пример: [code]import shapely import networkx as nx import matplotlib.pyplot as plt
# Make a 10x10 grid
vert = shapely.geometry.MultiLineString([[(x, 0), (x, 100)] for x in range(0, 110, 10)]) hori = shapely.affinity.rotate(vert, 90) grid = shapely.unary_union([vert, hori])
# Turn it into a graph
graph = nx.Graph() graph.add_edges_from([(*line.coords, {"distance": line.length}) for line in grid.geoms])
# Select nodes and visit them via TSP and manually
for ax in axes: for line in grid.geoms: ax.plot(*line.xy, c="k", lw=.25) ax.scatter(*zip(*nodes), c="k") ax.set_aspect("equal") axes[0].plot(*tsp_path.xy, c="b") axes[0].set_title(f"TSP solution length={tsp_path.length}") axes[1].plot(*manual_path.xy, c="r") axes[1].set_title(f"manual length={manual_path.length}") [/code] Чего мне не хватает? Является ли TSP неправильным алгоритмом для этого? [img]https://i.sstatic.net/9QiWyhcK .png[/img]