Skip to content

Commit 97dbbdf

Browse files
committed
Move GET result dataframe method to optimisation
1 parent 0edf694 commit 97dbbdf

File tree

2 files changed

+84
-58
lines changed

2 files changed

+84
-58
lines changed

D3HRE/optimization.py

Lines changed: 83 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,65 @@ def temporal_optimization(start_time, route, speed, solar_area, wind_area, use,
7676
return LPSP
7777

7878

79+
def get_result_df(start_time, route, speed, solar_area, wind_area, use, battery_capacity, depth_of_discharge=1,
80+
discharge_rate=0.005, battery_eff=0.9, discharge_eff=0.8,title=0, azim=0, tracking=0,
81+
power_coefficient=0.26, cut_in_speed=2, cut_off_speed=15, technology='csi', system_loss=0.10,
82+
angles=None, dataFrame=False):
83+
"""
84+
Simulation based optimization for
85+
86+
:param start_time: str or Dataindex start date of journey
87+
:param route: numpy nd array (n,2) [lat, lon] of way points
88+
:param speed: float or list if float is given, it is assumed as constant speed operation mode
89+
otherwise, a list of n with averaged speed should be given
90+
:param wind_area: float area of wind turbine area
91+
:param solar_area: float m^2 area of solar panel area
92+
:param use: float m^2 load demand of the system
93+
:param battery_capacity: float Wh total battery capacity of the renewable energy system
94+
:param title: float degrees title angle of PV panel
95+
:param azim: float degrees azim angle of PV panel
96+
:param tracking: int 0 1 or 2 0 for no tracking, 1 for one axis, 2 for two axis
97+
:param power_coefficient: float power coefficient of wind turbine
98+
:param cut_in_speed: float m/s cut in speed of wind turbine
99+
:param cut_off_speed: float m/s cut off speed of wind turbine
100+
:param technology: optional str 'csi'
101+
:param system_loss: float system lost of the system
102+
:param angles: optional solar angle
103+
:param dataFrame: optional return dataframe or not
104+
:param trace_back: optional in True give all trace back
105+
:return: float lost power supply probability (LPSP)
106+
if trace_back option is on then gives LPSP, SOC, energy history, unmet energy history, water history
107+
"""
108+
# Pack route to immutable object for caching
109+
route = tuple(route.flatten())
110+
solar_power_unit, wind_power_unit = simulation.power_unit_area(start_time, route, speed,
111+
title=title, azim=azim, tracking=tracking, power_coefficient=power_coefficient,
112+
cut_in_speed=cut_in_speed, cut_off_speed=cut_off_speed,
113+
technology=technology, system_loss=system_loss, angles=angles, dataFrame=dataFrame
114+
)
115+
solar_power = solar_power_unit * solar_area
116+
wind_power = wind_power_unit * wind_area
117+
power = solar_power + wind_power
118+
SOC, energy_history, unmet_history, waste_history, use_history = \
119+
simulation.soc_model_fixed_load(power, use, battery_capacity, depth_of_discharge,
120+
discharge_rate, battery_eff, discharge_eff)
121+
122+
all_history = np.vstack((
123+
np.array(power.tolist()),
124+
np.array(waste_history),
125+
np.array(energy_history),
126+
np.array(use_history),
127+
np.array(unmet_history),
128+
np.array(solar_power),
129+
np.array(wind_power)
130+
))
131+
sim_df = pd.DataFrame(all_history.T, index=power.index,
132+
columns=['Power','Waste', 'Battery', 'Use', 'Unmet','Solar_power','Wind_power'])
133+
return sim_df
134+
135+
136+
137+
79138
class Single_mixed_objective_optimization_function:
80139
def __init__(self, route, start_time, speed, demand,
81140
ship, weight=[210, 320, 1, 10000], **kwargs):
@@ -110,6 +169,8 @@ def __init__(self, route, start_time, speed, demand, ship=None):
110169
self.speed = speed
111170
self.demand = demand
112171
self.ship = ship
172+
self.champion = 0
173+
self.df = pd.DataFrame()
113174

114175

115176
def run(self, pop_size=100, gen=100, **kwargs):
@@ -129,6 +190,7 @@ def run(self, pop_size=100, gen=100, **kwargs):
129190
algo = pg.algorithm(pg.pso(gen=gen))
130191
pop = pg.population(prob, pop_size)
131192
pop = algo.evolve(pop)
193+
self.champion = pop.champion_x
132194
return pop.champion_f, pop.champion_x
133195

134196
def convergence(self, pop_size=100, gen=100, **kwargs):
@@ -154,15 +216,33 @@ def convergence(self, pop_size=100, gen=100, **kwargs):
154216
log = algo.extract(type(uda)).get_log()
155217
return log, pop
156218

157-
def preview(self, **kwargs):
219+
def resource_df(self, **kwargs):
158220
"""
159221
Preview of the optimisation. Return
160222
161223
:return:
162224
"""
163225
route = tuple(self.route.flatten())
164-
solar_power_unit, wind_power_unit = simulation.power_unit_area(self.start_time, route, self.speed, **kwargs)
165-
return solar_power_unit, wind_power_unit
226+
return simulation.power_unit_area(self.start_time, route, self.speed, **kwargs)
227+
228+
def power_df(self):
229+
"""
230+
Show result from pandas time series.
231+
232+
:return:
233+
"""
234+
area_solar, area_wind, battery_capacity = self.champion
235+
return get_result_df(self.start_time,self.route, self.speed,area_solar,area_wind,self.demand,battery_capacity)
236+
237+
def combined_df(self):
238+
"""
239+
Get a combined dataframe including power and resource.
240+
241+
:return:
242+
"""
243+
power = self.power_df(self)
244+
resource = self.resource_df(self)
245+
pass
166246

167247

168248
if __name__ == '__main__':

D3HRE/simulation.py

Lines changed: 1 addition & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
from gsee.gsee import brl_model, pv
77
from D3HRE.core.dataframe_utility import full_day_cut
8-
from D3HRE.core.battery_models import min_max_model, soc_model_fixed_load
8+
from D3HRE.core.battery_models import min_max_model
99
from D3HRE.core.weather_data_download import resource_df_download_and_process
1010
from D3HRE.core.wind_turbine_model import power_from_turbine, resistance_power
1111
from D3HRE.core.mission_utility import Mission
@@ -121,61 +121,7 @@ def power_unit_area(start_time, route, speed, power_per_square=140,
121121
wind_power = sim.wind_power
122122
return solar_power, wind_power
123123

124-
def temporal_sim(start_time, route, speed, solar_area, wind_area, use, battery_capacity, depth_of_discharge=1,
125-
discharge_rate=0.005, battery_eff=0.9, discharge_eff=0.8,title=0, azim=0, tracking=0,
126-
power_coefficient=0.26, cut_in_speed=2, cut_off_speed=15, technology='csi', system_loss=0.10,
127-
angles=None, dataFrame=False):
128-
"""
129-
Simulation based optimization for
130124

131-
:param start_time: str or Dataindex start date of journey
132-
:param route: numpy nd array (n,2) [lat, lon] of way points
133-
:param speed: float or list if float is given, it is assumed as constant speed operation mode
134-
otherwise, a list of n with averaged speed should be given
135-
:param wind_area: float area of wind turbine area
136-
:param solar_area: float m^2 area of solar panel area
137-
:param use: float m^2 load demand of the system
138-
:param battery_capacity: float Wh total battery capacity of the renewable energy system
139-
:param title: float degrees title angle of PV panel
140-
:param azim: float degrees azim angle of PV panel
141-
:param tracking: int 0 1 or 2 0 for no tracking, 1 for one axis, 2 for two axis
142-
:param power_coefficient: float power coefficient of wind turbine
143-
:param cut_in_speed: float m/s cut in speed of wind turbine
144-
:param cut_off_speed: float m/s cut off speed of wind turbine
145-
:param technology: optional str 'csi'
146-
:param system_loss: float system lost of the system
147-
:param angles: optional solar angle
148-
:param dataFrame: optional return dataframe or not
149-
:param trace_back: optional in True give all trace back
150-
:return: float lost power supply probability (LPSP)
151-
if trace_back option is on then gives LPSP, SOC, energy history, unmet energy history, water history
152-
"""
153-
# Pack route to immutable object for caching
154-
route = tuple(route.flatten())
155-
solar_power_unit, wind_power_unit = power_unit_area(start_time, route, speed,
156-
title=title, azim=azim, tracking=tracking, power_coefficient=power_coefficient,
157-
cut_in_speed=cut_in_speed, cut_off_speed=cut_off_speed,
158-
technology=technology, system_loss=system_loss, angles=angles, dataFrame=dataFrame
159-
)
160-
solar_power = solar_power_unit * solar_area
161-
wind_power = wind_power_unit * wind_area
162-
power = solar_power + wind_power
163-
SOC, energy_history, unmet_history, waste_history, use_history =\
164-
soc_model_fixed_load(power, use, battery_capacity, depth_of_discharge,
165-
discharge_rate, battery_eff, discharge_eff)
166-
167-
all_history = np.vstack((
168-
np.array(power.tolist()),
169-
np.array(waste_history),
170-
np.array(energy_history),
171-
np.array(use_history),
172-
np.array(unmet_history),
173-
np.array(solar_power),
174-
np.array(wind_power)
175-
))
176-
sim_df = pd.DataFrame(all_history.T, index=power.index,
177-
columns=['Power','Waste', 'Battery', 'Use', 'Unmet','Solar_power','Wind_power'])
178-
return sim_df
179125

180126

181127

0 commit comments

Comments
 (0)