Công thức LP cho điều kiện if


10

Tôi có LP sau:

/* Hàm mục tiêu */
tối thiểu: 1 w + 2 x + 0,5 y + z;

/ * Giới hạn biến * /
w + x <= T1;
w + y = U1;
x + z = U2;
T1 = 50;
U1 = 70;
U2 = 25;

Trong trường hợp này, U1 + U2> T1 và giải pháp tối ưu là y = 70 và z = 25. Tôi muốn thực thi điều kiện là các biến w và x được gán giá trị trước khi gán giá trị cho y và z. Nếu U1 + U2 <T1, thì tôi chỉ muốn w và x có giá trị và y = z = 0. Có cách nào để thực thi một ràng buộc như vậy trong LP hoặc MILP không?


không chắc chắn tại sao downvote: đó là một câu hỏi hợp lý, mặc dù hẹp trong LP
Suresh Venkat

Câu trả lời:


11

Dưới đây là câu trả lời cho hai câu hỏi của bạn. Các chi tiết sẽ phụ thuộc vào người giải quyết bạn đang sử dụng:

  • Đảm bảo rằng và được gán các giá trị trước và thường có thể được thực hiện theo chương trình bằng cách biểu thị thứ tự biến được sử dụng bởi người giải. Đó là, chỉ định biến nào mà người giải cố gắng tìm giá trị cho lần đầu tiên. Điều này có thể, ví dụ, trong bộ giải choco (đó là một bộ giải vấn đề thỏa mãn ràng buộc (CSP) không phải là bộ giải cho LP hoặc MILP), mặc dù tôi chắc chắn rằng các bộ giải khác cũng cung cấp khả năng này.x y zwxyz

  • Bộ lập trình tuyến tính GNU thực sự có if-then-elsecấu trúc để thể hiện các điều kiện. Tìm "điều kiện" trong hướng dẫn . Bạn có thể gói các mệnh đề bạn quan tâm trong một tuyên bố như vậy : if U1 + U2 < T2 then y = 0 and z = 0 else true. (Lưu ý rằng tôi chưa thực sự thử điều này, vì vậy cú pháp có thể sai.)

  • Một câu trả lời thay thế cho câu hỏi thứ hai lợi dụng thực tế là , và là hằng số. Đơn giản, có hai biến thể của vấn đề LP, một biến thể khi và một biến thể khi .U 2 T 1 U 1 + U 2 < T 1 U 1 + U 2 T 1U1U2T1U1+U2<T1U1+U2T1


Cảm ơn các lựa chọn. Tôi sẽ đi với tùy chọn 3 bây giờ.
Bala
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.