我正试图解决一个优化问题,在这个优化问题中,两个发电厂必须满足负荷需求。这些发电厂有不同的发电方式。例如(随机数)
power_prod1 = [2,0,1]
power_prod2 = [0,1,1]
不同发电厂的负荷需求和成本是在类似的way.The成本中给出的,参见下面的plant1和plant2。
load_demand = [4,4,4]
Costs = {'power 1':60, 'power2':120}
为了解决这个问题,我试过了
def plant1_size(model,i,j):
return(0, None)
model.PowerPlant1Size = pyo.Var(model.plants,model.periods,bounds=plant1_size)
def plant2_size(model,i,j):
return(0, None)
model.PowerPlant2Size = pyo.Var(model.plants,model.periods,bounds=plant2_size)
def load_balance(model,i,j):
return (power_prod1[j]*model.PowerPlant1Size + power_prod2[j]*model.PowerPlant2Size == load_demand[j])
model.load_constraint = pyo.Constraint(model.plants,model.periods,rule=load_balance)
并且有一个目标函数,目标是通过为发电厂选择合适的规模来最小化成本。当我运行这段代码时,我会得到一个错误"TypeError:不受支持的操作数类型为*:‘IndexedVar’和'IndexedVar'“。我知道为什么会有这个错误,但我想不出解决发电厂规模的方法。(当我试图以另一种方式解决这个问题时,可能会有一些多余的代码,还有一些我没有包含的代码)。
我如何用pyomo能够解决的方式重写这个问题?
发布于 2022-11-21 14:44:27
这里有几件事很麻烦。我不确定你的基本数学问题是否正确。我会放慢实现的速度,用铅笔和纸列出所有变量和索引,以确保它是有意义的。例如,您将plant size
作为一个变量,该变量在一段时间内被索引.这是否意味着5号发电厂可以在不同的时间内变得越来越大?
在同一个变量上,您似乎正在将索引嵌入到名称中,即使您是按工厂编号进行索引。我希望看到某一种植物的产量作为一个变量,例如:
model.production = pyo.Var(model.plants, model.time_periods)
哦,您所看到的错误的主要来源是您使用了一个索引变量,而没有在您的目标中为PowerPlantSize
提供索引。
https://stackoverflow.com/questions/74518220
复制相似问题