我的模型就是这样开始的:
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 >= 1000
和Tb >= 10
时,Tb
也将为1000。 / p>
我想告诉解算器“最小化T
,并最小化所有Tx
变量,但前提是它不会对T
产生负面影响”。我该怎么做?
答案 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
值。