You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pyomo添加约束时报Cannot iterate over AbstractOrderedScalarSet错误求解

Pyomo运行报错修复方案

错误原因

  • 未正确实例化ConcreteModel:你写的seq=pe.ConcreteModel是将ConcreteModel类本身赋值给了变量seq,而非创建具体模型实例,导致后续挂载的集合、参数都是未构造的抽象组件,遍历的时候触发报错,正确写法是加括号完成实例化seq = pe.ConcreteModel()
  • 目标函数调用缺少前缀:直接写Objective会报未定义错误,需补充pyomo.environ前缀改成pe.Objective
  • 缺失参数定义:目标函数中用到的C_fuel、rho_heat两个参数未提前声明初始化,需补充这两个参数的定义和测试值保证程序正常运行。

修正后完整代码

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
# 补充缺失的参数测试值
C_fuel = {'CHP1': 10, 'CHP2': 12}
rho_heat = {'CHP1': 0.9, 'CHP2': 0.85}

#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
# 注册新增的两个参数到模型
seq.C_fuel = pe.Param(seq.CHP, initialize = C_fuel)
seq.rho_heat = pe.Param(seq.CHP, initialize = rho_heat)

### 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 补充pe前缀
seq.obj=pe.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))

修正后的代码可以正常完成模型构造,不会再抛出你遇到的初始化相关错误。

内容的提问来源于stack exchange,提问作者errenmike1806

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 11:15:04