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?
linear-programming
Bala
sumber
sumber
Jawaban:
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 zw x y z
The GNU Linear Programming Kit sebenarnya memiliki
if-then-else
konstruk 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 1U1 U2 T1 U1+U2<T1 U1+U2≥T1
sumber