Skip to content
Snippets Groups Projects
Commit f67a350b authored by markn92's avatar markn92
Browse files

minor change

parent 258a96eb
No related branches found
No related tags found
No related merge requests found
...@@ -46,7 +46,9 @@ def shortest_path(G: nx.Graph, charging_stations: set, s: Node, t: Node, ...@@ -46,7 +46,9 @@ def shortest_path(G: nx.Graph, charging_stations: set, s: Node, t: Node,
# Init maps to manage labels # Init maps to manage labels
l_set: Dict[int, Set[Label]] = {v: set() for v in G} l_set: Dict[int, Set[Label]] = {v: set() for v in G}
l_uns: Dict[int, LabelPriorityQueue] = {v: LabelPriorityQueue(f_soc_factory, l_set[v]) for v in G} l_uns: Dict[int, LabelPriorityQueue] = {
v: LabelPriorityQueue(f_soc_factory, l_set[v]) for v in G
}
# Add dummy charging station with charging function # Add dummy charging station with charging function
# cf(t) = initial_soc (ie charging coefficient is zero). # cf(t) = initial_soc (ie charging coefficient is zero).
...@@ -69,28 +71,28 @@ def shortest_path(G: nx.Graph, charging_stations: set, s: Node, t: Node, ...@@ -69,28 +71,28 @@ def shortest_path(G: nx.Graph, charging_stations: set, s: Node, t: Node,
prio_queue.insert(s, priority=0, count=0) prio_queue.insert(s, priority=0, count=0)
while prio_queue: while prio_queue:
minimum_node: Node = prio_queue.peak_min() node_min: Node = prio_queue.peak_min()
label_minimum_node: Label = l_uns[minimum_node].delete_min() label_node_min: Label = l_uns[node_min].delete_min()
l_set[minimum_node].add(label_minimum_node) l_set[node_min].add(label_node_min)
if minimum_node == t: if node_min == t:
return f_soc_factory(label_minimum_node).minimum return f_soc_factory(label_node_min).minimum
# Handle charging stations # Handle charging stations
if minimum_node in charging_stations and \ if node_min in charging_stations and \
not minimum_node == label_minimum_node.last_cs: not node_min == label_node_min.last_cs:
f_soc: SoCFunction = f_soc_factory(label_minimum_node) f_soc: SoCFunction = f_soc_factory(label_node_min)
t_charge = f_soc.calc_optimal_t_charge(cf_map[minimum_node]) t_charge = f_soc.calc_optimal_t_charge(cf_map[node_min])
if t_charge is not None: if t_charge is not None:
# Spawn new label at t_charge # Spawn new label at t_charge
l_uns[minimum_node].insert( l_uns[node_min].insert(
Label( Label(
t_trip=label_minimum_node.t_trip + t_charge, t_trip=label_node_min.t_trip + t_charge,
soc_last_cs=f_soc(label_minimum_node.t_trip + t_charge), soc_last_cs=f_soc(label_node_min.t_trip + t_charge),
last_cs=minimum_node, last_cs=node_min,
soc_profile_cs_v=soc_profile_factory(minimum_node) soc_profile_cs_v=soc_profile_factory(node_min)
) )
) )
...@@ -98,24 +100,24 @@ def shortest_path(G: nx.Graph, charging_stations: set, s: Node, t: Node, ...@@ -98,24 +100,24 @@ def shortest_path(G: nx.Graph, charging_stations: set, s: Node, t: Node,
# minimum label spawned is th previous step. # minimum label spawned is th previous step.
try: try:
prio_queue.insert( prio_queue.insert(
item=minimum_node, item=node_min,
**keys(f_soc_factory(l_uns[minimum_node].peak_min())) **keys(f_soc_factory(l_uns[node_min].peak_min()))
) )
except KeyError: except KeyError:
# l_uns[v] empty # l_uns[v] empty
prio_queue.delete_min() prio_queue.delete_min()
# scan outgoing arcs # scan outgoing arcs
for n in G.neighbors(minimum_node): for n in G.neighbors(node_min):
# Create SoC Profile for getting from minimum_node to n # Create SoC Profile for getting from minimum_node to n
soc_profile = label_minimum_node.soc_profile_cs_v + \ soc_profile = label_node_min.soc_profile_cs_v + \
soc_profile_factory(minimum_node, n) soc_profile_factory(node_min, n)
if soc_profile(capacity) != -inf: if soc_profile(capacity) != -inf:
l_new = Label( l_new = Label(
t_trip=label_minimum_node.t_trip + distance(G, minimum_node, n), t_trip=label_node_min.t_trip + distance(G, node_min, n),
soc_last_cs=label_minimum_node.soc_last_cs, soc_last_cs=label_node_min.soc_last_cs,
last_cs=label_minimum_node.last_cs, last_cs=label_node_min.last_cs,
soc_profile_cs_v=soc_profile soc_profile_cs_v=soc_profile
) )
try: try:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment