簡體   English   中英

Pyomo:優化發電廠規模的最佳方法和 TypeError:* 不支持的操作數類型:'float' 和 'IndexedVar'

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM