最小化多个变量

时间:2013-11-24 13:33:21

标签: linear-programming cplex

我的模型就是这样开始的:

Minimize
 +T

\* Constraints *\
Subject To
 +T -Ta >= 0 //T >= Ta
 +T -Tb >= 0 //T >= Tb
 +T -Tc >= 0 //and so on
 +T -Td >= 0
 +T -Te >= 0

Tx变量只有较低的界限,没有上限。发生的情况是CPLEX正确识别关键变量,但所有其他变量最终“拉伸” - 例如,当Ta >= 1000Tb >= 10时,Tb也将为1000。 / p>

我想告诉解算器“最小化T,并最小化所有Tx变量,但前提是它不会对T产生负面影响”。我该怎么做?

1 个答案:

答案 0 :(得分:1)

您制定的问题是简并的(在某种意义上,变量可以采用多个值并且仍然是最优的)。您可以通过向目标函数添加更多项来扰乱它,而无需更改所需的解决方案效果。

一种方法是在目标函数中包含其他变量(您的Tx变量)。

例如,您可以将Obj设为:

Minimize T + Ta + Tb + Tc + Td + Te

这不会对主T变量的值产生负面影响。

更常见的是,惯例是做类似的事情:

Minimize
     T + epsilon(Ta + Tb + Tc + Td + Te)

其中epsilon是一些小的非负数(比如1e-5)。由于CPLEX(或任何解算器)不想“付出代价”,因此每个Tx变量(以及T)都会变得尽可能大。 Tb将是10,而不是原始解决方案中的1000。

报告最佳解决方案时,请务必报告变量T的值,而不是Objective function值。