Apa cara yang disarankan untuk melakukan nonlinier kuadrat, min , dengan kotak kendala l o j < = p j < = h i j ? Menurut saya (orang-orang bodoh masuk) bahwa seseorang dapat membuat batasan kotak kuadratik, dan meminimalkan ∑ i e r r i ( p ) 2 + C ∗ ∑ j t u b ( p j , l o mana t u b ( x , l o , h i ) adalah "fungsi tub" berbentuk seperti \ ___ /, m a x ( l o - x , 0 , x - h i ) . Apakah ini berfungsi dalam teori, bekerja dalam praktik? (Tampaknya ada banyak banyak makalah teoritis tentang NLS +, tetapi minat saya praktis - kasus uji nyata atau realistis akan membantu saya untuk memilih di antara metode.)
(Para ahli, harap tambahkan tag: "kuadrat-terkecil"?)
optimization
constraints
denis
sumber
sumber
Jawaban:
Menambahkan persyaratan penalti kuadrat untuk menghilangkan kendala adalah pendekatan sederhana yang memberikan akurasi urutan 1 / faktor penalti saja. Oleh karena itu tidak disarankan untuk akurasi tinggi kecuali Anda membiarkan hukumannya hingga tak terbatas selama perhitungan. Tetapi faktor penalti yang tinggi membuat Hessian sangat tidak terkondisi, yang membatasi akurasi total yang dapat dicapai tanpa memperhitungkan kendala secara eksplisit.
Perhatikan bahwa batasan terikat jauh lebih mudah ditangani daripada kendala umum, di mana kendala itu hampir tidak pernah dikonversi menjadi penalti.
Solver L-BFGS-B (digunakan dengan sejarah sekitar 5 dimensi) biasanya memecahkan masalah yang terikat dengan sangat andal dan cepat di kedua dimensi rendah tinggi. Pengecualian adalah kesalahpahaman pada masalah yang bisa menjadi sangat jauh dari solusi, di mana mudah terjebak dengan metode keturunan.
Kami membuat banyak percobaan pada fungsi yang sangat beragam dalam banyak dimensi yang berbeda, dengan banyak solver yang berbeda tersedia, karena kami membutuhkan solver dengan batasan yang sangat kuat sebagai bagian dari perangkat lunak pengoptimalan global kami. L-BFGS-B jelas menonjol sebagai metode tujuan umum, meskipun tentu saja pada masalah kecil, pemecah lain berperforma lebih baik. Jadi saya akan merekomendasikan L-BFGS-B sebagai pilihan pertama, dan akan mencoba teknik alternatif kalau-kalau L-BFGS-B menangani masalah kelas khusus Anda dengan buruk.
sumber
Saya hanya akan menggunakan IPLT pemecah NLP untuk tujuan umum . Ini adalah pemecah yang paling kuat di antara yang sudah saya coba.
Kecuali jika Anda memiliki beberapa persyaratan yang sangat khusus, tidak ada alasan mengapa Anda harus menuntut pemecah masalah khusus yang hanya berfungsi untuk NLS dengan kendala kotak.
Perubahan persyaratan (misalnya menambahkan kendala nonlinear) akan menyebabkan sakit kepala utama dengan pemecah masalah khusus. Anda tidak akan memiliki masalah seperti itu jika Anda menggunakan IPOPT untuk tujuan umum.
UPDATE: Anda dapat mencoba L-BFGS dengan IPOPT , lihat di bawah Quasi-Newton dalam dokumentasi.
Prosedur solusi dapat menjadi lebih cepat dengan mengorbankan memanjakan kekuatan IPOPT yang luar biasa. Menurut pendapat saya , gunakan derivatif yang tepat jika tersedia. Saya akan mulai mengacaukan perkiraan (seperti L-BFGS) hanya jika saya telah membuktikan masalah kinerja.
sumber
Paket R minpack.lm CRAN menyediakan implementasi Levenberg-Marquardt dengan kendala kotak.
Secara umum, Levenberg-Marquardt jauh lebih cocok daripada L-BFGS-B untuk masalah kuadrat-terkecil. Ini akan bertemu (jauh) lebih baik pada masalah yang menantang. Ini juga akan jauh lebih cepat daripada tujuan umum IPOPT, karena dirancang untuk masalah non-linear kuadrat-terkecil.
Paket R memilih pendekatan proyeksi yang sangat mudah untuk menegakkan kendala (lihat kode sumber ). Bergantung pada implementasi LM yang Anda gunakan, bisa jadi sederhana untuk dimasukkan.
Sekarang, saran dalam komentar menggunakan transformasi, (misalnya transformasi sinus seperti dalam scipy) juga merupakan alternatif yang baik dan sederhana untuk mengubah algoritma LM Anda yang tidak dibatasi menjadi yang dibatasi. Anda juga perlu memasukkan transformasi dalam Jacobian jika Jacobian analitik.
sumber
(Bertahun-tahun kemudian) dua pemecah yang menangani batasan kotak:
Scipy least_squares memiliki 3 metode, dengan dokumen lengkap:
sumber