-
Notifications
You must be signed in to change notification settings - Fork 0
/
nwi.py
41 lines (35 loc) · 1.14 KB
/
nwi.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Implementação da classe que calcula as métricas de custo (NWI)
#
# Autores:
# Debora
# Rogerio
#
# Universidade Federal do Espírito Santo - UFES
# Vitória / ES - 2020
# Imports gerais de módulos padrão
import networkx as nx # type: ignore
from typing import Tuple, List
from copy import deepcopy
# Imports específicos da aplicação
class NWI:
"""
"""
def __init__(self, graph: nx.Graph):
self.graph = graph
self.wiener = nx.wiener_index(graph)
self.distances = dict(nx.all_pairs_dijkstra_path_length(graph))
def nodal_wiener_impact(self) -> Tuple[List[float], float]:
"""
Calcula o impacto nodal de Wiener para o grafo.
"""
impacts: List[float] = []
for i in range(self.graph.number_of_nodes()):
T_v = 0.0
graph_copy = deepcopy(self.graph)
for j in range(self.graph.number_of_nodes()):
T_v += self.distances[i][j]
graph_copy.remove_node(i)
W_v = nx.wiener_index(graph_copy)
I_v = W_v + T_v - self.wiener
impacts.append(I_v)
return (impacts, sum(impacts))