Maksimalisasi global dari fungsi tujuan yang mahal


12

Saya tertarik secara global untuk memaksimalkan fungsi dari banyak ( ) parameter nyata (hasil dari simulasi yang kompleks). Namun, fungsi yang dimaksud relatif mahal untuk dievaluasi, membutuhkan sekitar 2 hari untuk setiap set parameter. Saya membandingkan opsi yang berbeda, dan bertanya-tanya apakah ada yang punya saran.30

Saya tahu ada serangkaian metode untuk proses semacam ini yang melibatkan pengembangan fungsi perkiraan dan kemudian memaksimalkannya (mis. Jones et al. "Efisien Global Optimasi Fungsi Kotak Hitam yang Mahal" ). Namun, ini tampaknya relatif terkait dengan kode.

Saya memang memiliki kemampuan untuk menjalankan sejumlah besar simulasi secara paralel (50+). Ini sepertinya menyarankan menggunakan sesuatu seperti algoritma genetika untuk melakukan optimasi ini - karena saya dapat membuat populasi kandidat solusi secepat saya bisa membuatnya.

Berikut adalah pertanyaan saya: 1) Apakah ada yang punya pengalaman dengan implementasi yang tersedia secara bebas dari jenis global solver / rekomendasi ini? 2) Apakah ada alasan untuk memilih atau menghindari algoritma genetika di sini?

Ini adalah masalah fisik, dan percobaan awal saya telah menunjukkan angka perubahan yang cukup baik saat saya mengubah parameter.

MEMPERBARUI:

Terima kasih atas bantuannya! Beberapa detail lagi: Saya tidak memerlukan informasi di luar lokasi maksimal. Simulasi itu deterministik, bukan Monte Carlo, sehingga kerumitan itu bukan masalah besar. Tidak ada batasan atau batasan eksplisit pada parameter. Satu informasi lain yang saya miliki (dan tidak saya sebutkan sebelumnya) adalah rasa ukuran maksimum yang diperlukan. Sementara saya mencari maksimum global, saya juga akan senang dengan apa pun dari skala ini atau lebih besar - saya tidak tahu apakah ini akan memberikan bantuan apa pun. Semoga jika saya melakukan penyaringan lebih sistematis (hypercubes Latin seperti yang disarankan oleh Brian Borchers), ini akan muncul.


Ketika Anda mengevaluasi fungsi tujuan, apakah itu menghasilkan informasi tambahan, khususnya. turunan (atau perkiraan) berkenaan dengan parameter? Karena fungsi objektif itu sendiri mahal untuk dihitung, mungkin saja perhitungan seperti itu perlu diperah untuk informasi tambahan.
hardmath

(Setahun kemudian), apa yang akhirnya Anda lakukan - memvariasikan beberapa dari 30 parameter, model ...?
denis

denis: Saya dapat menggunakan beberapa intuisi fisik (dan keberuntungan) untuk menebak parameter yang paling penting, dan kemudian memvariasikannya untuk mendapatkan hasil yang "cukup baik". (Dalam hal ini, menemukan optimum yang tepat tidak sepenting menemukan jawaban yang cukup besar.) Saya akhirnya tidak membutuhkan kekuatan penuh dari teknik-teknik ini, tetapi bagus untuk membuatnya berguna.
AJK

Memang ini 2 1/2 tahun yang lalu, tetapi apakah Anda memiliki pilihan tingkat akurasi dalam evaluasi fungsi tujuan Anda (simulasi deterministik), dan dapat menukar akurasi dengan waktu berjalan?
Mark L. Stone

Jawaban:


11

Algoritma genetika adalah pilihan yang sangat buruk ketika fungsi objektif sangat mahal untuk dievaluasi - metode ini membutuhkan banyak evaluasi fungsi di setiap generasi (yang dapat dibantu oleh paralelisme) dan banyak generasi (yang secara inheren berurutan.) Pada dua hari per generasi, ini akan sangat lambat.

Anda belum menyebutkan dari mana masalah ini berasal. Apakah Anda secara statistik menganalisis permukaan kemungkinan (dalam hal ini Anda akan menginginkan lebih dari sekedar parameter optimal dan nilai objektif) atau hanya mengoptimalkan fungsi tujuan?

Anda belum menyebutkan apakah penghitungan fungsi tujuan tepat atau tidak akurat. Sering kali ketika fungsi objektif dihitung dengan simulasi Monte Carlo, nilainya cukup berisik. Ini dapat menyesatkan banyak algoritma pengoptimalan. Metode permukaan respons membantu mengatasi masalah ini dengan menghaluskan kebisingan.

