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 來適應原始圖的結構。如果
cycle
是False
,則刪除最大的權重邊以形成哈密頓路徑。然後,用於該分析的新完整圖上的每條邊都將替換為原始圖上這些節點之間的shortest_path。- G:NetworkX 圖
一個可能的加權圖
- nodes:節點集合(默認=G.nodes)
要訪問的節點的集合(列表、集合等)
- weight:字符串,可選(默認=”weight”)
邊權重對應的邊數據鍵。如果任何邊不具有此屬性,則權重設置為 1。
- cycle:布爾(默認值:真)
指示是否應返回循環或路徑。注意:周期是近似的最小周期。該路徑隻是刪除了該循環中最大的邊。
- method:函數(默認:無)
一個函數,它在所有節點上返回一個循環,並在完整圖上逼近旅行商問題的解決方案。然後使用返回的循環在
G
上找到相應的解決方案。method
應該是可調用的;接受輸入G
和weight
;並返回循環中的節點列表。提供的選項包括
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
相關用法
- Python NetworkX transitive_closure_dag用法及代碼示例
- Python NetworkX transitivity用法及代碼示例
- Python NetworkX transitive_closure用法及代碼示例
- Python NetworkX transitive_reduction用法及代碼示例
- Python NetworkX tree_graph用法及代碼示例
- Python NetworkX triangles用法及代碼示例
- Python NetworkX triad_graph用法及代碼示例
- Python NetworkX tree_data用法及代碼示例
- Python NetworkX to_prufer_sequence用法及代碼示例
- Python NetworkX to_numpy_recarray用法及代碼示例
- Python NetworkX to_dict_of_dicts用法及代碼示例
- Python NetworkX to_scipy_sparse_array用法及代碼示例
- Python NetworkX to_pydot用法及代碼示例
- Python NetworkX threshold_accepting_tsp用法及代碼示例
- Python NetworkX to_vertex_cover用法及代碼示例
- Python NetworkX to_sparse6_bytes用法及代碼示例
- Python NetworkX to_numpy_matrix用法及代碼示例
- Python NetworkX topological_generations用法及代碼示例
- Python NetworkX to_graph6_bytes用法及代碼示例
- Python NetworkX tensor_product用法及代碼示例
- Python NetworkX to_pandas_adjacency用法及代碼示例
- Python NetworkX to_nested_tuple用法及代碼示例
- Python NetworkX to_networkx_graph用法及代碼示例
- Python NetworkX to_numpy_array用法及代碼示例
- Python NetworkX to_agraph用法及代碼示例
注:本文由純淨天空篩選整理自networkx.org大神的英文原創作品 networkx.algorithms.approximation.traveling_salesman.traveling_salesman_problem。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。