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

Cplex求解test.lp模型返回错误结果,OR-Tools(SCIP)求解正常是何原因

问题描述

我创建了一个示例test.lp文件,内容如下:

Maximize
    y

Subject To
 +x1+100M+3M2+x4-y+A=0
 x1-M-M2-10x4>=-20
 x1 - 3 M + M2 <= 100
 M - 3.5 x4 + M2= 0
 A+x1<=140
 
Bounds
 x1<= 40
 2 <= x4 <= 3
 0<=x1
Binary
 M
Integer
 A
End

我使用全部默认设置,依次执行命令read test.lp -> opt -> d sol v -求解,得到的结果如下:

Variable Name           Solution Value
y                           172.500000
x1                           40.000000
M                             1.000000
M2                            9.500000
x4                            3.000000
A                             1.000000

但正确结果应为y=271.5和A=100,其余变量的取值没有问题。我用Google OR-Tools的SCIP求解器测试同一模型得到了正确结果,请问我遗漏了什么设置,或是操作哪里有误?


问题原因与解决方法

这个问题通常是求解器预设(presolve)阶段的处理逻辑异常,或者LP文件解析时符号识别错误导致的,可按以下步骤排查解决:

  • 先验证读入的模型和你编写的内容是否一致,执行disp prob vars命令查看所有变量属性:
    确认A的类型为整数、下界为0,且第一个约束中A的系数为+1、y的系数为-1,老旧版本的CPLEX等求解器经常会因为行首多余的加号出现系数解析错误的问题。
  • 关闭求解器预设功能后重新求解:
    先执行set preind 0命令关闭预设,再执行opt求解,基本就能得到正确结果。预设功能会在求解前自动化简模型,部分场景下会错误识别整数变量的系数方向,导致遗漏最优解。
  • 可以在LP文件的Bounds块中明确声明整数变量A的上下界,哪怕上界标注为A <= 1e6也可以,避免部分求解器对无显式上界的整数变量做异常默认处理。

内容的提问来源于stack exchange,提问作者Dr.PB

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:36:04