時間拡大ネットワークを作成しているが実行してもエッジリストに追加されません。原因と解決策を教えて頂きたいです。
import networkx as nx import numpy as np from decimal import * from math import * #空のオブジェクトの作成 G = nx.DiGraph() tedges=[] #tail,head,time,cost tedges+=[(1,2,{'time':30,'cost':3})] tedges+=[(1,3,{'time':2,'cost':2})] tedges+=[(2,3,{'time':1,'cost':5})] tedges+=[(2,4,{'time':3,'cost':10})] tedges+=[(3,4,{'time':4.1,'cost':7})] G.add_weighted_edges_from(tedges) # 離散時間の定義(最小時間、最大時間、時間間隔) tstart,tend,tint=0.0,5.0,1.0 # 等間隔の離散時間を設定 tdisctime=np.arange(tstart,tend+tint,tint) disctime=[] for t in tdisctime: disctime+=[float (Decimal(t).quantize(Decimal('.00'),rounding = ROUND_HALF_UP))] # # 不動小数点の位を固定して数値を四捨五入で丸めてる tG=nx.DiGraph() # # 有向グラフのノードと離散時間のペアを作って時間拡大ネットワーク作成 tedges=[] for tail,nbrs in G.adjacency(): for head,eattr in nbrs.items(): for tail_t in disctime: data = eattr['weight'] # 元のグラフGの枝の属性{time,cost}をデータに代入 arr_t=tail_t+data['time'] if arr_t>floor(arr_t/tint)*tint+1e-7: arr_t=(floor(arr_t/tint)+1)*tint else: arr_t=floor(arr_t/tint)*tint if arr_t<=tend: tcost=data['cost'] tedges+=[((tail,tail_t),(head,arr_t),{'weight':tcost})] tG.add_edges_from(tedges) nx.write_edgelist(G, "もと.edgelist") nx.write_edgelist(tG, "時間拡大.edgelist")
リンク内容
このサイトを参考にしました。
anacondaでエディターはjupyter notebookを使用しています。
回答1件
あなたの回答
tips
プレビュー