首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带指数问题的Pyomo优化问题

带指数问题的Pyomo优化问题
EN

Stack Overflow用户
提问于 2022-01-25 07:59:32
回答 1查看 75关注 0票数 0

我试图优化发电和尽量减少成本的python与pyomo包。我从Matpower获取参数,现在我正在尝试case5。

所以通常,我会说:

代码语言:javascript
复制
m.Gen=Var(m.N, domain = NonNegativeReals) 
m.Pg=Var(m.N, domain = Reals)
m.N  = Set(initialize=[i for i in range(bus_number)])

def obj_rule(m):
    cost =  sum(Cg[n]*m.Gen[n] for n in m.N )
    return    cost 
m.obj = Objective(rule = obj_rule, sense=minimize)

def loadbal_rule(m, n):
    return Sb*  m.pg[n] == -m.gen[n] + Pd[n] 
m.loadbal_rule = Constraint(m.N, rule = loadbal_rule)

这里,n是系统中的节点。负载平衡确保有足够的能量传递给每个节点.Pdn是节点n的功率需求,n是节点的总个数。Sb是基功率,pgn是节点n中注入的功率(可以来自连接到它的任何其他节点),我对从一个节点到另一个节点的功率流也有限制,但我没有在这里显示它们(这就是为什么我不能将sum( n在M.N中)) ==和(在M.N中为n)

现在到我的问题:在案例5,有5个节点,两个生成器在节点1,但没有生成器在节点2。因此,我认为我需要一个发电机的索引,g在m.G?

但是,我不知道如何制定目标函数和负载平衡。应该是m.geng,n

这就是我试过的:

代码语言:javascript
复制
def obj_rule(m):
    cost =  sum(Cg[g]*(m.gen[g,n]) for g in m.G for n in m.N) 
    return    cost  
m.obj = Objective(rule = obj_rule, sense=minimize)

def loadbal_rule(m, n,g):
    return Sb*  m.pg[n] == sum(m.gen[n,g] for g in m.G) - Pd_matrix[n] # ??  
m.loadbal_rule = Constraint(m.N, m.G, rule = loadbal_rule)
EN

回答 1

Stack Overflow用户

发布于 2022-01-26 14:38:22

好的,如果你不能把节点1上的两个生成器分组在一起(正如我在评论中建议的那样),我认为你有两个选择.

您可以对节点x生成器n,g的决策变量进行双索引,就像您试图做的那样。如果这样做,就可以使用从数据生成的合法组合n,g的稀疏集合初始化变量。然后,在负载平衡中,您需要为每个节点,而不是像现在所做的那样,为每个节点-gen组合制定这一方法。你仍然可以在节点上保持平衡,所以在发电机内部.类似于:

代码语言:javascript
复制
def node_load_bal(m, n):
    return m.pg[n] == sum(m.gen[n, g] for g in m.G) - m.pd[n]
m.load_bal = Constraint(m.N, rule=node_load_bal)

另一个选项可能更聪明、更简单,因为它避免了双重索引,那就是引入一个假的(或合成的)节点来容纳额外的生成器。将其称为节点"1B“或其他什么,并将其从逻辑上连接到(不需要,适当地连接到节点1,等等)到“真正的”节点1,然后运行N+1节点上已经拥有的所有内容。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70845175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档