Code owners
Assign users and groups as approvers for specific file changes. Learn more.
config.py 2.57 KiB
import networkx as nx
from typing import Set
from evrouting.T import Node, ChargingCoefficient
from evrouting.graph_tools import (
node_convert, edge_convert, TemplateEdge, TemplateNode, charging_cofficient
)
# List of configs
config_list = [
'edge_case',
'edge_case_start_node_no_cs',
'edge_case_a_slow'
]
edge_case = {
'beta_s': 0,
'beta_t': 0,
'U': 4,
's': 0,
't': 2,
'nodes': [
TemplateNode('s', charging_coeff=1),
TemplateNode('a', charging_coeff=2),
TemplateNode('t'),
],
'edges': [
TemplateEdge(0, 1, distance=1, consumption=1),
TemplateEdge(0, 2, distance=1, consumption=4),
TemplateEdge(1, 2, distance=1, consumption=1),
]
}
edge_case_a_slow = {
'beta_s': 0,
'beta_t': 0,
'U': 4,
's': 0,
't': 2,
'nodes': [
TemplateNode('s', charging_coeff=2),
TemplateNode('a', charging_coeff=1),
TemplateNode('t'),
],
'edges': [
TemplateEdge(0, 1, distance=1, consumption=1),
TemplateEdge(0, 2, distance=1.5, consumption=4),
TemplateEdge(1, 2, distance=1, consumption=1),
]
}
edge_case_start_node_no_cs = {
'beta_s': 0,
'beta_t': 0,
'U': 4,
's': 0,
't': 2,
'nodes': [
TemplateNode('s'),
TemplateNode('a', charging_coeff=2),
TemplateNode('t'),
],
'edges': [
TemplateEdge(0, 1, distance=1, consumption=1),
TemplateEdge(0, 2, distance=1, consumption=4),
TemplateEdge(1, 2, distance=1, consumption=1),
]
}
def get_graph(config: dict) -> nx.Graph:
G = nx.Graph()
for node_id, node in enumerate(config['nodes']):
G.add_node(node_id, **node_convert(node))
for edge in config['edges']:
G.add_edge(edge.u, edge.v, **edge_convert(edge))
return G
def get_charging_stations(config: dict) -> Set[Node]:
return {
idx for idx, n in enumerate(config['nodes'])
if n.charging_coeff is not None
}
def init_config(config: dict) -> dict:
G = nx.Graph()
S = set()
for node_id, node in enumerate(config['nodes']):
G.add_node(node_id, **node_convert(node))
c: ChargingCoefficient = charging_cofficient(G, node_id)
if c is not None:
S.add(node_id)
for edge in config['edges']:
G.add_edge(edge.u, edge.v, **edge_convert(edge))
return {
'G': G,
'charging_stations': S,
's': config['s'],
't': config['t'],
'initial_soc': config['beta_s'],
'final_soc': config['beta_t'],
'capacity': config['U']
}