我想在 Pyomo 中自動創建一個 VarList。
該模型應該有兩個(或最后更多)集合:一個在時間 t 上(例如 8760),另一個在不同的組件 k 上(例如 3)。理想情況下,每個分量 k 應該得到一個包含 t 個元素的時間序列。
不幸的是,這不起作用,但我還是寫它是為了更好地理解,并希望有人更好地理解我背后的想法:
import numpy as np
from pyomo.environ import *
mdl = ConcreteModel()
mdl.t = Set(initialize=np.arange(0,8760))
mdl.k = Set(initialize=np.arange(0,3))
# VarList
## generate variable x for each component k
mdl.x = VarList()
for k in mdl.k:
mdl.x.add()
## generate for each component k a variable for each time t
for k in mdl.k:
mdl.x[k]=VarList()
for t in mdl.t:
mdl.x[k].add()
有沒有辦法管理這種變數生成?還是類似的?
最好的問候!馬蒂亞斯
uj5u.com熱心網友回復:
歡迎來到本站。
我認為您真正想要的是一個按時間和 雙重索引的變數k,對嗎?
正確的做法是在創建變數時提供兩個索引集,如下所示。這將允許您對約束和 OBJ 中的任一變數等進行求和。
numpy其他建議:制作這些模型時要避免。不必要的,并且在大多數情況下會增加混亂。
pyomo如果您使用標簽查看我的個人資料答案,我已經發布了一堆示例問題pyomo,您可能會發現一些其他有用的示例。
import pyomo.environ as pyo
m = pyo.ConcreteModel()
# SETS
m.T = pyo.Set(initialize=range(4))
m.K = pyo.Set(initialize=range(3))
# VARS
m.X = pyo.Var(m.T, m.K, domain=pyo.NonNegativeReals)
# example objective
m.OBJ = pyo.Objective(expr=sum(m.X[t, k] for t in m.T for k in m.K))
m.pprint()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/484432.html
上一篇:在tkinter中更改時如何使StringVar更新其值?
下一篇:Java-建構式單元測驗
