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

如何编码由等式计算的参数Tij?是否需在param段定义?

Tij 实现方案

别直接用你写的那种Param形式定义,你搞混了不同建模组件的适用场景:

  • 你写的model.T=Param(model.i,model.j, within=PositiveReals)是用来存提前已知、不需要动态计算的固定输入参数的,而且你给的Tij计算规则是集合并集,结果是区间集合不是单个正实数,PositiveReals的域约束完全对不上。
  • 如果Tij是不随优化决策变动的固定派生量:直接在定义完tn、tm、a、Tj这些前置基础集合/参数之后,按规则初始化就行,参考写法:
    # 先完成基础量定义:model.i、model.j、tn、tm、a、model.Tj
    # 生成[tn, tm-a]区间集合
    model.base_interval = RangeSet(tn, tm - a)
    # 按集合并集规则初始化Tij
    def init_tij(m, i_idx, j_idx):
        return m.base_interval.union(m.Tj[j_idx])
    model.Tij = Set(model.i, model.j, initialize=init_tij)
    
  • 如果Tij是会随决策变量变动的量:它根本不属于参数范畴,要定义成Var变量,再把你给出的计算规则转成对应约束,用Constraint类绑定等式关系,不能往Param上挂计算公式。

补个语法提醒:Pyomo里Param传索引维度用圆括号不是大括号,你原来写的大括号写法本身就不符合语法规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:57:11