2013-11-24 52 views
1

我的模型开始了这样的:最小化多个变量

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 >= 10Tb也将是1000

我想告诉解算器“最小化T ,并且最大限度地减少所有的变量,但只有当它不会负面影响T“。我会怎么做?

回答

1

你所提出的问题是退化的(就变量可以取多个值而言仍然是最优的)。您可以通过向目标函数添加更多术语来干扰该目标,而不会改变所需的解决方案效果。

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

例如,你可以让你的OBJ是:

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

这不是你的主T变量的值产生不利影响。

更常见的是,该公约是做这样的事情:

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

其中小量一些小的非负数(比如1E-5)。由于CPLEX(或任何求解器)不想“支付价格”,它会使每个Tx变量(因此T)变得尽可能大。 Tb会是10,而不是你原来的解决方案中的1000。

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

+0

聪明和工作,谢谢(再次):) –

+0

很高兴它的工作,Maciej。 –