【发布时间】:2013-02-22 23:20:26
【问题描述】:
我正在用 C++ 编写一个线性编程模型,从 cplex 中提取 Concert 技术。
我这样声明模型的变量和目标函数:
IloModel genInst (env);
IloNumVarArray Sizes(env,N,0.25+EPS,1.0-EPS);
IloObjective Weight = IloAdd(genInst, IloMaximize(env,IloSum(Sizes));
EPS 是一个小常数,因为我希望变量严格大于 0.25 且严格小于 1.0。
目标函数应该最大化所有变量的总和,但是每当我尝试这个时,解决方案中的变量的值都会超出我的限制(例如小于 0.25 或太大),我看不出有任何可能将变量值保持在其范围内。
有人可以帮我吗?我可能犯了一些错误,因为它不应该那么复杂。谢谢你!
【问题讨论】:
-
对 CPLEX 进行故障排除的一个好方法是使用 exportModel。检查 .LP 文件中的边界,看看它们是否符合您的期望。尝试使用不同的求解器(如 Gurobi)来解决问题,看看你得到了什么值。另外,当您在解决后说这些值超出了您的限制时,您会得到什么值? EPS的具体价值是多少?
-
谢谢,exportModel 帮我找到了原因,我的约束总是包含一个负变量,它应该是正的。