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

Pyomo实现such that约束及大规模MILP开源求解器选型咨询

带t>ti过滤条件的约束实现

你的思路是正确的,在Pyomo中可以通过定义过滤集合来实现AMPL里:t>ti的such that条件,不需要处理else分支,更简洁的官方推荐写法是使用Set的filter参数,自动过滤不符合条件的元组:

from pyomo.environ import *

model = ConcreteModel()
# 首先定义基础参数和集合
model.Tele = Param(initialize=48)
model.T = RangeSet(model.Tele)
model.A = Set(ordered=True)
# 定义变量和参数
model.active = Var(model.A, model.T, domain=Binary)
model.d = Param(model.A, domain=NonNegativeReals)

# 定义过滤集合:仅保留t>ti的(t,ti)元组
model.Tcomp = Set(within=model.T * model.T, filter=lambda m, t, ti: t > ti)

# 定义约束
def max_duration_rule(m, a, t, ti):
    return m.active[a,t] * t - m.active[a,ti] * ti <= m.d[a] * (1 - m.Tele * (m.active[a,t] + m.active[a,ti] - 2))
model.max_duration = Constraint(model.A, model.Tcomp, rule=max_duration_rule)

你原来的initialize写法也可以正常运行,不符合t>ti条件的元组会被自动跳过,不会加入到Tcomp集合中。

大规模MILP开源求解器选择

针对和Pyomo适配的开源MILP求解器,性能排序为HiGHS > CBC > GLPK,三者的适配性都没有问题:

  • GLPK仅适合小规模问题的逻辑验证,面对大规模MILP问题求解速度极慢,不推荐生产环境使用
  • CBC是COIN-OR推出的成熟开源MILP求解器,生态完善、资料充足,可处理绝大多数常规规模的MILP问题,是过去很长时间内开源MILP的首选
  • HiGHS是近年发展最快的高性能开源求解器,当前版本对MILP的支持已经非常成熟,求解速度比CBC有30%~100%的提升,Pyomo从6.4版本开始原生支持HiGHS,是目前大规模MILP问题的优先推荐选择

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 20:36:07