import pandas as pd def build_model(shop): starttime = pd.Timestamp('2018-02-27') endtime = pd.Timestamp('2018-02-28') shop.set_time_resolution(starttime=starttime, endtime=endtime, timeunit="hour") # Add topology rsv1 = shop.model.reservoir.add_object('Reservoir1') rsv1.max_vol.set(12) rsv1.lrl.set(90) rsv1.hrl.set(100) rsv1.vol_head.set(pd.Series([90, 100, 101], index=[0, 12, 14], name=0)) rsv1.flow_descr.set(pd.Series([0, 1000], index=[100, 101], name=0)) plant1 = shop.model.plant.add_object('Plant1') plant1.outlet_line.set(40) plant1.main_loss.set([0.0002]) plant1.penstock_loss.set([0.0001]) plant1.mip_flag.set(1) p1g1 = shop.model.generator.add_object('Plant1_G1') plant1.connect_to(p1g1) p1g1.penstock.set(1) p1g1.p_min.set(15) p1g1.p_max.set(100) p1g1.p_nom.set(100) p1g1.startcost.set(0) p1g1.gen_eff_curve.set(pd.Series([95, 98], index=[0, 100])) p1g1.turb_eff_curves.set([pd.Series([70, 80, 95, 90], index=[10, 25, 90, 100], name=90), pd.Series([72, 82, 98, 92], index=[10, 25, 90, 100], name=100)]) rsv2 = shop.model.reservoir.add_object('Reservoir2') rsv2.max_vol.set(5) rsv2.lrl.set(40) rsv2.hrl.set(50) rsv2.vol_head.set(pd.Series([40, 50, 51], index=[0, 5, 6])) rsv2.flow_descr.set(pd.Series([0, 1000], index=[50, 51])) plant2 = shop.model.plant.add_object('Plant2') plant2.outlet_line.set(0) plant2.main_loss.set([0.0002]) plant2.penstock_loss.set([0.0001]) plant2.mip_flag.set(1) p2g1 = shop.model.generator.add_object('Plant2_G1') plant2.connect_to(p2g1) p2g1.penstock.set(1) p2g1.p_min.set(20) p2g1.p_max.set(100) p2g1.p_nom.set(100) p2g1.startcost.set(0) p2g1.gen_eff_curve.set(pd.Series([95, 98], index=[0, 100])) p2g1.turb_eff_curves.set([pd.Series([70, 80, 95, 90], index=[10, 25, 90, 100], name=90), pd.Series([72, 82, 98, 92], index=[10, 25, 90, 100], name=100)]) # Connect objects rsv1.connect_to(plant1) plant1.connect_to(rsv2) rsv2.connect_to(plant2) rsv1.energy_value_input.set(39.7) rsv2.energy_value_input.set(38.6) starttime = shop.get_time_resolution()['starttime'] rsv1.inflow.set(pd.DataFrame([101, 50], index=[starttime, starttime + pd.Timedelta(hours=1)])) rsv2.inflow.set(pd.DataFrame([101, 50], index=[starttime, starttime + pd.Timedelta(hours=1)])) busbar = shop.model.busbar.add_object('Busbar') busbar.load.set(1.0) da = shop.model.market.add_object('Day_ahead') da.sale_price.set(pd.DataFrame([42.682,74.822,77.732,62.332,55.892,46.962,42.582,40.942,39.212,39.142,41.672,46.922,37.102,32.992,31.272,29.752,38.782,43.082,39.242,38.622,29.732,25.392], index=[starttime + pd.Timedelta(hours=i) for i in range(0,22)])) da.max_sale.set(pd.Series([9999], [starttime])) da.buy_price.set(da.sale_price.get()+0.002) da.max_buy.set(pd.Series([9999], [starttime])) da.connect_to(busbar) shop.set_reserve_penalty_cost([],['1000000']) return shop def run_model(shop): shop.start_sim([],['3']) shop.set_code(['inc'],[]) shop.start_sim([],['3'])