0

線形問題のコスト関数で絶対値を使用する必要があります。こういう気になる部分

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]) >0 で試しましたが、うまくいきませんでした。

4

1 に答える 1

1

絶対値関数は非線形であるため (理由はこの数学の質問で説明されています)、最初に目的関数を線形化する必要があります。

基本的に、その合計の各絶対値項を新しい変数で表現し、これらの新しい変数の合計を最適化する必要があります (いくつかの追加の制約に従います)。この方法は、Thomas S. FergusonのLinear Programming教科書のセクション 7.2 で詳細に説明されています。

于 2013-08-31T22:40:04.737 に答える