2013-04-22 2 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 객체가 부울이 아니므로 컴파일 타임 오류가 발생합니다.

변수 pp [i]의 양수 부분을 최소화하려면 0이 아닌 pp [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만을 목적 함수에 나타나기 때문에,이 쪽의 값을 취한다 [I]는 PP [I]는 긍정적이면 0의 값은 프로파일은 [I] 부의 경우.

관련 문제