當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。