微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

均衡加权图

如何解决均衡加权图

是否有一种算法可以改变多向图中的某个方向,使其权重均匀分布?我知道我们可以通过删除添加边来改变多向图中的方向,但我不知道我应该改变哪条边

G = ox.graph_from_bBox(north,south,east,west,network_type = 'drive',simplify=True)

for u,v,data in G.edges(data=True):
  data['weight'] = Somecomputation()

ev = [data['weight'] for _,_,data in G.edges(data=True)]

r = plt.Boxplot(ev)

结果如下 boxplot。但是异常值太多了,至少我希望通过在我的图中添加删除边来使分布没有那么多异常值。

这就是我添加删除边缘的方式

nodes,edges = ox.graph_to_gdfs(G)

oneway = edges[edges.oneway == True]
twoway = edges[edges.oneway == False]

def add_edge(gdf,u,v):
  gdf_copy = gdf
  index = pd.MultiIndex.from_tuples([(u,0)],names=["u","v","key"])
  query = gdf_copy.query("u == "+str(v)+" and v == "+str(u))
  df = pd.DataFrame(data=query.values,index=index)
  gdf_copy = gdf_copy.append(df)

  return gdf_copy

def remove_edge(gdf,v):
  gdf_copy = gdf
  gdf_copy = gdf_copy[~gdf_copy.isin(gdf_copy.query("u == "+str(u)+" and v == "+str(v)))]
  gdf_copy = gdf_copy[gdf_copy.length.notna()]

  return gdf_copy

list_edge2add = [...] #list of tuple
list_edge2remove = [...] #list of tuple

# applying add_edge() on oneway and remove_edge() on twoway by for looping

gdf = oneway.append(twoway)

# I get new graph
G = ox.graph_from_gdfs(nodes,gdf)

for u,data in G.edges(data=True)]

r = plt.Boxplot(ev)

问题是我不知道我应该使用什么 list_edge2add 和 list_edge2remove 以获得更均匀的分布

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。