def test_compare_pwl_and_poly(net_3w_trafo_opf): net = net_3w_trafo_opf pp.create_pwl_cost(net, 0, 'ext_grid', [[0, 1, 1]]) pp.create_pwl_cost(net, 0, 'gen', [[0, 30, 3], [30, 80, 3]]) pp.create_pwl_cost(net, 1, 'gen', [[0, 100, 2]]) pp.runpm_ac_opf(net) consistency_checks(net) p_gen = net.res_gen.p_mw.values q_gen = net.res_gen.q_mvar.values vm_bus = net.res_bus.vm_pu.values va_bus = net.res_bus.va_degree.values net.pwl_cost.drop(net.pwl_cost.index, inplace=True) pp.create_poly_cost(net, 0, 'ext_grid', cp1_eur_per_mw=1) pp.create_poly_cost(net, 0, 'gen', cp1_eur_per_mw=3) pp.create_poly_cost(net, 1, 'gen', cp1_eur_per_mw=2) pp.runpm_ac_opf(net) consistency_checks(net) np.allclose(p_gen, net.res_gen.p_mw.values) np.allclose(q_gen, net.res_gen.q_mvar.values) np.allclose(vm_bus, net.res_bus.vm_pu.values) np.allclose(va_bus, net.res_bus.va_degree.values) pp.runpm_dc_opf(net) consistency_checks(net) np.allclose(p_gen, net.res_gen.p_mw.values) np.allclose(va_bus, net.res_bus.va_degree.values)
def test_compare_pwl_and_poly(net_3w_trafo_opf): net = net_3w_trafo_opf net.ext_grid.loc[:, "min_p_mw"] = -999. net.ext_grid.loc[:, "max_p_mw"] = 999. net.ext_grid.loc[:, "max_q_mvar"] = 999. net.ext_grid.loc[:, "min_q_mvar"] = -999. pp.create_pwl_cost(net, 0, 'ext_grid', [[0, 1, 1]]) pp.create_pwl_cost(net, 0, 'gen', [[0, 30, 3], [30, 80, 3]]) pp.create_pwl_cost(net, 1, 'gen', [[0, 80, 2]]) net.bus.loc[:, "max_vm_pu"] = 1.1 net.bus.loc[:, "min_vm_pu"] = .9 pp.runpm_ac_opf(net) consistency_checks(net) p_gen = net.res_gen.p_mw.values q_gen = net.res_gen.q_mvar.values vm_bus = net.res_bus.vm_pu.values va_bus = net.res_bus.va_degree.values net.pwl_cost.drop(net.pwl_cost.index, inplace=True) pp.create_poly_cost(net, 0, 'ext_grid', cp1_eur_per_mw=1) pp.create_poly_cost(net, 0, 'gen', cp1_eur_per_mw=3) pp.create_poly_cost(net, 1, 'gen', cp1_eur_per_mw=2) # pp.runopp(net) pp.runpm_ac_opf(net, correct_pm_network_data=False) consistency_checks(net) np.allclose(p_gen, net.res_gen.p_mw.values) np.allclose(q_gen, net.res_gen.q_mvar.values) np.allclose(vm_bus, net.res_bus.vm_pu.values) np.allclose(va_bus, net.res_bus.va_degree.values) # pp.rundcopp(net) pp.runpm_dc_opf(net, correct_pm_network_data=False) consistency_checks(net, test_q=False) np.allclose(p_gen, net.res_gen.p_mw.values) np.allclose(va_bus, net.res_bus.va_degree.values)
def test_without_ext_grid(): net = pp.create_empty_network() min_vm_pu = 0.95 max_vm_pu = 1.05 # create buses bus1 = pp.create_bus(net, vn_kv=220., geodata=(5, 9)) bus2 = pp.create_bus(net, vn_kv=110., geodata=(6, 10), min_vm_pu=min_vm_pu, max_vm_pu=max_vm_pu) bus3 = pp.create_bus(net, vn_kv=110., geodata=(10, 9), min_vm_pu=min_vm_pu, max_vm_pu=max_vm_pu) bus4 = pp.create_bus(net, vn_kv=110., geodata=(8, 8), min_vm_pu=min_vm_pu, max_vm_pu=max_vm_pu) bus5 = pp.create_bus(net, vn_kv=110., geodata=(6, 8), min_vm_pu=min_vm_pu, max_vm_pu=max_vm_pu) # create 220/110/110 kV 3W-transformer pp.create_transformer3w_from_parameters(net, bus1, bus2, bus5, vn_hv_kv=220, vn_mv_kv=110, vn_lv_kv=110, vk_hv_percent=10., vk_mv_percent=10., vk_lv_percent=10., vkr_hv_percent=0.5, vkr_mv_percent=0.5, vkr_lv_percent=0.5, pfe_kw=100, i0_percent=0.1, shift_mv_degree=0, shift_lv_degree=0, sn_hv_mva=100, sn_mv_mva=50, sn_lv_mva=50) # create 110 kV lines pp.create_line(net, bus2, bus3, length_km=70., std_type='149-AL1/24-ST1A 110.0') pp.create_line(net, bus3, bus4, length_km=50., std_type='149-AL1/24-ST1A 110.0') pp.create_line(net, bus4, bus2, length_km=40., std_type='149-AL1/24-ST1A 110.0') pp.create_line(net, bus4, bus5, length_km=30., std_type='149-AL1/24-ST1A 110.0') # create loads pp.create_load(net, bus2, p_mw=60, controllable=False) pp.create_load(net, bus3, p_mw=70, controllable=False) pp.create_load(net, bus4, p_mw=10, controllable=False) # create generators g1 = pp.create_gen(net, bus1, p_mw=40, min_p_mw=0, min_q_mvar=-20, max_q_mvar=20, slack=True, min_vm_pu=min_vm_pu, max_vm_pu=max_vm_pu) pp.create_poly_cost(net, g1, 'gen', cp1_eur_per_mw=1000) g2 = pp.create_gen(net, bus3, p_mw=40, min_p_mw=0, min_q_mvar=-20, max_q_mvar=20, vm_pu=1.01, min_vm_pu=min_vm_pu, max_vm_pu=max_vm_pu, max_p_mw=40.) pp.create_poly_cost(net, g2, 'gen', cp1_eur_per_mw=2000) g3 = pp.create_gen(net, bus4, p_mw=0.050, min_p_mw=0, min_q_mvar=-20, max_q_mvar=20, vm_pu=1.01, min_vm_pu=min_vm_pu, max_vm_pu=max_vm_pu, max_p_mw=0.05) pp.create_poly_cost(net, g3, 'gen', cp1_eur_per_mw=3000) pp.runpm_ac_opf(net) consistency_checks(net, rtol=1e-3) assert np.isclose(net.res_gen.p_mw.at[g2], 0, atol=1e-5, rtol=1e-5) assert np.isclose(net.res_gen.p_mw.at[g3], 0, atol=1e-5, rtol=1e-5) assert np.isclose(net.res_cost, net.res_gen.p_mw.at[g1] * 1e3) net.trafo3w["max_loading_percent"] = 150. pp.runpm_ac_opf(net) consistency_checks(net, rtol=1e-3) assert 149. < net.res_trafo3w.loading_percent.values[0] < 150.01 assert np.isclose( net.res_cost, net.res_gen.p_mw.at[g1] * 1e3 + net.res_gen.p_mw.at[g2] * 2e3) pp.runpm_dc_opf(net) consistency_checks(net, rtol=1e-3, test_q=False) assert 149. < net.res_trafo3w.loading_percent.values[0] < 150.01 assert np.isclose( net.res_cost, net.res_gen.p_mw.at[g1] * 1e3 + net.res_gen.p_mw.at[g2] * 2e3)