0

전 CPLEX를 처음 사용하고 MIP의 전문가는 아니지만이 기술로 문제를 해결하려고합니다 (CPLEX 12.4). 필자는 .lp 파일로 MIP 모델을 만들어 CPLEx에 제공하기로 결정 했으므로 다양한 입력 값을 갖고 다른 솔버를 테스트 할 수 있습니다. 그러나 표시기 제약 조건에 대해 한 가지 문제가 있습니다.LP 파일 형식을 사용하는 CPLEX : 부울 연산자가있는 표시기 제약

내가 좋아하는 뭔가를 원하는 :

c1: a AND NOT(b)-> i1 - 100 v1 = 0 
c2: b AND NOT(a)-> i1 - 120 v1 = 0 
c3: a AND b -> i1 - 80 v1 =0 

을하지만 LP 형식 같은 건 ANS AND 또는 NOT (I 내가 CPX 인터페이스에 그렇게 할 수 있는지조차 확실하지 않다,하지만 난 노력하고 있어요 없다 그것을 피하기 위해). 나는 다른 프로그램이 LP를 생성 될 것입니다 때문에

ca: a_not_b = 1 <-> a - b = 1 
cb: b_not_a = 1 <-> a - b = -1 
cab: a_and_b = 1 <-> a + b = 2 
c1: a_not_b-> i1 - 100 v1 = 0 
c2: b_not_a-> i1 - 120 v1 = 0 
c3: a_and_b = 1-> i1 - 80 v1 =0 

내가이을 갖는 괜찮을 것이다, 그러나 이것은 CPLEX를 느리게 않습니다

내가 찾은 유일한 해결 방법은하고있다? 이 작업을 수행하는 더 좋은 방법이 있습니까?

감사합니다.

답변

2

당신은 꽤 정확합니다. LP 및 MILP 방식은 이러한 종류의 논리적 제약을 직접적으로 허용하지 않습니다. 오히려 일반적으로 이러한 조건을 캡처하는 데 사용할 수있는 보조 변수를 모델에 작성해야합니다. 대부분의 경우 부울 또는 0/1 정수 변수가됩니다. MILP 모델을 작성하는 기술 & 기술의 대부분은 LP 및 MILP 모델의 다소 제한적인 '언어'에서 이러한 조건을 다시 작성하는 좋은 방법을 찾고 있습니다. 이것은 약간 재미있는 정신 체조로 이어질 수 있습니다! 이것은 CPLEX뿐만 아니라 MILP 접근법의 한계입니다. 이러한 논리적 관계를 지원하는 모델링 언어는 대부분이 보조 모델/정수 변수를 사용하여 동일한 모델링 기법을 둘러싼 구문 설탕을 제공합니다.

MILP 솔버는 수백만 개의 변수와 제약 조건으로 매우 큰 문제를 처리 할 수 ​​있습니다. 그러나 그 이유는 근본적인 수학적 구조와 가정 때문입니다. 제약 프로그래밍과 같은 기술은 논리적 및 기타 관계의 직접적인 모델링을 허용하지만 일반적으로 훨씬 작은 문제 인스턴스로 제한됩니다.

이것이 CPLEX (또는 다른 솔버)의 속도를 늦출 지 여부에 대한 대답은 아마도 그렇습니다. 그러나 MILP 솔버를 사용하는 경우 대안이 없을 수도 있습니다. 잘못된 문제보다 정확한 문제를 해결하는 것이 좋습니다.