6
6
from functools import reduce
7
7
from statistics import mean
8
8
from typing import TYPE_CHECKING , Dict , Any
9
+ from nrel .hive .model .energy .energytype import EnergyType
9
10
10
11
if TYPE_CHECKING :
11
12
from nrel .hive .runner .runner_payload import RunnerPayload
@@ -29,6 +30,12 @@ class SummaryStats:
29
30
station_revenue : float = 0
30
31
fleet_revenue : float = 0
31
32
33
+ total_vkwh_expended : float = 0
34
+ total_vgge_expended : float = 0
35
+
36
+ total_skwh_dispensed : float = 0
37
+ total_sgge_dispensed : float = 0
38
+
32
39
def compile_stats (self , rp : RunnerPayload ) -> Dict [str , Any ]:
33
40
"""
34
41
computes all stats based on values accumulated throughout this run
@@ -76,11 +83,33 @@ def compile_stats(self, rp: RunnerPayload) -> Dict[str, Any]:
76
83
data = {"observed_percent" : observed_pct , "vkt" : vkt }
77
84
vehicle_state_output .update ({v : data })
78
85
86
+ total_vkwh_expended = 0.0
87
+ total_vgge_expended = 0.0
88
+ for vehicle in rp .s .get_vehicles ():
89
+ total_vkwh_expended += vehicle .energy_expended .get (EnergyType .ELECTRIC , 0.0 )
90
+ total_vgge_expended += vehicle .energy_expended .get (EnergyType .GASOLINE , 0.0 )
91
+
92
+ self .total_vkwh_expended = total_vkwh_expended
93
+ self .total_vgge_expended = total_vgge_expended
94
+
95
+ total_skwh_dispensed = 0.0
96
+ total_sgge_dispensed = 0.0
97
+ for station in rp .s .get_stations ():
98
+ total_skwh_dispensed += station .energy_dispensed .get (EnergyType .ELECTRIC , 0.0 )
99
+ total_sgge_dispensed += station .energy_dispensed .get (EnergyType .GASOLINE , 0.0 )
100
+
101
+ self .total_skwh_dispensed = total_skwh_dispensed
102
+ self .total_sgge_dispensed = total_sgge_dispensed
103
+
79
104
output = {
80
105
"mean_final_soc" : self .mean_final_soc ,
81
106
"requests_served_percent" : requests_served_percent ,
82
107
"vehicle_state" : vehicle_state_output ,
83
108
"total_vkt" : total_vkt ,
109
+ "total_kwh_expended" : total_vkwh_expended ,
110
+ "total_gge_expended" : total_vgge_expended ,
111
+ "total_kwh_dispensed" : total_skwh_dispensed ,
112
+ "total_gge_dispensed" : total_sgge_dispensed ,
84
113
"station_revenue_dollars" : self .station_revenue ,
85
114
"fleet_revenue_dollars" : self .fleet_revenue ,
86
115
"final_vehicle_count" : len (sim_state .vehicles ),
@@ -109,6 +138,18 @@ def log(self):
109
138
for s , v in self .vkt .items ():
110
139
table .add_row (f"Kilometers Traveled in State { s } " , f"{ round (v , 2 )} km" )
111
140
141
+ table .add_row ("Total kWh Expended By Vehicles" , f"{ round (self .total_vkwh_expended , 2 )} kWh" )
142
+ table .add_row (
143
+ "Total Gasoline Expended By Vehicles" , f"{ round (self .total_vgge_expended , 2 )} Gal"
144
+ )
145
+
146
+ table .add_row (
147
+ "Total kWh Dispensed By Stations" , f"{ round (self .total_skwh_dispensed , 2 )} kWh"
148
+ )
149
+ table .add_row (
150
+ "Total Gasoline Dispensed By Stations" , f"{ round (self .total_sgge_dispensed , 2 )} Gal"
151
+ )
152
+
112
153
table .add_row ("Station Revenue" , f"$ { round (self .station_revenue , 2 )} " )
113
154
table .add_row ("Fleet Revenue" , f"$ { round (self .fleet_revenue , 2 )} " )
114
155
0 commit comments