2013-04-22 195 views
1

的定義,我使用CPLEX來解決MIP。我的目標是最大限度地減少積極的決策值的總和。所以,我需要的時候我定義目標函數來判斷判定值的跡象。 例如:我能得到IloNumVarArray的價值?關於目標函數

IloNumVarArray pp(env); 
    for (int i=0;i<N;i++) 
    { 
     pp.add(IloNumVar(env, -50.0, 50.0)); 
    } 
    IloExpr obj(env); 
    for (int in=0;in<N;in++) 
    {  
     if (pp[in]>0) ///error:this expression is wrong, how to judge the value? /// 
     obj+=pp[in]; 
    } 
    model.add(IloMinimize(env, obj)); 
    obj.end(); 

我該如何正確表達它呢?我可以得到「PP」的價值時,我定義了目標函數?

回答

1

根據定義,決策變量的值是未知的,直到之後你一個解決,所以(PP [I]> 0)這樣就可以獲得一個編譯時間錯誤返回一個IloRange對象不是一個布爾值。

要將變量頁的正部分最小化[I]需要定義的第二變量,它是非零,但比第[I]大。

IloNumVarArray pp(env, N, -50, 50, ILOFLOAT); 
IloNumVarArray pp_positive(env, N, 0, IloInfinity, ILOFLOAT); 
for (int i=0; i<N; ++i) 
{ 
    model.add(pp[i] - pp_positive[i] <= 0); 
} 
model.add(IloMinimize(env, IloSum(pp_postiive)); 

因爲pp_positive只出現在目標函數中,這將需要對PP的值[I]如果第[i]爲正,而所述值0,如果第[i]爲負。