Formulasi LP untuk kondisi-jika

10

Saya memiliki LP berikut:

/* Fungsi objektif */
min: 1 w + 2 x + 0,5 y + z;

/ * Batas variabel * /
w + x <= T1;
w + y = U1;
x + z = U2;
T1 = 50;
U1 = 70;
U2 = 25;

Dalam hal ini U1 + U2> T1 dan solusi optimal adalah y = 70 dan z = 25. Saya ingin memberlakukan kondisi bahwa variabel w dan x diberi nilai sebelum menetapkan nilai ke y dan z. Jika U1 + U2 <T1, maka saya hanya ingin w dan x memiliki nilai dan y = z = 0. Apakah ada cara untuk menegakkan batasan seperti itu dalam LP atau MILP?

Bala
sumber
tidak yakin mengapa downvote: itu adalah pertanyaan masuk akal, meskipun sempit di piringan hitam
Suresh Venkat

Jawaban:

11

Inilah jawaban untuk dua pertanyaan Anda. Detailnya akan tergantung pada pemecah yang Anda gunakan:

  • Memastikan bahwa dan diberi nilai sebelum dan sering dapat dilakukan secara terprogram dengan mengekspresikan urutan variabel yang digunakan oleh solver. Yaitu, menentukan variabel mana yang diselesaikan oleh solver untuk menemukan nilai untuk pertama kali. Ini dimungkinkan, misalnya, dalam pemecah choco (yang merupakan pemecah masalah kepuasan (CSP) bukan pemecah untuk LP atau MILP), meskipun saya yakin pemecah lain menawarkan kemungkinan ini juga.x y zwxyz

  • The GNU Linear Programming Kit sebenarnya memiliki if-then-elsekonstruk untuk mengekspresikan conditional. Cari "kondisional" dalam manual . Anda bisa membungkus klausa Anda tertarik dalam sebuah pernyataan seperti: if U1 + U2 < T2 then y = 0 and z = 0 else true. (Perhatikan bahwa saya belum benar-benar mencobanya, jadi sintaksnya mungkin salah.)

  • Jawaban alternatif untuk pertanyaan kedua memanfaatkan fakta bahwa , dan adalah konstanta. Sederhananya, ada dua varian masalah LP, satu untuk saat dan satu untuk saat .U 2 T 1 U 1 + U 2 < T 1 U 1 + U 2 T 1U1U2T1U1+U2<T1U1+U2T1

Dave Clarke
sumber
Terima kasih untuk opsinya. Saya akan pergi dengan opsi 3 untuk saat ini.
Bala