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

Pyomo使用索引集构建约束报AttributeError错误如何解决?

问题原因

报错核心来源于objconst约束的索引定义错误:
构造Constraint组件时传入的第二个索引参数model.n[i]是无效的,该代码行执行时i没有上下文遍历值,无法动态获取每个i对应的n子集,Pyomo会将其识别为异常列表对象,而非合法的约束索引集合,因此在生成表达式时报出list无is_expression_type属性的错误。

解决方案

你已经提前构造了包含所有合法(i,n)组合的二维集合model.x,直接用它作为约束的索引即可,无需拆分索引参数。

修改后的对应代码段如下:

def rule3(model,i,n):
    return model.Db[i,n] >= sum(model.Sb[k,i,n]*model.t[k] for k in model.k) - model.tauB[i,n]
# 替换原索引参数为已定义的二维集合model.x
model.objconst = pyo.Constraint(model.x, rule=rule3)
可选优化

对于大规模模型,建议将求和逻辑替换为Pyomo内置的pyo.quicksum,表达式构建效率更高:

def rule3(model,i,n):
    return model.Db[i,n] >= pyo.quicksum(model.Sb[k,i,n]*model.t[k] for k in model.k) - model.tauB[i,n]
model.objconst = pyo.Constraint(model.x, rule=rule3)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 12:36:03