Bug report checklis
Reproducible Example
import pandapower as pp
def poly_costs(cp1_eur_per_mw: float, cp2_eur_per_mw2: float, load: bool, p_mw: float) -> None:
element_name = 'load' if load else 'sgen'
net = pp.create_empty_network()
b1 = pp.create_bus(net, vn_kv=20.)
b2 = pp.create_bus(net, vn_kv=20.)
pp.create_line(net, from_bus=b1, to_bus=b2, length_km=2.5, std_type="NAYY 4x50 SE")
pp.create_ext_grid(net, bus=b1)
kwargs = dict(net=net, bus=b2, p_mw=p_mw, min_p_mw=p_mw, max_p_mw=p_mw, min_q_mvar=0., max_q_mvar=0., controllable=True)
if load:
flex = pp.create_load(**kwargs)
else:
flex = pp.create_sgen(**kwargs)
pp.create_poly_cost(net, element=flex, et=element_name, cp1_eur_per_mw=cp1_eur_per_mw, cp2_eur_per_mw2=cp2_eur_per_mw2)
pp.runopp(net)
print(f"Element: {element_name}")
print(f"Cost coefficients: (Linear: {net.poly_cost['cp1_eur_per_mw'].values[0]}, Quadratic: {net.poly_cost['cp2_eur_per_mw2'].values[0]})")
print(f"Power: {(net.res_load if load else net.res_sgen)['p_mw'].values[0]:.1f} MW")
print(f"Costs: {net.res_cost:.1f} Eur\n")
if __name__ == "__main__":
poly_costs(load=True, p_mw=1., cp1_eur_per_mw=1, cp2_eur_per_mw2=0)
poly_costs(load=True, p_mw=1., cp1_eur_per_mw=0, cp2_eur_per_mw2=1)
poly_costs(load=True, p_mw=1., cp1_eur_per_mw=-1, cp2_eur_per_mw2=0)
poly_costs(load=True, p_mw=1., cp1_eur_per_mw=0, cp2_eur_per_mw2=-1)
poly_costs(load=True, p_mw=-1., cp1_eur_per_mw=1, cp2_eur_per_mw2=0)
poly_costs(load=True, p_mw=-1., cp1_eur_per_mw=0, cp2_eur_per_mw2=1)
poly_costs(load=True, p_mw=-1., cp1_eur_per_mw=-1, cp2_eur_per_mw2=0)
poly_costs(load=True, p_mw=-1., cp1_eur_per_mw=0, cp2_eur_per_mw2=-1)
poly_costs(load=False, p_mw=1., cp1_eur_per_mw=1, cp2_eur_per_mw2=0)
poly_costs(load=False, p_mw=1., cp1_eur_per_mw=0, cp2_eur_per_mw2=1)
poly_costs(load=False, p_mw=1., cp1_eur_per_mw=-1, cp2_eur_per_mw2=0)
poly_costs(load=False, p_mw=1., cp1_eur_per_mw=0, cp2_eur_per_mw2=-1)
poly_costs(load=False, p_mw=-1., cp1_eur_per_mw=1, cp2_eur_per_mw2=0)
poly_costs(load=False, p_mw=-1., cp1_eur_per_mw=0, cp2_eur_per_mw2=1)
poly_costs(load=False, p_mw=-1., cp1_eur_per_mw=-1, cp2_eur_per_mw2=0)
poly_costs(load=False, p_mw=-1., cp1_eur_per_mw=0, cp2_eur_per_mw2=-1)
Element: load
Cost coefficients: (Linear: 1.0, Quadratic: 0.0)
Power: 1.0 MW
Costs: 1.0 Eur
Element: load
Cost coefficients: (Linear: 0.0, Quadratic: 1.0)
Power: 1.0 MW
Costs: -1.0 Eur
Element: load
Cost coefficients: (Linear: -1.0, Quadratic: 0.0)
Power: 1.0 MW
Costs: -1.0 Eur
Element: load
Cost coefficients: (Linear: 0.0, Quadratic: -1.0)
Power: 1.0 MW
Costs: 1.0 Eur
Element: load
Cost coefficients: (Linear: 1.0, Quadratic: 0.0)
Power: -1.0 MW
Costs: -1.0 Eur
Element: load
Cost coefficients: (Linear: 0.0, Quadratic: 1.0)
Power: -1.0 MW
Costs: -1.0 Eur
Element: load
Cost coefficients: (Linear: -1.0, Quadratic: 0.0)
Power: -1.0 MW
Costs: 1.0 Eur
Element: load
Cost coefficients: (Linear: 0.0, Quadratic: -1.0)
Power: -1.0 MW
Costs: 1.0 Eur
Element: sgen
Cost coefficients: (Linear: 1.0, Quadratic: 0.0)
Power: 1.0 MW
Costs: 1.0 Eur
Element: sgen
Cost coefficients: (Linear: 0.0, Quadratic: 1.0)
Power: 1.0 MW
Costs: 1.0 Eur
Element: sgen
Cost coefficients: (Linear: -1.0, Quadratic: 0.0)
Power: 1.0 MW
Costs: -1.0 Eur
Element: sgen
Cost coefficients: (Linear: 0.0, Quadratic: -1.0)
Power: 1.0 MW
Costs: -1.0 Eur
Element: sgen
Cost coefficients: (Linear: 1.0, Quadratic: 0.0)
Power: -1.0 MW
Costs: -1.0 Eur
Element: sgen
Cost coefficients: (Linear: 0.0, Quadratic: 1.0)
Power: -1.0 MW
Costs: 1.0 Eur
Element: sgen
Cost coefficients: (Linear: -1.0, Quadratic: 0.0)
Power: -1.0 MW
Costs: 1.0 Eur
Element: sgen
Cost coefficients: (Linear: 0.0, Quadratic: -1.0)
Power: -1.0 MW
Costs: -1.0 Eur
Issue Description and Traceback
The parameter cp2_eur_per_mw2 of create_poly_cost seems to have a different sign convention than the parameter cp1_eur_per_mw seems for load.
| Element |
Power (MW) |
cp1_eur_per_mw |
cp2_eur_per_mw2 |
Cost (Eur) |
| Load |
1 |
0 |
1 |
-1 |
| Load |
1 |
0 |
-1 |
1 |
| Load |
-1 |
0 |
1 |
-1 |
| Load |
-1 |
0 |
-1 |
1 |
For sgen they are correct.
| Element |
Power (MW) |
cp1_eur_per_mw |
cp2_eur_per_mw2 |
Cost (Eur) |
| SGen |
1 |
0 |
1 |
1 |
| SGen |
1 |
0 |
-1 |
-1 |
| SGen |
-1 |
0 |
1 |
1 |
| SGen |
-1 |
0 |
-1 |
-1 |
The parameter cp1_eur_per_mw works as expected.
| Element |
Power (MW) |
cp1_eur_per_mw |
cp2_eur_per_mw2 |
Cost (Eur) |
| Load |
1 |
1 |
0 |
1 |
| Load |
1 |
-1 |
0 |
-1 |
| Load |
-1 |
1 |
0 |
-1 |
| Load |
-1 |
-1 |
0 |
1 |
| SGen |
1 |
1 |
0 |
1 |
| SGen |
1 |
-1 |
0 |
-1 |
| SGen |
-1 |
1 |
0 |
-1 |
| SGen |
-1 |
-1 |
0 |
1 |
Expected Behavior
| Element |
Power (MW) |
cp1_eur_per_mw |
cp2_eur_per_mw2 |
Cost (Eur) |
| Load |
1 |
0 |
1 |
1 |
| Load |
1 |
0 |
-1 |
-1 |
| Load |
-1 |
0 |
1 |
1 |
| Load |
-1 |
0 |
-1 |
-1 |
Installed Versions
- python version: 3.13
- pandapower: 3.4.0
- pandas version: 2.3.3
- Operating System name/version: Debian
Label
Bug report checklis
Searched the issues page for similar reports
Read the relevant sections of the documentation
Browse the tutorials and tests for usefull code snippets and examples of use
Reproduced the issue after updating with
pip install --upgrade pandapower(orgit pull)Tried basic troubleshooting (if a bug/error) like restarting the interpreter and checking the pythonpath
Reproducible Example
Issue Description and Traceback
The parameter
cp2_eur_per_mw2ofcreate_poly_costseems to have a different sign convention than the parametercp1_eur_per_mwseems forload.For
sgenthey are correct.The parameter
cp1_eur_per_mwworks as expected.Expected Behavior
Installed Versions
Label