2013-07-31 3 views
1

에 EXPR (합)를 추가 나는 다음과 같은 목적 함수있어 :CPLEX 자바는 목적 함수

이 합을 최소화 (trueck [K] - 시간 [K]) 모든 K (1..N)에 있습니다.

"유형 IloLinearNumExpr의 방법 addTerm (더블, IloNumVar)이 적용되지 않습니다 : 4 라인의 일식 오류 메시지가

IloLinearNumExpr obj = cplex.linearNumExpr(); 

for(int k=0; k<grossK.length; k++){ 
    obj.addTerm(1.0, cplex.sum(trueck[k], cplex.negative(time[k]))); 
} 

cplex.addMinimize(obj); 

:

나는 이런 식으로 설정하려 인수 (double, IloNumExpr) "

"addTerm "메서드는 잘못되었지만 해결책을 찾을 수 없습니다. 미리 감사드립니다.

답변

2

cplex.sumaddTerm 안에 사용하지 마십시오. Object 함수에서 두 용어를 모두 분리해야합니다. 왜냐하면 둘 다 k에 합쳐지기 때문입니다.

최소 sum_over_k * * (trueck [K])와 동일하다 모든 K (1..N) 용 -

합 (시간 [K] trueck [K])로 - 최소화 * sum_over_k * (시간 [k])

이렇게하면 addTerm이 처리 할 수 ​​있습니다. 아래 코드는 테스트를 거치지 않았지만 시도해야 할 것에 대한 아이디어를 제공합니다.

IloLinearNumExpr obj = cplex.linearNumExpr(); 

for(int k=0; k<grossK.length; k++){ 
    obj.addTerm(1.0, trueck[k]); 
    obj.addTerm(-1.0, time[k]); 
} 

cplex.addMinimize(obj); 

희망이 있습니다.

0

addTerm 메서드는 계수와 변수를 필요로합니다. 두 번째 인수로 복잡한 표현식 (예 : 합계) 또는 특정 숫자 값을 기대하지 않습니다. 전달하려는 내용에 논리 문제가있을 수 있으므로 문제를 해결하지 못한 경우 수행하려는 작업에 대한 세부 정보로 질문을 업데이트하는 것이 좋습니다. 즉, 입력하려는 용어가 사용중인 선형 표현식과 호환되지 않습니다.

+0

이것은 내가 말한 것입니다. 불행히도 나는이 경험이 없다. 방정식을 다시 쓰는 방법에 대한 통찰력을 줄 수 있을까요? –

+0

해석자가 1.0x가 아닌 항을 기대합니다 (f (x) - g (x)). 불행히도 더 간단한 선형 방정식으로 방정식을 다시 작성하는 원래 포스터의 유스 케이스에 대해서는 충분히 알지 못합니다. – tuckermi