Secara tradisional, pemrograman linier digunakan untuk menemukan satu solusi optimal untuk sekumpulan kendala, variabel, dan tujuan (semuanya digambarkan sebagai hubungan linier). Kadang-kadang, ketika tujuannya sejajar dengan kendala, ada solusi optimal tak terbatas atau banyak yang sama baiknya. Saya tidak bertanya tentang kasus terakhir ini.
Saya lebih tertarik menemukan banyak solusi yang berada di wilayah layak yang dihasilkan oleh serangkaian kendala saya. Tapi saya ingin solusi yang saya temukan 'tersebar' di sekitar wilayah yang layak dalam arti bahwa mereka secara maksimal jauh dari satu sama lain. Adakah cara yang diketahui untuk, tanpa menjalankan pemecah beberapa kali, menghasilkan banyak solusi dan menggunakan fungsi objektif untuk menegakkan bahwa solusi harus dipisahkan?
Misalnya, setiap program linier dengan keputusan a dan b dan kendala w <= a <= x dan y <= b <= z dapat 'diduplikasi' untuk menemukan dua solusi. Program linier baru kami memiliki variabel a1, a2, b1, dan b2 dan kendala w <= a1 <= x dan w <= a2 <= x dan serupa untuk b1, b2. Namun, ketika datang untuk membentuk fungsi obyektif kita mengalami kesulitan karena kita tidak dapat menggunakan norma selain norma L1 tanpa membuang linearitas dan kita tidak dapat benar-benar bahkan menggunakan norma L1 karena itu tidak mungkin (sejauh yang saya tahu ) untuk menyandikan nilai absolut.
Mungkin saya harus melihat ke dalam optimasi cembung atau pemrograman semidefinite atau sesuatu?
Adakah cara yang diketahui untuk menghasilkan serangkaian solusi untuk program linier, dan menggunakan tujuan yang memberlakukan "jarak" antara solusi?
Jawaban:
Heuristik, menggunakan pemrograman linier
Salah satu pendekatan mungkin untuk memilih fungsi objektif acak, dan memaksimalkannya. Kemudian ulangi, dengan serangkaian fungsi tujuan yang berbeda setiap kali.
Dengan kata lain, anggaplah yang tidak diketahui itux1,x2,…,xn , dan Anda memiliki beberapa kendala C . Di setiap iterasi yang Anda pilihc1,c2,…,cn∈R secara acak, lalu cari solusi yang memaksimalkan c1x1+⋯+cnxn tunduk pada kendala C .
Saya berharap heuristik ini mungkin sering menemukan serangkaian solusi yang agak tersebar - tidak harus tersebar secara maksimal (maksimal jauh dari satu sama lain), tetapi mungkin juga tidak terlalu dekat satu sama lain.
Memaksimalkan rata-rata jarak L2 berpasangan, menggunakan pemrograman kuadratik
Atau, gunakan pemrograman kuadratik. Untuk kesederhanaan, mari kita lihat masalah menemukan dua solusi. Misalkan Anda menginginkan dua solusix,y yang sejauh mungkin terpisah satu sama lain, di bawah L2 norma (jarak Euclidean). Maka ini dapat dirumuskan sebagai masalah pemrograman kuadratik .
Pada dasarnya, Anda ingin memaksimalkan jarak kuadratd(x,y)2=(x1−y1)2+⋯+(xn−yn)2 antara x dan y , tunduk pada persyaratan bahwa keduanya x dan y harus memenuhi kendala. Ini adalah masalah memaksimalkan fungsi tujuan kuadratik, dengan kendala linier - yaitu, pemrograman kuadratik.
jika kamu mauk poin yang tersebar secara maksimal, ini juga mungkin. Katakan poinnyax1,…,xk∈Rn . Maka Anda bisa memaksimalkan fungsi tujuan
yaitu fungsi
Ini adalah fungsi kuadratik, dan Anda memiliki batasan linearC pada masing-masing poin xi , jadi ini adalah contoh pemrograman kuadratik. Ini menemukan Anda titik yang tersebar maksimal dalam arti bahwa jarak berpasangan rata-rata dimaksimalkan.
Anda juga dapat merumuskan varian serakah dari algoritma ini, yang sudah Anda milikik solusi, dan Anda ingin menemukan k+1 solusi th yang memenuhi semua ketidaksetaraan linear dan juga memaksimalkan jarak L2 rata-rata dari yang lain k solusi. Itu juga bisa dirumuskan sebagai masalah pemrograman kuadratik.
Pemrograman kuadratik lebih sulit daripada pemrograman linier, tetapi ada pemecah sendiri yang akan memecahkan masalah pemrograman kuadratik untuk Anda.
Memaksimalkan jarak L2 minimal berpasangan, menggunakan QCQP
Akhirnya, katakanlah Anda menginginkannyak poin yang akan tersebar dalam arti bahwa Anda ingin memaksimalkan jarak berpasangan minimum. Dengan kata lain, katakanlah Anda ingin menemukan ambang batas sebesar mungkint sedemikian rupa sehingga memungkinkan untuk ditemukan k poin x1,…,xk∈Rn bahwa masing-masing memenuhi kendala linier, dan sedemikian rupa sehingga setiap pasangan titik berada di kejauhan t jauh dari satu sama lain: d(xi,xj)≥t untuk semua i<j . Maka ini dapat dirumuskan sebagai program optimasi kuadratik dengan kendala kuadratik, yaitu, QCQP . QCQP bahkan lebih sulit, tetapi ada pemecah yang tidak sesuai untuk QCQP yang bisa Anda coba juga.
sumber
Saya menemukan pendekatan untuk menghasilkan nilai absolut.
Misalkan kita memiliki variabela1 , a2 , b1 dan b2 dan banyak kendala. Fungsi objektif kami terlihat seperti: maksimalkan|a1−a2|+|b1−b2| ; gagasannya adalah kita ingin memaksimalkan norma L1 dari dua solusi ini (sesuai pertanyaan awal).
Kami dapat memperkenalkan "slack variable" abs_a dan abs_b dan batasannya:
dan juga untukb1 dan b2 . Kendala ini memaksaabsa paling banyak perbedaan antara a1 dan a2 , dan mungkin lebih sedikit. Dengan kata lainabsa tidak boleh lebih besar dari perbedaan maksimum antara a1 dan a2 .
Kemudian yang tersisa adalah mengganti fungsi tujuan: memaksimalkana bsSebuah+ a bsb .
sumber