논리 AND : 선형 제약 조건 , , , . 여기서 은 정수로 제한됩니다. 이것은 원하는 관계를 강화합니다. ( 선형 불평등 만으로도 할 수 있다는 것은 매우 깔끔합니다 .)y1≥x1+x2−1y1≤x1y1≤x20≤y1≤1y1
논리 OR : 선형 제약 조건 , , , . 여기서 는 정수로 제한됩니다.y2≤x1+x2y2≥x1y2≥x20≤y2≤1y2
논리 NOT : 사용하십시오 .y3=1−x1
논리적 의미는 : 표현하려면 (즉, ), 우리는 논리적 OR의 구성을 적용 할 수 있습니다. 특히 선형 제약 조건 , , , . 여기서 는 정수로 제한됩니다.y4=(x1⇒x2)y4=¬x1∨x2y4≤1−x1+x2y4≥1−x1y4≥x20≤y4≤1y4
논리적 의미 : 가 유지해야 함을 나타내려면 및 가 이미 부울 값으로 제한되어 있다고 가정 할 때 선형 제약 조건 를 사용하면 됩니다.x1⇒x2x1≤x2x1x2
XOR은 : 표현할 (배타적 논리합의 및 ) 사용 선형 부등식 , , , , 여기서 는 정수로 제한됩니다.y5=x1⊕x2x1x2y5≤x1+x2y5≥x1−x2y5≥x2−x1y5≤2−x1−x20≤y5≤1y5
그리고 보너스로, 제로-원 (부울) 변수와 정수 변수가 혼합 된 문제를 공식화 할 때 도움이되는 기술이 하나 더 있습니다.
부울 (버전 1)에 출연 : 당신이 정수 변수가 있다고 가정하자 , 당신은 정의 할 되도록 의 경우 및 경우 . 추가로 알고 있다면 선형 부등식 , , . 그러나 이것은 의 상한과 하한을 알고있는 경우에만 작동합니다 . 또는상수 대해 (즉, )를 사용하면 여기에 설명 된 방법을 사용할 수 있습니다xyy=1x≠0y=0x=00≤x≤U0≤y≤1y≤xx≤Uyx|x|≤U−U≤x≤UU. 의 상한을 알고있는 경우에만 해당됩니다. .|x|
boolean으로 캐스트 (버전 2) : 같은 목표를 생각해 보자. 그러나 이제 우리는 의 상한을 모른다 . 그러나 알고 있다고 가정하십시오 . 다음은 선형 시스템에서 해당 제약 조건을 표현할 수있는 방법입니다. 먼저 새로운 정수 변수 도입하십시오 . 부등식 , , . 그런 다음 를 최소화하도록 목적 함수를 선택하십시오 . 목표 기능이없는 경우에만 작동합니다. 음수가 아닌 정수 변수 이 변수 를 부울로 캐스트하려는 경우 이면xx≥0t0≤y≤1y≤xt=x−ytnx1,…,xnyi=1xi≥1 및 경우 , 다음을 도입 할 수 변수 불평등 , , 상기 목적 함수를 정의 을 최소화 합니다. 다시 말하지만 이것은 객관적인 함수를 정의 할 필요가 없습니다 (캐스트와 부울을 제외하고 결과 ILP의 타당성을 확인하고 변수의 일부 기능을 최소화 / 최대화하지 않으려는 경우).yi=0xi=0nt1,…,tn0≤yi≤1yi≤xiti=xi−yit1+⋯+tn
몇 가지 훌륭한 연습 문제와 실제 예제를 보려면 Formulating Integer Linear Programs : A Rogues 'Gallery를 추천 합니다.