我试图优化发电和尽量减少成本的python与pyomo包。我从Matpower获取参数,现在我正在尝试case5。
所以通常,我会说:
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
这就是我试过的:
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)发布于 2022-01-26 14:38:22
好的,如果你不能把节点1上的两个生成器分组在一起(正如我在评论中建议的那样),我认为你有两个选择.
您可以对节点x生成器n,g的决策变量进行双索引,就像您试图做的那样。如果这样做,就可以使用从数据生成的合法组合n,g的稀疏集合初始化变量。然后,在负载平衡中,您需要为每个节点,而不是像现在所做的那样,为每个节点-gen组合制定这一方法。你仍然可以在节点上保持平衡,所以在发电机内部.类似于:
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节点上已经拥有的所有内容。
https://stackoverflow.com/questions/70845175
复制相似问题