CPLEX报Integer infeasible column 'Ploss(1)'错误的排查咨询
问题根因排查
- 核心冲突是你声明的整数变量要求和等式约束的计算结果不匹配:
把temp(1)=55代入约束c1: Ploss(1) - 2.06*temp(1) = -40.376,可计算得到Ploss(1) = 2.06*55 - 40.376 = 72.924,该值不是整数。 - 你在model.lp的
Generals段将Ploss(1)声明为整数变量,同时你给Ploss(1)的上下界区间[0, 100000]内不存在能满足等式约束的整数值,因此CPLEX直接判定该变量无可行解,抛出Integer infeasible column 'Ploss(1)'报错。 - 你看到的solution.sol里的
Ploss(1)=0是无效的初始赋值结果,代入约束验证可得0 - 2.06*55 = -113.3,完全不符合等式要求的-40.376,不属于可行解。
可行修复方案
- 方案1:删除
Generals段中Ploss(1)的整数声明,将其改为连续变量,CPLEX可直接算出72.924的正确可行解 - 方案2:如果业务要求
Ploss(1)必须为整数,可将原等式约束调整为允许小范围误差的约束组,例如:
此时c1_lower: Ploss(1) - 2.06*temp(1) >= -40.876 c1_upper: Ploss(1) - 2.06*temp(1) <= -39.876Ploss(1)取73即可满足约束要求 - 方案3:调整约束系数的精度,使得代入后
Ploss(1)的计算结果为整数,匹配整数变量的声明要求
内容的提问来源于stack exchange,提问作者Leonardo Carlassare
相关产品推荐
相关产品推荐

