在构造(初始化)之前无法迭代 AbstractOrderedScalarSet
Cannot iterate over AbstractOrderedScalarSet before it has been constructed (initialized)
我刚开始使用 pyomo 和 Python,并尝试创建一个简单的模型,但在添加约束时遇到问题。
我遵循了 GitHub 中的以下示例
https://github.com/brentertainer/pyomo-tutorials/blob/master/introduction/02-lp-pyomo.ipynb
import pandas as pd
import pyomo.environ as pe
import pyomo.opt as po
#DATA
T=3;
CH=2;
time = ['t{0}'.format(t+1) for t in range(T)]
CHP=['CHP{0}'.format(s+1) for s in range(CH)]
#Technical characteristic
heat_maxprod = {'CHP1': 250,'CHP2': 250} #Only for CHPS
#MODEL
seq=pe.ConcreteModel
### SETS
seq.CHP = pe.Set(initialize = CHP)
seq.T = pe.Set(initialize = time)
### PARAMETERS
seq.heat_maxprod = pe.Param(seq.CHP, initialize = heat_maxprod) #Max heat production
### VARIABLES
seq.q_DA=pe.Var(seq.CHP, seq.T, domain=pe.Reals)
### CONSTRAINTS
##Maximum and Minimum Heat Production
seq.Heat_DA1 = pe.ConstraintList()
for t in seq.T:
for s in seq.CHP:
seq.Heat_DA1.add( 0 <= seq.q_DA[s,t])
seq.Heat_DA2 = pe.ConstraintList()
for t in seq.T:
for s in seq.CHP:
seq.Heat_DA2.add( seq.q_DA[s,t] <= seq.heat_maxprod[s])
### OBJECTIVE
seq.obj=Objective(expr=sum( seq.C_fuel[s]*(seq.rho_heat[s]*seq.q_DA[s,t]) for t in seq.T for s in seq.CHP))
当我 运行 程序时出现以下错误:
RuntimeError: 无法迭代 AbstractOrderedScalarSet 'AbstractOrderedScalarSet' 在构造(初始化)之前:'iter' 是抽象组件上的一个属性,直到该组件已使用 AbstractModel.create_instance() 或 AbstractOrderedScalarSet.construct().
完全构建(转换为混凝土组件)
有人可以帮忙解决一个问题吗?谢谢!
P.S。我知道问题的最终答案是零,我只是想让它按照正确的语法工作。
在这行代码中:
seq=pe.ConcreteModel
您缺少括号。所以,我认为你只是为函数创建了一个别名而不是调用它。
尝试:
seq=pe.ConcreteModel()
我刚开始使用 pyomo 和 Python,并尝试创建一个简单的模型,但在添加约束时遇到问题。
我遵循了 GitHub 中的以下示例 https://github.com/brentertainer/pyomo-tutorials/blob/master/introduction/02-lp-pyomo.ipynb
import pandas as pd
import pyomo.environ as pe
import pyomo.opt as po
#DATA
T=3;
CH=2;
time = ['t{0}'.format(t+1) for t in range(T)]
CHP=['CHP{0}'.format(s+1) for s in range(CH)]
#Technical characteristic
heat_maxprod = {'CHP1': 250,'CHP2': 250} #Only for CHPS
#MODEL
seq=pe.ConcreteModel
### SETS
seq.CHP = pe.Set(initialize = CHP)
seq.T = pe.Set(initialize = time)
### PARAMETERS
seq.heat_maxprod = pe.Param(seq.CHP, initialize = heat_maxprod) #Max heat production
### VARIABLES
seq.q_DA=pe.Var(seq.CHP, seq.T, domain=pe.Reals)
### CONSTRAINTS
##Maximum and Minimum Heat Production
seq.Heat_DA1 = pe.ConstraintList()
for t in seq.T:
for s in seq.CHP:
seq.Heat_DA1.add( 0 <= seq.q_DA[s,t])
seq.Heat_DA2 = pe.ConstraintList()
for t in seq.T:
for s in seq.CHP:
seq.Heat_DA2.add( seq.q_DA[s,t] <= seq.heat_maxprod[s])
### OBJECTIVE
seq.obj=Objective(expr=sum( seq.C_fuel[s]*(seq.rho_heat[s]*seq.q_DA[s,t]) for t in seq.T for s in seq.CHP))
当我 运行 程序时出现以下错误:
RuntimeError: 无法迭代 AbstractOrderedScalarSet 'AbstractOrderedScalarSet' 在构造(初始化)之前:'iter' 是抽象组件上的一个属性,直到该组件已使用 AbstractModel.create_instance() 或 AbstractOrderedScalarSet.construct().
完全构建(转换为混凝土组件)有人可以帮忙解决一个问题吗?谢谢!
P.S。我知道问题的最终答案是零,我只是想让它按照正确的语法工作。
在这行代码中:
seq=pe.ConcreteModel
您缺少括号。所以,我认为你只是为函数创建了一个别名而不是调用它。
尝试:
seq=pe.ConcreteModel()