Different Graph Weights¶
In this example, we will discuss how to specify different weights for edges, when creating a Graph from an OOPNET network.
First, we import os, networkx and oopnet.
import os
import networkx as nx
import oopnet as on
filename = os.path.join('data', 'C-town.inp')
We will use the “Anytown” model in this example, so we read it:
net = on.Network.read(filename)
When we create a networkx.Graph (or networkx.DiGraph, networkx.MultiGraph or networkx.MultiDiGraph) object using the corresponding factories in oopnet.graph, the pipe lengths are used as weights in the graph. We will use Dijkstra’s shortest path to compare the different graphs.
G = on.MultiGraph(net)
avg_sp = nx.average_shortest_path_length(G, 'weight')
print(f'Average Shortest Path: {avg_sp}')
Average Shortest Path: 3494.6983087192225
You can specify a different weight, by passing a weight argument. You can specify any Link attribute you want (e.g. roughness). If a link doesn’t have the attribute, a default value is used 0.00001).
G = on.MultiGraph(net, weight='diameter')
avg_sp = nx.average_shortest_path_length(G, 'weight')
print(f'Average Shortest Path: {avg_sp}')
Average Shortest Path: 6363.355196667406
You can specify a different default value, if you want to:
G = on.MultiGraph(net, weight='diameter', default=0)
avg_sp = nx.average_shortest_path_length(G, 'weight')
print(f'Average Shortest Path: {avg_sp}')
Average Shortest Path: 6363.355182198411
Summary¶
import os
import networkx as nx
import oopnet as on
filename = os.path.join('data', 'C-town.inp')
net = on.Network.read(filename)
G = on.MultiGraph(net)
avg_sp = nx.average_shortest_path_length(G, 'weight')
print(f'Average Shortest Path: {avg_sp}')
G = on.MultiGraph(net, weight='diameter')
avg_sp = nx.average_shortest_path_length(G, 'weight')
print(f'Average Shortest Path: {avg_sp}')
G = on.MultiGraph(net, weight='diameter', default=0)
avg_sp = nx.average_shortest_path_length(G, 'weight')
print(f'Average Shortest Path: {avg_sp}')