Karena salah satu jawaban saya telah dikutip, saya akan mencoba menjelaskan mengapa saya menyarankan menggunakan IPOPT daripada MINPACK.
Keberatan saya untuk menggunakan MINPACK tidak ada hubungannya dengan algoritma yang digunakan MINPACK dan segala sesuatu yang berkaitan dengan implementasinya. Keberatan utama saya adalah bahwa perangkat lunak tanggal kembali ke 1980, dan terakhir diperbarui pada tahun 1999. Jorge Moré sudah pensiun; Saya ragu dia atau penulis perangkat lunak lain mengawasi hal itu lagi, dan tidak ada tim orang yang secara aktif mendukungnya. Satu-satunya dokumentasi yang dapat saya temukan pada perangkat lunak adalah laporan teknis Argonne 1980 asli yang ditulis oleh Jorge Moré dan penulis MINPACK lainnya. (Bab 1-3 dapat ditemukan di sini , dan Bab 4 dapat ditemukan di sini.) Setelah mencari kode sumber MINPACK dan membaca dokumentasi (PDF adalah gambar yang dipindai, dan tidak dapat dicari), saya tidak melihat opsi untuk mengakomodasi kendala. Karena poster asli dari masalah kuadrat-terkecil nonlinier ingin menyelesaikan masalah kuadrat-terkecil nonlinier, MINPACK bahkan tidak akan menyelesaikan masalah itu.
Jika Anda melihat milis IPOPT, beberapa pengguna menunjukkan bahwa kinerja paket pada masalah nonlinier kuadrat (NLS) dicampur relatif terhadap algoritma Levenberg-Marquardt dan algoritma NLS yang lebih khusus (lihat di sini , di sini , dan di sini ). Kinerja IPOPT relatif terhadap algoritma NLS, tentu saja, tergantung masalah. Mengingat umpan balik pengguna tersebut, IPOPT sepertinya merupakan rekomendasi yang masuk akal relatif terhadap algoritma NLS.
Namun, Anda menyatakan bahwa algoritma NLS harus diselidiki. Saya setuju. Saya hanya berpikir bahwa sebuah paket yang lebih modern dari MINPACK harus digunakan karena saya percaya itu akan berkinerja lebih baik, lebih bermanfaat, dan didukung. Ceres tampaknya seperti paket kandidat yang menarik, tetapi tidak dapat menangani masalah yang dibatasi saat ini. TAOakan bekerja pada masalah kuadrat-kotak terbatas, meskipun tidak mengimplementasikan Levenberg-Marquardt klasik, tetapi sebaliknya mengimplementasikan algoritma bebas-derivatif. Algoritma bebas derivatif mungkin akan bekerja dengan baik untuk masalah skala besar, tapi saya tidak akan menggunakannya untuk masalah skala kecil. Saya tidak dapat menemukan paket lain yang menginspirasi kepercayaan besar dalam rekayasa perangkat lunak mereka. Misalnya, GALAHAD tampaknya tidak menggunakan kontrol versi atau pengujian otomatis, sekilas. MINPACK sepertinya tidak melakukan hal-hal itu juga. Jika Anda memiliki pengalaman dengan MINPACK atau rekomendasi mengenai perangkat lunak yang lebih baik, saya akan mendengarkan.
Dengan semua itu dalam pikiran, kembali ke kutipan dari komentar saya:
Setiap sistem persamaan setara dengan masalah optimisasi, itulah mengapa metode berbasis Newton dalam optimasi sangat mirip dengan metode berbasis Newton untuk menyelesaikan sistem persamaan nonlinier.
Sebuah komentar yang lebih baik mungkin ada hubungannya dengan:
nng(x)=0
Pernyataan ini berlaku bahkan untuk memecahkan sistem persamaan di bawah kendala. Saya tidak tahu ada algoritma yang dianggap "pemecah persamaan" untuk kasus di mana ada kendala pada variabel. Pendekatan umum yang saya tahu, mungkin jaundice oleh beberapa semester kursus optimasi dan penelitian di laboratorium optimasi, adalah untuk memasukkan kendala pada sistem persamaan ke dalam formulasi optimasi. Jika Anda mencoba menggunakan batasan dalam skema mirip Newton-Raphson untuk penyelesaian persamaan, Anda mungkin akan berakhir dengan gradien yang diproyeksikan atau metode wilayah kepercayaan yang diproyeksikan, sama seperti metode yang digunakan dalam optimasi terbatas.
Jika sistem nonlinear yang diberikan adalah kondisi optimalitas urutan pertama untuk masalah optimasi, maka kita sering dapat menghasilkan algoritma yang lebih kuat dengan menggunakan informasi itu. Sebagai contoh, perhatikan persamaannya
Ini jelas memiliki minimum yang unik dan kami berharap metode optimasi kami menemukannya terlepas dari titik awal. Tetapi jika kita hanya melihat kondisi urutan optimalitas pertama, kami sedang mencari solusi dari [Wolfram Alpha]x ∇f(x)=0
yang memiliki solusi unik, tetapi banyak metode pencarian root bisa macet seminimal mungkin.
Jika kita merumuskan masalah optimasi baru untuk meminimalkan norma gradien kuadrat, kami sedang mencari global minimum dari [Wolfram Alpha] yang memiliki beberapa minimum lokal.x ∥∇f(x)∥2
Untuk meringkas, kami mulai dengan masalah optimisasi yang memiliki solusi unik yang kami dapat menjamin bahwa metode akan menemukan. Kami dirumuskan ulang sebagai masalah pencarian akar nonlinier yang memiliki solusi unik yang dapat kami identifikasi secara lokal, tetapi metode pencarian akar (seperti Newton) mungkin mandek sebelum mencapainya. Kami kemudian merumuskan kembali masalah pencarian root sebagai masalah optimisasi yang memiliki banyak solusi lokal (tidak ada ukuran lokal yang dapat digunakan untuk mengidentifikasi bahwa kami tidak pada tingkat minimum global).
Secara umum, setiap kali kami mengonversi masalah dari pengoptimalan ke penelusuran akar atau sebaliknya, kami membuat metode yang tersedia dan jaminan konvergensi terkait menjadi lebih lemah. Mekanik sebenarnya dari metode ini seringkali sangat mirip sehingga memungkinkan untuk menggunakan kembali banyak kode antara pemecah nonlinier dan optimisasi.
sumber