均衡加权图

问题描述

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

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 (将#修改为@)