Saya perlu menemukan fungsi minimum. Membaca dokumen di http://docs.scipy.org/doc/scipy/reference/optimize.html Saya melihat bahwa ada beberapa algoritma yang melakukan hal yang sama, yaitu menemukan minimum. Bagaimana saya tahu yang mana yang harus saya pilih?
beberapa algoritma terdaftar
- Minimalkan fungsi menggunakan algoritma simpleks downhill.
- Minimalkan fungsi menggunakan algoritma BFGS.
- Minimalkan fungsi dengan algoritma gradien konjugasi nonlinear.
- Minimalkan fungsi f menggunakan metode Newton-CG.
- Minimalkan fungsi menggunakan metode Powell yang dimodifikasi.
Fungsi saya linear. dimensi adalah sekitar 232750 (ini adalah berapa banyak gradien berbeda yang harus saya hitung setiap kali), dibutuhkan sekitar 2 menit untuk menghitung gradien dan biaya sekali, jadi tidak murah. Saya rasa saya tidak memiliki kendala. itu deterministik dan berkelanjutan.
optimization
siamii
sumber
sumber
Jawaban:
Berdasarkan apa yang Anda katakan: Saya berasumsi Anda harus mengoptimalkan 50 variabel; Saya juga berasumsi bahwa Anda mengalami situasi yang sangat mahal untuk menemukan turunan analitik (apalagi mengeluarkan angka) dan optimasi Anda tidak dibatasi.
Biarkan saya tekankan, Anda sedikit tidak beruntung menyebabkan antara 25-30 dan 100 variabel itu adalah sedikit zona senja ketika datang untuk memilih antara rutinitas optimasi skala besar atau kecil. Karena itu, tidak ada yang hilang.
Mengingat bahwa turunan orde pertama sekalipun mahal untuk menghilangkan jenis itu dapat membunuh ide metode Newton. Anda mungkin memiliki sedikit keberuntungan dengan Quasi-Newton (BFGS) meskipun jika Goni Anda agak diagonal seperti memulai. CG biasanya sedikit lebih lambat dari BFGS jadi mungkin itu tidak akan banyak meningkatkan hal-hal; gunakan jika memori juga merupakan masalah (atau gunakan saja L-BFGS dalam kasus itu). Selain itu mengingat betapa lambatnya mengevaluasi fungsi Anda, algoritma pencarian garis / curam paling sederhana akan sangat lambat; hal yang sama berlaku dengan Simulated Annealing dan varian pencarian acak lainnya (saya berasumsi Anda tidak memiliki akses ke HMC dan semua jazz itu).
Jadi, ketika Anda membutuhkan bang terbaik untuk uang Anda ketika datang ke evaluasi fungsi tunggal: Pergilah dengan metode Powell dan juga tes COBYLA; meskipun merupakan algoritma optimasi terbatas karena akan linier secara internal memperkirakan gradien fungsi Anda untuk mempercepat, ia akan dapat memanfaatkan linearitas fungsi Anda. Pasti juga mencoba NLopt untuk Python . Mereka memiliki banyak pengoptimal bebas-gradien; coba UOBYQA; itu adalah gagasan Powell juga (Optimasi Tanpa Batas DENGAN Perkiraan Kuadratik).
Secara singkat: Algoritma N-CG tergantung pada komputasi Hessian, dan Hessian Anda tampaknya sangat mahal untuk dihitung. NLCG dan BFGS tidak memerlukannya meskipun mungkin mencoba untuk mencoba menghitungnya sekali pada langkah pertama mereka.
Saya sengaja mengabaikan algoritma simpleks karena ini adalah binatang yang sama sekali berbeda; tidak ada hubungannya dengan gradien seperti itu. Cobalah tetapi saya tidak bisa mengomentarinya; itu benar-benar tergantung pada sifat masalah Anda.
Untuk referensi pertama yang baik tentang pengoptimalan numerik Buku CTKelly, Metode Iteratif untuk Pengoptimalan akan membuat Anda cukup jauh, cukup baik.
sumber
Mungkin Anda harus mendapatkan sendiri buku pengantar tentang optimasi numerik. Anda harus mempertimbangkan fungsi Anda untuk memutuskan algoritma.
Di antara algoritma yang Anda sebutkan, perbedaan penting adalah apakah Jacobian atau Hessian diperlukan atau hanya fungsi itu sendiri.
Menimbang bahwa ini adalah situs tanya jawab statistik dan dengan demikian berkaitan dengan variabel acak: pastikan fungsi Anda deterministik dapat dievaluasi dengan cara yang menghasilkan hasil yang berkelanjutan di ruang pencarian.
sumber