Saya memutuskan untuk secara radikal mengedit jawaban saya berdasarkan beberapa komentar.
Saya belum pernah menggunakan TAO. Dari membaca dengan teliti dokumentasi, sepertinya satu-satunya cara TAO dapat menangani masalah optimisasi terbatas (tidak termasuk kasus khusus hanya kendala kotak) adalah untuk mengubah masalah menjadi ketidaksetaraan variasional menggunakan kondisi Karush-Kuhn-Tucker (KKT) , yang diperlukan di bawah kualifikasi kendala (tipe yang biasanya saya lihat adalah kondisi titik Slater ), dan cukup di bawah konveksitas tujuan dan kendala (lebih umum, tipe 1 inveksitas). Jikafadalah nonconvex, formulasi ketidaksetaraan variasional menggunakan kondisi KKT TIDAK setara dengan masalah optimisasi asli, jadi, jika Anda menginginkan optimal global untuk masalah optimasi, Anda tidak boleh menyatakannya sebagai ketidaksetaraan variasional. Akan sulit untuk menemukan optimum global pula untuk optimasi yang dibatasi oleh PDE (lihat di bawah), jadi mungkin mengabaikan detail ini baik-baik saja. Mengingat apa yang dikatakan Wolfgang, saya akan skeptis menggunakan TAO; Saya sudah skeptis karena tidak menerapkan metode untuk menyelesaikan program nonlinier (NLP) sebagai NLP, daripada ketidaksetaraan variasi.
Saya bukan ahli tentang optimasi yang dibatasi oleh PDE; rekan kerja dan rekan kerja tambang mengerjakan masalah optimisasi yang dibatasi ODE. Saya tahu bahwa untuk formulasi yang mengganggu, Larry Biegler (dan lainnya) akan menggunakan metode kolokasi untuk mendiskritasikan PDE dan menjadikannya NLP yang sangat besar dan jarang, dan kemudian ia akan menyelesaikannya menggunakan metode titik interior. Untuk benar-benar menyelesaikan masalah ke optimalitas global, Anda juga perlu menghasilkan relaksasi cembung, tetapi sejauh yang saya tahu, pendekatan ini tidak diambil karena masalah optimisasi yang dibatasi oleh PDE menyebabkan NLP yang besar sehingga akan sulit untuk menyelesaikannya. optimalitas global. Saya menyebutkan rincian ini hanya karena perumusan masalah sangat mempengaruhi pilihan paket solver. Untuk formulasi yang tidak mengganggu, PDE berulang memecahkan informasi gradien hasil untuk algoritma optimasi.
Beberapa orang yang mempelajari masalah optimasi ODE-menggunakan pendekatan yang sama dari diskritisasi masalah menggunakan kolokasi dan metode numerik, dan kemudian mengendurkan NLP yang dihasilkan untuk menghasilkan formulasi cembung yang digunakan dalam algoritma optimasi global. Pendekatan alternatif untuk optimasi yang dibatasi oleh ODE adalah untuk mengendurkan masalah, dan kemudian mendiskritisasi ODE, yang merupakan pendekatan yang diambil di lab saya. Mungkin saja untuk mengendurkan kelas tertentu dari masalah optimisasi terbatas PDE, tapi saya tidak tahu ada pekerjaan yang masih dilakukan pada masalah itu. (Itu adalah proyek potensial di lab saya pada satu titik.)
Pada akhirnya, yang penting bukanlah diferensiabilitas PDE asli, tetapi diferensiabilitas diskritisasi sehubungan dengan variabel keputusan.
Jika masalah yang didiskritkan dua kali dapat dibedakan sehubungan dengan variabel keputusan, paket berikut ini akan menghitung solusi lokal:
- IPOPT adalah pemecah titik interior open source yang dikembangkan oleh Andreas Wächter di IBM. Ini kode berkualitas sangat tinggi. Sebagai pemecah titik-interior, lebih baik untuk fungsi-fungsi objektif dengan matriks Jacobian yang besar dan jarang, dan akan berguna untuk optimasi yang dibatasi oleh PDE
- SNOPT adalah pemecah pemrograman kuadratik sekuensial komersial yang merupakan kode berkualitas tinggi lainnya. Itu lebih baik untuk fungsi objektif dengan matriks Jacobian yang kecil dan padat, jadi saya tidak berharap itu berguna untuk optimasi yang dibatasi oleh PDE, tetapi Anda bisa mencobanya.
- NLopt adalah kode sumber terbuka kecil yang ditulis oleh Steven Johnson di MIT yang berisi implementasi dasar dari sejumlah algoritma optimasi nonlinier. Semua algoritme harus memadai untuk menyelesaikan masalah yang terbatas.
fmincon
di Matlab mengimplementasikan sejumlah algoritma (termasuk titik interior dan pemrograman kuadratik berurutan) untuk optimasi nonlinier
- GAMS dan AMPL keduanya bahasa pemodelan komersial yang digunakan untuk merumuskan masalah optimasi, dan mengandung antarmuka untuk sejumlah besar pemecah pemrograman nonlinier. Saya tahu bahwa GAMS memiliki versi uji coba yang dapat digunakan untuk masalah yang lebih kecil, dan contoh masalah juga dapat dikirimkan ke server NEOS untuk mendapatkan solusi.
Namun, ada kemungkinan bahwa diskritisasi hanya sekali terdiferensiasi sehubungan dengan variabel keputusan, dalam hal ini, Anda harus menggunakan penurunan curam yang diproyeksikan atau metode optimasi tingkat pertama lainnya ketika menghitung solusi lokal. Karena banyak penelitian berfokus pada masalah di mana metode orde dua dapat digunakan (dan ketika Anda dapat menggunakannya, sifat konvergensi superiornya membuat mereka menjadi pilihan yang lebih baik), saya tidak dapat menemukan banyak implementasi penurunan paling curam yang bukan solusi untuk masalah pekerjaan rumah. The GNU Scientific Library memiliki implementasi, tapi itu hanya untuk tujuan demonstrasi. Anda mungkin perlu membuat kode implementasi Anda sendiri.
Jika masalahnya hanya terus menerus sehubungan dengan variabel keputusan, maka Anda dapat menggunakan metode langsung untuk menyelesaikannya secara lokal. Ada survei yang sangat baik tentang metode langsung oleh Kolda, Lewis, dan Torczon . Yang paling dikenal luas dari metode ini adalah algoritma simpleks Nelder-Mead . Ini tidak dijamin untuk menyatu dengan minimum lokal dalam berbagai dimensi, tetapi bagaimanapun juga telah menemukan penggunaan praktis yang cukup.
Pilihan paket benar-benar tergantung pada bahasa yang ingin Anda gunakan untuk menyelesaikan masalah, jika menyelesaikan masalah yang dibatasi hanya bagian dari algoritma yang ingin Anda implementasikan (atau jika itu satu-satunya langkah dalam algoritma Anda, dalam hal ini memodelkan bahasa menjadi lebih layak untuk kode produksi), jenis dan ukuran masalah, dan jika Anda memerlukan paralelisme.