0

有谁知道如何解决pandapower的OPF AC中在尝试组合停用的可控发电机和服务的非可控发电机时产生的错误?

最小的例子:

import pandapower as pp
net = pp.create_empty_network()
bus = pp.create_bus(net, vn_kv=110., name="Bus 2")
pp.create_ext_grid(net, bus=bus, vm_pu=1.00, name="Grid Connection")
pp.create_gen(net, bus=bus, p_mw=5, min_p_mw = 5, max_p_mw = 20, name='gen 1')
pp.create_gen(net, bus=bus, p_mw=5, min_p_mw = 5, max_p_mw = 20, name='gen 3')

net.gen[['in_service', 'controllable']] = [[False, True],
                                           [True, False]]

pp.runopp(net,verbose = True)

输出:

---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-37-47fe18b0aa9e> in <module>
      9                                            [True, False]]
     10 
---> 11 pp.runopp(net,verbose = True)

C:\Users\Daniel Rueda\.conda\envs\Tesis\lib\site-packages\pandapower\run.py in runopp(net, verbose, calculate_voltage_angles, check_connectivity, suppress_warnings, switch_rx_ratio, delta, init, numba, trafo3w_losses, consider_line_temperature, **kwargs)
    355     _check_bus_index_and_print_warning_if_high(net)
    356     _check_gen_index_and_print_warning_if_high(net)
--> 357     _optimal_powerflow(net, verbose, suppress_warnings, **kwargs)
    358 
    359 

C:\Users\Daniel Rueda\.conda\envs\Tesis\lib\site-packages\pandapower\optimal_powerflow.py in _optimal_powerflow(net, verbose, suppress_warnings, **kwargs)
     39     init_results(net, "opf")
     40 
---> 41     ppc, ppci = _pd2ppc(net)
     42 
     43     if not ac:

C:\Users\Daniel Rueda\.conda\envs\Tesis\lib\site-packages\pandapower\pd2ppc.py in _pd2ppc(net, sequence)
    113         aux._set_isolated_buses_out_of_service(net, ppc)
    114 
--> 115     _build_gen_ppc(net, ppc)
    116 
    117     if "pf" in mode:

C:\Users\Daniel Rueda\.conda\envs\Tesis\lib\site-packages\pandapower\build_gen.py in _build_gen_ppc(net, ppc)
     51     _init_ppc_gen(net, ppc, f)
     52     for element, (f, t) in gen_order.items():
---> 53         add_element_to_gen(net, ppc, element, f, t)
     54     net._gen_order = gen_order
     55 

C:\Users\Daniel Rueda\.conda\envs\Tesis\lib\site-packages\pandapower\build_gen.py in add_element_to_gen(net, ppc, element, f, t)
     80         _build_pp_ext_grid(net, ppc, f, t)
     81     elif element == "gen":
---> 82         _build_pp_gen(net, ppc, f, t)
     83     elif element == "sgen_controllable":
     84         _build_pp_pq_element(net, ppc, "sgen", f, t)

C:\Users\Daniel Rueda\.conda\envs\Tesis\lib\site-packages\pandapower\build_gen.py in _build_pp_gen(net, ppc, f, t)
    220         ppc = _check_gen_vm_limits(net, ppc, gen_buses, gen_is)
    221         if "controllable" in net.gen.columns:
--> 222             ppc = _enforce_controllable_vm_pu_p_mw(net, ppc, gen_is, f, t)
    223 
    224 

C:\Users\Daniel Rueda\.conda\envs\Tesis\lib\site-packages\pandapower\build_gen.py in _enforce_controllable_vm_pu_p_mw(net, ppc, gen_is, f, t)
    184     # if there are some non controllable gens -> set vm_pu and p_mw fixed
    185     if np.any(not_controllable):
--> 186         bus = net["gen"]["bus"].values[not_controllable]
    187         vm_pu = net["gen"]["vm_pu"].values[not_controllable]
    188         p_mw = net["gen"]["p_mw"].values[not_controllable]

IndexError: boolean index did not match indexed array along dimension 0; dimension is 2 but corresponding boolean dimension is 1

我正在分析错误,并且能够识别:

  • 首先,创建一个布尔 <class 'numpy.ndarray'> 并带有生成器的开或关状态。

[False, True]

  • 然后,如果它们是可控的,则使用生成器的特性创建一个布尔 <class 'numpy.ndarray'>,这取决于先前创建的数组(仅服务中的生成器)。

[False]

  • 现在对于这个数组,每个元素的布尔逻辑被反转以获得一个具有发电机特性的数组,如果它们是不可控的,基于先前创建的数组(只有在服务的发电机)

[True]

  • 最后,一个 <class 'numpy.ndarray'> 使用可控发电机连接到的总线的索引创建,但这是产生错误的地方,因为数组包含停止服务的发电机的 pandas 系列的维度而用于过滤可控特性的数组已经考虑了仅使用中的发电机
4

0 回答 0