レシピブック09を参考に以下の仕様を考えていますエージェントが通行不能な道路(リンクの色で指定済み)にたどり着いたら,その道路を除いて経路を再探索させたいと思っていますその通行不能な道路を除く方法を考えているのですがわかりませんどのような方法がよいか教えてください古い記事にリンクを切断すればよいとてありますが,当てはまりますかまたリンクを切断とはどのようにコーディングするのでしょうか
ありがとうございます
networkxが初めてなので知識がなくてすみません
remove_edgeについて調べたのですが,逆方向の呼び出しについて見つかりませんでした
エラーが解消できないので教えてください
逆方向の呼び出しとは [(1,2),...,(5,6)]という複数エッジがあった場合,
graph.remove_edges_from(1,2)ではエラーで
graph.remove_edges_from(2,1)にするという意味ですか
実は一括で切断するのではなく,エージェントが該当リンクにたどり着いたらその一つのリンクのみを切断する仕様に変更しました その場合でも同じKEYERROORが出ます
graph.remove_edge(1,2)でも graph.remove_edge(2,1)でも同じエラーです
エージェントの移動の際切断してみましたが,やはりkeyERROORがでます
今度は’切断 ・・・ ・・・’もプリントされません
どうしたらよろしいでしょうか
# リンク色が'magenta'の場合は切断
# graphとlink_listに追加
last_id = int(self.route[self.route_count - 1])
link_color = Universe.graph.edges[str(last_id), str(target_id)]['color']
if link_color == Universe.get_rgb('magenta'):
Universe.graph.remove_edges_from([(str(last_id), str(target_id))])
print('切断', str(last_id), str(target_id))
コンソール
・・・
Source "artisoc/reportviews", line 930, in getitem__return self._adjdict[u][v]
EeyERROR: '322'
今気づいたのですが,最初にリンクを切断してしまうと,そもそもダイクストラ法
でその経路は選ばれなくなってしまいますね
やはりエージェントが動く度に切断するようにしたいです
レシピブック09では、networkxを使って、道路ネットワークを格納しています。
具体的には、Universeルールのinit_linkでリンク(edge)を追加しています。
リンクを切断するには「remode_edges_from」を使うとよいので、
例えば、下記の通りPointIDの2点を与えると、リンクが切断できます。
# graphとlink_listに追加
if one_link_type == 'both' or one_link_type == 'forward':
Universe.graph.add_edge(str(one_id), str(two_id), weight=one_distance)
Universe.graph.edges[str(one_id), str(two_id)]['color'] = one_color
Universe.graph.edges[str(one_id), str(two_id)]['distance'] = one_distance
if rand() < 0.5:
Universe.graph.remove_edges_from([(str(one_id), str(two_id))])
print('切断', str(one_id), str(two_id))