在进行优化求解过程中,难免会遇到这种情况:
Row ‘c373’ infeasible, all entries at implied bounds.
那么应该怎么办呢?
当用Yalmip建模+Cplex求解过程中,由于Yalmip的建模方式与Cplex有一定的不同,如图:
saveampl(constraint,object,'mymodel');
得到结果为:
从图中可知,由于没有准确的行编号,利用其对Cplex求解过程中出现的某行出现的问题进行准确定位不太现实。
其实,在‘YALMIP建模+CPLEX求解,让优化问题更简单’文章中已经给出了答案。
其实完全可以输出Cplex求解时使用的模型,其方法为:
ops=sdpsettings('solver','cplex');%设置求解方式
[model,recoveryalmip,diagnostic,internalmodel]=export(co,-object,ops);%转为cplex模型
milpt=Cplex('milp for htc');
milpt.Model.sense='minimize';
milpt.Model.obj=model.f;
milpt.Model.lb=model.lb;
milpt.Model.ub=model.ub;
milpt.Model.A=[model.Aineq;model.Aeq];
milpt.Model.lhs=[-inf*ones(size(model.bineq,1),1);model.beq];
milpt.Model.rhs=[model.bineq;model.beq];
milpt.Model.ctype=model.ctype;
milpt.writeModel('ab.lp');%输出cplex模型(注意大小写)
milpt.solve();%模型求解
利用writeModel输出模型为:
利用Cplex输出模型的行编号,我们可以准确定位至出错的行数,对照约束进行修改便可解决问题。
博文不易,欢迎关注’一个交通人’