[英]TypeError: unsupported operand type(s) for &: 'float' and 'float'
[英]Pyomo: Best way to optimize size of power plants and TypeError: unsupported operand type(s) for *: 'float' and 'IndexedVar'
我正在嘗試解決一個優化問題,其中負載需求必須由兩個發電廠來滿足。 這些發電廠的發電量不同。 例如(隨機數)
power_prod1 = [2,0,1]
power_prod2 = [0,1,1]
不同電廠的負荷需求和成本以類似的方式給出。成本參考電廠的規模,參見下面的電廠 1 和電廠 2 的大小。
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)
並且有一個目標 function,其中目標是通過為發電廠選擇合適的規模來最小化成本。 當我運行此代碼時,出現錯誤“TypeError:* 不支持的操作數類型:‘float’和‘IndexedVar’”。 我知道為什么會出現此錯誤,但我想不出解決發電廠規模的方法。 (當我嘗試以另一種方式解決問題時可能會出現一些多余的代碼,而我還沒有包含一些代碼)。
我如何以 pyomo 可以解決的方式重寫這個問題?
這里有幾件事很麻煩。 我不確定您的基礎數學問題是否合理。 我會放慢實施速度,並用鉛筆和紙布置所有變量和索引,以確保它有意義。 例如,您將plant size
作為隨時間段索引的變量……這是否意味着 5 號發電廠可以在不同時間段內變大或變小?
在同一個變量上,您似乎將索引嵌入到名稱中,即使您是按植物編號進行索引也是如此。 我希望看到像特定工廠的生產這樣的變量:
model.production = pyo.Var(model.plants, model.time_periods)
哦,您看到的錯誤的主要來源是您使用的是索引變量,而沒有在您的目標中提供PowerPlantSize
的索引...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.