Anda belum menyebutkan kendala pada parameter. Apakah mereka terikat? Apakah ada batasan linear atau nonlinear di antara parameter?

Kemungkinannya adalah sebagian besar dari 30 parameter Anda tidak terlalu penting untuk masalah tersebut. Saya akan menyarankan menggunakan pendekatan penyaringan desain eksperimental untuk pertama-tama menentukan mana dari 30 parameter yang benar-benar penting dalam optimasi, dan kemudian setelah menetapkan nilai yang wajar untuk parameter yang tidak penting dioptimalkan pada parameter penting. Metode seperti Latin Hypercube Sampling bisa sangat membantu dalam menyaring parameter yang relatif tidak penting. Pada tahap penyaringan ini Anda dapat dengan mudah menggunakan ratusan prosesor.

Setelah mengurangi jumlah parameter ke ukuran yang lebih masuk akal, saya akan menggunakan metode permukaan respons untuk mengoptimalkan parameter yang tersisa. Jika permukaan respons benar-benar multi-modal, dan Anda menggunakan model permukaan respons yang terlalu sederhana (biasanya orang hanya cocok dengan model kuadratik) maka Anda dapat dengan mudah menyesatkan dan kehilangan maksimum global. Hati-hati! Pada tahap ini Anda dapat kembali menggunakan banyak prosesor dengan menggunakan desain eksperimental yang memberikan cakupan ruang parameter yang sangat baik. Cari titik desain di mana model yang dipasang jauh dari nilai yang dihitung - ini merupakan indikasi bahwa permukaan respons tidak berfungsi dengan baik di wilayah itu. Anda mungkin harus membuat permukaan respons di wilayah terpisah dari ruang parameter.

Sebagai langkah terakhir, Anda bisa mulai dengan parameter dari optimasi permukaan respons Anda dan mencoba untuk meningkatkan nilai-nilai parameter yang disaring dengan menyesuaikannya satu per satu (koordinat penurunan.)

Saya akan merekomendasikan rekomendasi DAKOTA sebagai kerangka kerja untuk optimasi semacam ini. Jika Anda akan melakukan pengoptimalan ini hanya sekali saja maka mungkin akan lebih mudah untuk mengatur perhitungan dengan tangan, tetapi jika Anda akan melakukannya berulang kali, maka DAKOTA akan sangat membantu.


4
  1. Saya tidak punya pengalaman dengan pemecah masalah semacam ini; beberapa rekan kerja saya telah menggunakannya. DAKOTA tampaknya merupakan paket perangkat lunak yang direkomendasikan untuk tugas-tugas semacam ini. Ini termasuk antarmuka yang memungkinkan pengguna untuk berulang kali mengirimkan pekerjaan ke antrian pengiriman dan menggunakan output untuk studi parameter, analisis sensitivitas, dll. Saya tidak cukup akrab dengannya untuk mengetahui apakah akan mengambil keuntungan dari menjalankan banyak simulasi atau tidak serentak.

  2. Dengan asumsi bahwa parameter Anda kontinu, jika angka jasa berubah lancar saat parameter berubah, maka model pengganti harus melakukan pekerjaan yang wajar untuk menyesuaikan angka jasa, dan informasi turunan pengganti harus membantu untuk menyempurnakan konvergensi. Untuk 30 parameter, metode optimisasi bebas derivatif deterministik juga bermanfaat; di sana lagi, kelancaran akan membantu. Sebaliknya, algoritma genetika tidak akan menggunakan informasi turunan sama sekali, dan seringkali memerlukan penyetelan parameter seperti tingkat mutasi, laju rekombinasi, dan parameter pemilihan untuk mencapai kinerja yang baik. Sebagai pilihan algoritmik, saya akan menggunakan algoritma genetika sebagai fallback, karena saya berharap optimasi pengganti yang dirancang dengan baik atau metode optimisasi bebas derivatif deterministik memiliki perilaku konvergensi yang lebih baik.


Beberapa alasan yang menggunakan metode optimisasi bebas derivatif deterministik mungkin tidak bijaksana. Pertama, ini adalah metode pencarian lokal yang mungkin akhirnya menemukan maksimum lokal dan kehilangan titik yang jauh lebih baik di tempat lain di ruang parameter. Kedua, metode ini biasanya membutuhkan banyak iterasi dengan evaluasi fungsi yang relatif sedikit per iterasi, sehingga tidak paralel dengan baik.
Brian Borchers

