Boolean phương trình iff đúng được thỏa mãn trong ILP


8

Giả sử là một biến boolean trong một chương trình ILP (có nghĩa là , st 0 <= y <= 1 ) và x_1 , x_2 được bao bọc nguyên biến giữa 0M . Tôi muốn mã hóa các ràng buộc mức cao sau đây:y Z 0 < = y < = 1 x 1 x 2 0 MyyZ0<=y<=1x1x20M

y= =1x1x2

Cho đến nay tôi đã có điều này:

x1x2+(M+1)y

Điều này cho thấy rằng bất cứ khi nào x1>x2 là đúng, y phải là 1 hoặc phương trình sẽ không được giữ. Tuy nhiên, nếu x1x2 , không có gì hạn chế y và do đó có thể là 0 hoặc 1 .

Tôi có thể thêm phương trình nào khác để mã hóa ràng buộc?


Câu trả lời:


5

Bạn có thể làm điều này bằng cách giới thiệu hai bất đẳng thức

x1x2+M(1-y)

x1>x2-My.

Cái trước mã hóa yêu cầu (bạn có thể thấy rằng nếu , thì thuật ngữ biến mất; nếu , thì sẽ trở thành một thứ gì đó rất lớn và bất đẳng thức được tự động thỏa mãn). Cái sau mã hóa yêu cầu (vì những lý do tương tự). y = 1 M ( 1 - y ) y = 0 M ( 1 - y ) y = 0y= =1x1x2y= =1M(1-y)y= =0M(1-y)y=0x1>x2

Hy vọng rằng điều này cung cấp cho bạn một ý tưởng làm thế nào để xử lý các loại ý nghĩa khác, nếu chúng phát sinh. Về cơ bản, nhân với một cái gì đó lớn, và thêm nó / trừ nó ở đâu đó.


5

Bạn có thể thêm hằng và sau đó bạn thêm ràng buộc này:0<A<M

Ay(A+M)x1x2M(1y).

Nếu thì bạn còn lại vớiy=1

Mx1x20,
có nghĩa là .x1x2

Và nếu thì bạn sẽ bị bỏ lại vớiy=0

Ax1x2M,
có nghĩa là (kể từ ).x1>x20<A<M

3

Nhìn vào các ràng buộc chỉ báo và các ràng buộc SOS. Mặc dù bạn có thể định nghĩa các mối quan hệ đích một cách tuyến tính như các câu trả lời khác đã giải thích, các ràng buộc đặc biệt có thể được xử lý hiệu quả hơn bởi bộ giải IP.

Nếu bạn quyết định thực hiện các ràng buộc trực tiếp như được mô tả bởi câu trả lời khác, hãy thử sử dụng M nhỏ nhất có thể và xem xét hạ thấp dung sai tích phân nếu kết quả của bạn không chính xác. Ngoài ra, tránh sự bất bình đẳng nghiêm ngặt, chúng mơ hồ trong bối cảnh số học dấu phẩy động.

Sử dụng các ràng buộc chỉ báo:

x1x2y=1

x2x1+1y=0

Ràng buộc thứ hai tương đương với cho số nguyên, nếu bạn muốn chỉ cần bỏ 1.x2>x1x2x1


Cảm ơn những lời đề nghị hữu ích! Bạn có thể giải thích về cách các ràng buộc SOS hữu ích / hữu ích trong tình huống cụ thể này không?
DW

Tôi đã thêm một ví dụ với các ràng buộc chỉ báo. Đối với SOS thì phức tạp hơn và bạn phải giới thiệu các biến bổ sung, vì vậy cuối cùng bạn có thể không đạt được nhiều bằng cách sử dụng chúng. Tôi nghĩ rằng khía cạnh duy nhất cần cẩn thận ở đây là các vấn đề về số có thể phát sinh bằng cách sử dụng các công thức do người khác đề xuất và làm thế nào để giảm bớt chúng. Nếu bạn có quyền truy cập vào một bộ giải với các ràng buộc chỉ báo, thì hãy thử theo cách đó vì bộ giải có thể phân nhánh trực tiếp trên chúng hoặc tự động sửa đổi giá trị big-M.
Septimus G
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.