我必须在某些线性问题的成本函数中使用绝对值。 像这样打扰我的部分
for (t=0;t<T;t++)
for (i=0;i<I; i++){
for (j=1;j<J; j++)
Sum += |x[i][j][t]-x[i][j][t-1]|*L/2;
Sum += |x[i][0][t]-x[i][0][t-1]|*V/2;
}
我用c ++编写代码,我不知道如何实现绝对值。 x是整数值。 我试过cplex.getValue(x [i] [j] [t]) - cplex.getValue(x [i] [j] [t-1])&gt; 0但它无法正常工作。
答案 0 :(得分:1)
由于绝对值函数是非线性的(原因在this math问题中解释),您需要首先线性化目标函数。
基本上,您需要用新变量表示该求和的每个绝对值项,并优化这些新变量的总和(受一些额外约束)。该方法在Thomas S. Ferguson的Linear Programming教科书的第7.2节中有详细解释。