Anda benar tentang metode pencarian lokal. Ada metode pencarian global (DIRECT, cabang-dan-terikat, pencarian koordinat bertingkat) yang tidak membangun model pengganti dan harus berperilaku lebih baik daripada metode pencarian lokal. Saya tidak dapat berbicara tentang kemanjuran memparalelkan metode ini.
Geoff Oxberry

1

Lihatlah TOMLAB, DAKOTA, dan OpenMDAO untuk optimasi kotak hitam.


Sunting # 3: Optimasi Bayesian sangat mirip dengan EGO:

https://github.com/mwhoffman/pybo

https://github.com/hyperopt/hyperopt

lisensi terbatas:

https://github.com/rmcantin/bayesopt

https://github.com/HIPS/Spearmint


Edit # 2:

Pendekatan pertama adalah membangun metamodel / pengganti (menggunakan kriging / GP) di sekitar fungsi mahal dan menggunakan informasi tambahan ini untuk menemukan titik optimal global lebih cepat dan dengan lebih sedikit evaluasi (EGO).

Pendekatan kedua seperti dalam MDAS, adalah melakukan pencarian langsung dengan beberapa adaptasi pintar pada berbagai tingkatan.

Pendekatan heuristik bersifat genetik / acak dan tanpa jaminan.


Edit # 1:

TOMLAB adalah alat berbasis MATLAB yang memiliki kecepatan / kualitas optimalisasi terbaik menurut kertas Sahinidis. Tetapi ini adalah alat komersial dengan penggunaan korporat yang signifikan. Saya tidak menggunakan ini.

DAKOTA lebih disesuaikan untuk Kuantifikasi Ketidakpastian, selain optimasi umum. Berdasarkan c ++ dan beberapa kode Fortran yang lama. Meskipun di bawah lisensi LGPL dan binari tersedia untuk diunduh, sangat sulit untuk mengkompilasi ulang setidaknya dari pengalaman saya di Win7 dengan GCC atau MSVS / ifort. Memiliki dependensi pada boost, lapack, cmake untuk build. Pada dasarnya ini adalah pembungkus untuk banyak pemecah open source dan beberapa yang komersial. Ini adalah produk SNL dan terintegrasi dengan proyek-proyek lain dari Sandia NL. Saya berhasil mengintegrasikan yang ini daripada beberapa rutinitas IMSL. Makalah Sahinidis merindukan paralelisme masif yang dimungkinkan oleh DAKOTA.

OpenMDAO adalah perangkat lunak desain berbasis optimasi yang dikembangkan di Python oleh NASA di bawah Lisensi APACHE. Saya mencoba ini saat ini.


Selamat datang di SciComp! Seperti yang ditulis saat ini, posting Anda tidak benar-benar menjelaskan mengapa melihat TOMLAB atau OpenMDAO akan menjadi ide yang baik (jawaban lain sudah membahas DAKOTA). Kami mencari jawaban yang tidak hanya memberikan rekomendasi, tetapi juga mendiskusikan mengapa rekomendasi itu berguna, potensi jebakan, dan sebagainya.
Geoff Oxberry

Saya bergegas dengan jawaban saya terlebih dahulu dan sekarang saya menambahkan penjelasan.
denfromufa

0

Jika Anda tidak mampu membeli 30 berjalan, masing-masing memvariasikan satu parameter, memvariasikannya dalam kelompok:
misalnya, 8 menjalankan masing-masing memvariasikan 4 parameter bersama-sama, kemudian memperbaiki 2 run / 8 parameter terbaik ...
(Saya tidak tahu bagaimana cara menukar info gain vs total runtime; bandit multi-bersenjata ?)


-3

Berikut ini adalah kode yang memungkinkan untuk mengoptimalkan fungsi kotak hitam yang mahal secara efisien menggunakan CPU multicore.

Deskripsi matematika di balik kode diberikan di sini .


1
Ini adalah jawaban yang sama yang Anda berikan di pos ini . Juga, tampaknya ini adalah pekerjaan Anda sendiri. Jika itu benar, sebutkan jawaban Anda secara eksplisit.
nicoguaro

Bisakah Anda memberikan detail tentang pendekatan yang dijelaskan dalam makalah dan diimplementasikan dalam perangkat lunak? Apa metode yang digunakan? Mengapa ini bagus? Apa yang disediakan dalam pendekatan ini yang tidak dicakup oleh jawaban lain?
nicoguaro

1
Juga, tolong sebutkan bahwa Anda adalah pembuat perangkat lunak ini , jadi siapa pun yang membaca ini akan menyadari bahwa Anda a) tahu apa yang Anda bicarakan dan b) mungkin agak parsial.
Christian Clason
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.