【问题标题】:Restriction of power balance in PyomoPyomo 中的权力平衡限制
【发布时间】:2021-07-11 08:42:03
【问题描述】:

我正在 pyomo 中对电力系统进行建模以进行短期机组投入,但是在具有大量总线的系统中创建模型时,创建过程需要很长时间。 我已经验证了所实施的分支机构对权力平衡的限制是导致它的原因。有关实施此限制的任何建议。

非常感谢。

在以下限制中,旨在将通过分支的功率流计算为角度差乘以磁纳率,并且不得超过最大值。


def potijmax(model,l,t):
    if t == 0:
        return Constraint.Skip
    else:
        for n in model.N :
            for np in model.NP:
                if (l,n,np) in model.MAPL:
                    return (((model.D[n,t]model.D[np,t])*model.S[n,np]) )*BA <= (model.Plinemax[l])
model.Poijmax = Constraint(model.L, model.T, rule=potijmax, doc = 'Potencia maxima en la rama ij [MW]')

model.D是角度变量

model.S是电纳参数

BA 是基础力量

model.Nmodel.NP 是总线名称集

model.L 是一组行名

model.T是一组时间

model.MAPL 是一个集合,其中包含具有相应 from 和 to 总线的线路名称

【问题讨论】:

  • 在我看来这个问题更适合在Code Review Forum 中提出。 Code Review 是一个针对同行程序员代码审查的问答网站。在发布您的问题之前,请阅读有关如何在本网站上正确提问的相关指南。

标签: python-3.x pyomo


【解决方案1】:

如果构建速度与求解时间相比明显,则您的模型必须相当大。也就是说,正如您所怀疑的那样,您上面的构造效率很低。您正在使用嵌套的 for 循环在集合中查找 [l, n, np] 的组合。如果您已经构建了该子集,则不需要这样做。这假设您上面的代码是有意的,因为l 的每个实例只有一个组合。我假设这是因为您要返回找到的第一个。

因此,不要搜索model.MAPL 中的“魔法组合”,只需使用该集合作为构造的基础。像下面的例子应该可以正常工作。

#constructor example

import pyomo.environ as pyo

model = pyo.ConcreteModel()

###  SETS
model.N = pyo.Set(initialize=range(5))
model.NP = pyo.Set(initialize=range(5))
model.L = pyo.Set(initialize=list('ABCD'))
model.T = pyo.Set(initialize=range(5))
model.MAPL = pyo.Set(within=model.L*model.N*model.NP,
    initialize= [('B', 2, 3), ('C', 1, 4)])

###  VARS
model.X = pyo.Var(model.L, model.N, model.NP, domain=pyo.NonNegativeReals)

###  PARAMS
model.limit = pyo.Param(model.T, initialize=dict(zip(range(5), range(2,7))))  # just a dummy



### CONSTRAINTS
def C1(model, l, n, np, t):
    if t == 0:
        return pyo.Constraint.Skip
    else:
        return model.X[l, n, np] <= model.limit[t]
model.C1 = pyo.Constraint(model.MAPL, model.T, rule=C1)


model.C1.pprint()

产量:

C1 : Size=8, Index=C1_index, Active=True
    Key            : Lower : Body     : Upper : Active
    ('B', 2, 3, 1) :  -Inf : X[B,2,3] :   3.0 :   True
    ('B', 2, 3, 2) :  -Inf : X[B,2,3] :   4.0 :   True
    ('B', 2, 3, 3) :  -Inf : X[B,2,3] :   5.0 :   True
    ('B', 2, 3, 4) :  -Inf : X[B,2,3] :   6.0 :   True
    ('C', 1, 4, 1) :  -Inf : X[C,1,4] :   3.0 :   True
    ('C', 1, 4, 2) :  -Inf : X[C,1,4] :   4.0 :   True
    ('C', 1, 4, 3) :  -Inf : X[C,1,4] :   5.0 :   True
    ('C', 1, 4, 4) :  -Inf : X[C,1,4] :   6.0 :   True

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-02
    • 2013-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-01-27
    相关资源
    最近更新 更多