Saya mencari untuk memecahkan masalah optimasi terbatas di mana saya tahu batas-batas pada beberapa variabel (khususnya kendala kotak).
tunduk pada
di mana adalah vektor variabel desain, adalah vektor variabel keadaan, dan adalah kendala kesetaraan (biasanya PDE). Batasan bawah dan atas dan dapat bervariasi secara spasial.x c ( u , x ) a b
Paket mana yang dapat menangani sistem formulir ini?
pde
optimization
nonlinear-programming
Sean Farley
sumber
sumber
Jawaban:
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). Jikaf adalah 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:
fmincon
di Matlab mengimplementasikan sejumlah algoritma (termasuk titik interior dan pemrograman kuadratik berurutan) untuk optimasi nonlinierNamun, 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.
sumber
Kami telah mencoba TAO tetapi ternyata tidak terlalu berguna untuk masalah-masalah yang membatasi ketimpangan. Ini juga pada dasarnya hanya dalam mode pemeliharaan setidaknya sejak tahun 2003, tanpa fitur baru yang nyata selain dari pembaruan untuk melacak perubahan dalam PETSc di mana ia dibangun.
sumber
Alternatif lain adalah OPT ++ . Ini mendukung kendala linier dan nonlinier dengan pemecah titik interior nonlinier yang efisien, memberikan kontrol untuk akurasi fungsi (jika diperlukan pembedaan numerik), kontrol untuk ukuran langkah, dll. Saya biasanya mengoptimalkan fungsi implisit besar (misalnya FEM) di mana jenis kontrol dapat bermanfaat.
sumber
Jika masalah dirumuskan sebagai masalah saling melengkapi, Anda dapat menggunakan TAO (Toolkit untuk Pengoptimalan Lanjutan). Beberapa metode dalam TAO, seperti metode ruang direduksi (varian dari metode set aktif), saat ini tersedia sebagai bagian dari SNES di PETSc ( SNESVI ).
sumber
Saya tidak berpikir MINUTE akan bekerja dengan baik untuk kebutuhan Anda, tetapi perubahannya mungkin jika Anda dipaksa untuk menulis sendiri beberapa atau semua kode.
sumber
Seperti yang ditunjukkan @Geoff Oxberry, beberapa paket memungkinkan Anda menemukan solusi lokal. Jika Anda ingin dapat membandingkan pemecah NLP yang berbeda ini untuk masalah yang sama, Anda dapat menggunakan RobOptim .
Meskipun RobOptim awalnya dikembangkan dengan masalah optimasi robotika dalam pikiran, ini cocok untuk masalah optimasi nonlinier. Ini menyediakan antarmuka C ++ sederhana dengan plugin untuk beberapa pemecah NLP (mis. Ipopt, NAG). Jika Anda tidak dapat memberikan gradien, perhitungan beda hingga dapat dilakukan secara otomatis.
Ini open source sehingga Anda dapat memeriksa kode sumber di GitHub: https://github.com/roboptim/
Catatan: Saya salah satu pengembang proyek ini.
sumber
Berikut adalah sebagian daftar paket optimasi yang dibatasi oleh PDE.
Dolfin Adjoint adalah bagian dari FEniCS FEM:
http://dolfin-adjoint.org/
ROL, MOOCHO, Sundance adalah bagian dari Trilinos:
https://github.com/trilinos/trilinos/tree/master/packages/rol/
https://github.com/trilinos/trilinos/tree/master/packages/Sundance/
http://trilinos.org/packages/moocho/
Contoh PYOMO untuk optimasi terbatas-PDE:
https://software.sandia.gov/trac/pyomo/browser/pyomo/trunk/examples/dae
Manual TAO memberikan contoh penyelesaian masalah optimasi yang dibatasi oleh PDE:
http://www.mcs.anl.gov/petsc/petsc-3.5/docs/tao_manual.pdf
sumber
Paket APM MATLAB dan APM Python dapat menyelesaikan skala besar (100.000+ variabel) dari sistem persamaan Aljabar Gabungan Diferensial Campuran-Integer. Perangkat lunak ini tersedia sebagai layanan web untuk penggunaan komersial atau akademik. Jika Anda memecahkan sistem PDE, Anda bisa diskresi sekali untuk memasukkannya ke dalam bentuk DAE atau ODE untuk memasukkannya ke dalam bahasa pemodelan APMonitor. Bahasa pemodelan menggunakan pemecah APOPT , BPOPT, IPOPT, SNOPT, dan MINOS.
sumber