import pandas as pd def build_model_plant(shop): starttime = pd.Timestamp('2018-02-27') endtime = pd.Timestamp('2018-02-28') shop.set_time_resolution(starttime=starttime, endtime=endtime, timeunit='hour') 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]) p1g1 = shop.model.generator.add_object('Plant1_G1') plant1.connect_to(p1g1) p1g1.penstock.set(1) p1g1.p_min.set(30) p1g1.p_max.set(100) p1g1.p_nom.set(100) p1g1.startcost.set(0) p1g1.stopcost.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)]) p1p1 = shop.model.pump.add_object('Plant1_P1') plant1.connect_to(p1p1) p1p1.penstock.set(1) p1p1.p_min.set(10) p1p1.p_max.set(100) p1p1.p_nom.set(100) p1p1.startcost.set(0) p1p1.stopcost.set(0) p1p1.gen_eff_curve.set(pd.Series([95, 98], index=[0, 100])) p1p1.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]) p2g1 = shop.model.generator.add_object('Plant2_G1') plant2.connect_to(p2g1) p2g1.penstock.set(1) p2g1.p_min.set(15) p2g1.p_max.set(50) p2g1.p_nom.set(30) p2g1.startcost.set(0) p2g1.stopcost.set(0) p2g1.gen_eff_curve.set(pd.Series([95, 98], index=[0, 50])) 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)]) p2g2 = shop.model.generator.add_object('Plant2_G2') plant2.connect_to(p2g2) p2g2.penstock.set(1) p2g2.p_min.set(10) p2g2.p_max.set(50) p2g2.p_nom.set(30) p2g2.startcost.set(0) p2g2.stopcost.set(0) p2g2.gen_eff_curve.set(pd.Series([95, 98], index=[0, 50])) p2g2.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(30) rsv2.energy_value_input.set(10) shop.model.market.add_object('Day_ahead') da = shop.model.market.Day_ahead da.sale_price.set(pd.DataFrame([5,41,50,35,15,14,7,8,36,60,20,43,21,17,45,16,38,50,15,63, 14, 13, 56, 12],index=[starttime + pd.Timedelta(hours=i) for i in range(0,24)])) da.buy_price.set(da.sale_price.get()+0.002) da.max_buy.set(9999) da.max_sale.set(9999) rsv1.inflow.set(pd.DataFrame([101, 50], index=[starttime, starttime + pd.Timedelta(hours=1)])) cg1 = shop.model.commit_group.add_object("cg1") cg2 = shop.model.commit_group.add_object("cg2") cg1.connect_to(p1p1) cg2.connect_to(p1g1) #Exclude pump in cg1 from running when generator in cg2 is on cg1.connect_to(cg2) def run_model_plant(shop): shop.start_sim([],['3']) shop.set_code(['inc'],[]) shop.start_sim([],['3'])