@@ -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+
79138class 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
168248if __name__ == '__main__' :
0 commit comments