Seperti yang dikatakan Paul, tanpa informasi lebih lanjut, sulit untuk memberikan saran tanpa asumsi.
Dengan 10-20 variabel dan evaluasi fungsi yang mahal, kecenderungannya adalah untuk merekomendasikan algoritme pengoptimalan bebas derivatif. Saya akan sangat tidak setuju dengan saran Paul: Anda biasanya memerlukan gradien presisi mesin kecuali jika Anda menggunakan semacam metode khusus (misalnya, penurunan gradien stokastik dalam pembelajaran mesin akan mengeksploitasi bentuk tujuan untuk menghasilkan yang masuk akal. estimasi gradien).
Setiap langkah kuasi-Newton akan berbentuk:
H~( xk) dk= - ∇ f( xk) ,
H~dkxkf∇ fxk + 1= xk+ αkdkαkadalah ukuran langkah yang ditentukan dalam beberapa mode (seperti pencarian baris). Anda dapat pergi dengan mendekati Goni dengan cara tertentu dan iterasi Anda akan bertemu, meskipun jika Anda menggunakan sesuatu seperti perkiraan perbedaan hingga Goni melalui gradien yang tepat, Anda mungkin menderita masalah karena pengondisian yang salah. Biasanya, Hessian diperkirakan menggunakan gradien (misalnya, metode tipe BFGS dengan pembaruan peringkat-1 ke Hessian).
Mendekati Hessian dan gradien keduanya melalui perbedaan hingga adalah ide yang buruk karena sejumlah alasan:
- Anda akan memiliki kesalahan dalam gradien, sehingga metode kuasi-Newton yang Anda terapkan mirip dengan menemukan akar dari fungsi berisik
- NN
- jika Anda memiliki kesalahan dalam gradien, Anda akan memiliki lebih banyak kesalahan dalam Goni Anda, yang merupakan masalah besar dalam hal pengkondisian sistem linear
- N2
Jadi untuk mendapatkan satu iterasi buruk dari quasi-Newton, Anda melakukan sesuatu seperti hingga 420 evaluasi fungsi pada 30 menit per evaluasi, yang berarti Anda akan menunggu beberapa saat untuk setiap iterasi, atau Anda akan perlu cluster besar hanya untuk evaluasi fungsi. Pemecahan linear aktual akan terdiri dari 20 dengan 20 matriks (paling banyak!), Jadi tidak ada alasan untuk memparalelkannya. Jika Anda bisa mendapatkan informasi gradien dengan, misalnya, menyelesaikan masalah adjoint, maka mungkin lebih bermanfaat, dalam hal ini, mungkin layak untuk melihat buku seperti Nocedal & Wright.
Jika Anda akan melakukan banyak evaluasi fungsi secara paralel, Anda harus melihat pendekatan pemodelan pengganti atau menghasilkan metode pencarian set sebelum mempertimbangkan pendekatan quasi-Newton. Artikel ulasan klasik adalah artikel oleh Rios dan Sahinidis tentang metode bebas turunan , yang diterbitkan pada tahun 2012 dan memberikan perbandingan luas yang sangat bagus; artikel pembandingan oleh More and Wild dari 2009; buku teks 2009 "Pengantar Optimalisasi Derivatif-Gratis" oleh Conn, Scheinberg, dan Vicente; dan artikel ulasan tentang menghasilkan metode pencarian kumpulan oleh Kolda, Lewis, dan Torczon dari tahun 2003.
Seperti yang ditautkan di atas, paket perangkat lunak DAKOTA akan mengimplementasikan beberapa metode tersebut, dan demikian juga NLOPT , yang mengimplementasikan DIRECT, dan beberapa metode pemodelan pengganti Powell. Anda mungkin juga melihat MCS ; itu ditulis dalam MATLAB, tapi mungkin Anda bisa port implementasi MATLAB ke bahasa pilihan Anda. Pada dasarnya DAKOTA merupakan kumpulan skrip yang dapat Anda gunakan untuk menjalankan simulasi mahal Anda dan mengumpulkan data untuk algoritme pengoptimalan, dan NLOPT memiliki antarmuka dalam sejumlah besar bahasa, jadi pilihan bahasa pemrograman seharusnya tidak menjadi masalah besar dalam menggunakan paket perangkat lunak mana pun; DAKOTA memang butuh waktu untuk belajar, dan memiliki sejumlah besar dokumentasi untuk disaring.