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

Pyomo中InfeasibleConstraintException错误原因及解决方法咨询

Pyomo模型求解报错问题处理

运行代码

from pyomo.environ import *

model = ConcreteModel()

model.q11, model.q12, model.q13, model.q21, model.q22, model.q23, model.q31, model.q32, model.q33 = [Var(bounds=(0.0, 11.0), within=Integers, initialize=0.0) for i in range(9)]
model.s1, model.s2, model.s3 = [Var(bounds=(0.0, 1.0), within=Binary, initialize=0.0) for i in range(3)]
model.S1, model.S2, model.S3 = [Var(bounds=(0.0, 100.0), within=Integers, initialize=0.0) for i in range(3)]

model.c1 = Constraint(expr=model.q11*model.s1*model.S1 + model.q12*model.s1*model.S1 + model.q13*model.s1*model.S1 >= 130.0 - 3.0)
model.c2 = Constraint(expr=model.q11*model.s1*model.S1 + model.q12*model.s1*model.S1 + model.q13*model.s1*model.S1 <= 130.0 + 3.0)

model.c3 = Constraint(expr=model.q21*model.s2*model.S2 + model.q22*model.s2*model.S2 + model.q23*model.s2*model.S2 >= 130.0 - 3.0)
model.c4 = Constraint(expr=model.q21*model.s2*model.S2 + model.q22*model.s2*model.S2 + model.q23*model.s2*model.S2 <= 130.0 + 3.0)

model.c5 = Constraint(expr=model.q31*model.s3*model.S3 + model.q32*model.s3*model.S3 + model.q33*model.s3*model.S3 >= 130.0 - 3.0)
model.c6 = Constraint(expr=model.q31*model.s3*model.S3 + model.q32*model.s3*model.S3 + model.q33*model.s3*model.S3 <= 130.0 + 3.0)

model.c7 = Constraint(expr=model.q11 + model.q12 + model.q13 <= 11.0)
model.c8 = Constraint(expr=model.q21 + model.q22 + model.q23 <= 11.0)
model.c9 = Constraint(expr=model.q31 + model.q32 + model.q33 <= 11.0)

model.objective = Objective(expr=model.s1 + model.s2 + model.s3, sense=minimize)

SolverFactory('mindtpy').solve(model, mip_solver='glpk', nlp_solver='ipopt') 

model.objective.display()
model.display()
model.pprint()

报错信息

Trivial constraint c1 violates LB 127.0 ≤ BODY 0.
Traceback (most recent call last):
  File "/Users/francopiccolo/Git/GitHub/data-in-action/clothes-production-optimization/venv/lib/python3.12/site-packages/pyomo/contrib/mindtpy/algorithm_base_class.py", line 1097, in solve_subproblem
    TransformationFactory('contrib.deactivate_trivial_constraints').apply_to(
  File "/Users/francopiccolo/Git/GitHub/data-in-action/clothes-production-optimization/venv/lib/python3.12/site-packages/pyomo/core/base/transformation.py", line 77, in apply_to
    reverse_token = self._apply_to(model, **kwds)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/francopiccolo/Git/GitHub/data-in-action/clothes-production-optimization/venv/lib/python3.12/site-packages/pyomo/contrib/preprocessing/plugins/deactivate_trivial_constraints.py", line 118, in _apply_to
    raise InfeasibleConstraintException(
pyomo.common.errors.InfeasibleConstraintException: Trivial constraint c1 violates LB 127.0 ≤ BODY 0.
Infeasibility detected in deactivate_trivial_constraints.
WARNING: Deactivating trivial constraints on the block unknown for which
trivial constraints were previously deactivated. Reversion will affect all
deactivated constraints.

错误原因

  • 初始值触发预处理器检测:变量s1初始值设为0,代入约束c1后左边结果为0,远小于约束下限127,Pyomo预处理器直接判定约束不可行。
  • 模型逻辑存在冲突:目标是最小化s1+s2+s3(尽可能让更多s变量取0),但原约束要求当s_i=0时,对应表达式结果必为0,无法满足127≤0的硬性要求,模型本身逻辑矛盾。

可行解决办法

1. 修正变量初始值

给二进制变量s1、s2、s3设置合理初始值(比如设为1),避免预处理器在初始检查阶段就判定约束不可行:

model.s1, model.s2, model.s3 = [Var(bounds=(0.0, 1.0), within=Binary, initialize=1.0) for i in range(3)]

2. 使用大M法改写约束,增加松弛机制

当s_i=0时,松弛对应产能约束,避免矛盾。以c1和c2为例:

M = 1e6  # 设置足够大的常数,确保约束松弛后永远成立
model.c1 = Constraint(expr=model.q11*model.S1 + model.q12*model.S1 + model.q13*model.S1 >= 127 - (1 - model.s1)*M)
model.c2 = Constraint(expr=model.q11*model.S1 + model.q12*model.S1 + model.q13*model.S1 <= 133 + (1 - model.s1)*M)

当s1=0时,约束被松弛为无意义的恒成立条件;当s1=1时,约束回归原产能要求。

3. 重新匹配目标与约束逻辑

如果目标是最小化激活的生产线数量(s_i=1表示激活生产线),需确保激活的生产线能满足产能要求。单条生产线最大产能为11*100=1100,远大于130,逻辑上激活一条线即可满足需求,但必须解决s_i=0时的约束矛盾。

4. 临时禁用预处理器的 trivial 约束检测

调用MindtPy求解器时添加参数跳过该预处理器步骤,仅作为调试临时手段(模型逻辑矛盾仍需解决):

SolverFactory('mindtpy').solve(model, mip_solver='glpk', nlp_solver='ipopt', skip_trivial_constraints=True)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 21:06:07