2017-02-23 8 views
0

연속 및 이진 변수와 관련된 문제가 있습니다. 일단 목적 함수를 만들면 CPLEX가 솔루션을 찾지 못하게하는 제약 조건을 추가합니다. 내가 뭘 잘못하고 있는지 알려줘.CPLEX가 동등 제약 조건을 만족하는 솔루션을 찾지 못함

IloNumExpr cbin1 = cplex.prod(EB_s[a-1],binHandelSprzedaj[a-1]); 
cplex.addEq(EB[a],cbin1); 

"binHandelSprzedaj"이진 변수의 배열이다. "EB_s"및 "EB"는 연속 cplex float 변수의 배열입니다.

"cbin1"대신 "EB_s [a-1]"또는 "binHandelSprzedaj [a-1]"을 입력하면 코드가 작동합니다. 내가 이차 구속으로 끝나기 때문이라고 생각합니다. 그러나 CPLEX에서 제공하는 예제 중 하나 인 "QCPex1"은 솔루션에 "덜 균등 한"2 차 제약 조건을 제공하며 코드는 필자가 작성한 것과 매우 유사합니다. 왜 코드가 작동하지 않는지 이해할 수 없습니다. 왜냐하면 구속 조건이 2 차 또는 2 진 및 연속 변수의 혼합이거나 "동일"유형의 구속 조건이기 때문입니다.

오류 메시지 수신 : CPLEX 오류 5002 : 목적에 Q 내가 최적화에 큰 멍청한 놈이야

반 명확한 긍정적 없습니다. 이 문제를 어떻게 처리합니까? 나는 CPLEX가 나를 위해 가능한 한 많은 수학을했으면 좋겠다. (어쩌면 당신이 제안 할 수있는 몇 가지 마법의 명령 일 수도있다.)

최종 형태의 제약 조건은보다 복잡하므로 간단한 변수 완화 (여기에 제시된 내용은 http://orinanobworld.blogspot.com/2010/10/binary-variables-and-quadratic-terms.html)가 작동하지 않습니다. 같을 것이다 완전히 정의 문제에 구속 :

A = B + C + D + 이진 *의 F를 (1 - 이진) * g

- g는 연속 변수들이다.

도움이 될 것입니다.

답변

0

Cplex는 볼록한 MIQP (2 차 목적) 및 MIQCP (2 차 제약) 문제를 처리 할 수 ​​있습니다. 또한 볼록하지 않은 MIQP도 처리 할 수 ​​있습니다 (매개 변수 SolutionTarget 통해). 우리는 2 차원 적으로 구속 된 볼록하지 않은 문제가 남아 있습니다.

다행히도 우리는 항상 바이너리와 연속 변수의 곱을 선형화 할 수 있습니다. 폴 루빈 (Paul Rubin)의 블로그에 대한 언급이 실제로 적용될 것입니다. (Here는 또 다른 제조법입니다).

즉 당신의 교체를 위해

:

a = b + c + d + binary * f - (1-binary)*g 

z 다른 연속 변수이다

a = b + c + d + binary * f - g + z 
z = binary*g 

에 의해. 방정식

z = binary*g 

은 직접 선형화 될 수 있습니다.

+0

감사합니다. 지금까지 작동합니다. :) – t4u