Saya ingin menyarankan pendekatan yang agak berbeda dibandingkan dengan jawaban lain, meskipun @barron secara tidak langsung membahas hal yang sama.
Alih-alih mengoptimalkan fungsi Anda secara langsung, yaitu dengan mengevaluasinya pada serangkaian poin poin yang (semoga) menyatu dengan (lokal) optimal, Anda bisa menggunakan konsep , yang sangat cocok untuk masalah tipe yang Anda gambarkan (biaya tinggi, halus, terbatas, berdimensi rendah yaitu kurang dari 20 yang tidak diketahui).sebagai pemodelan penggantix1, x2, ... , xkpemodelan pengganti
Secara khusus, pemodelan pengganti bekerja dengan mengatur fungsi model dari fungsi Anda yang sebenarnya . Kuncinya adalah bahwa walaupun tentu saja tidak sepenuhnya mewakili , jauh lebih murah untuk mengevaluasi. f ∈ R d → R c fc∈Rd→Rf∈Rd→Rcf
Jadi, proses pengoptimalan yang khas adalah sebagai berikut:
- Evaluasi pada set poin awal . Perhatikan bahwa turunan tidak diperlukan. Perhatikan juga bahwa titik-titik ini harus didistribusikan secara merata di seluruh ruang pencarian, misalnya dengan Latin Hypercube Sampling atau desain pengisian ruang yang serupa.j x 1 , x 2 , … , x jfjx1,x2,…,xj
- Berdasarkan dataset asli ini, buat fungsi model . Anda dapat menggunakan validasi silang untuk memvalidasi model Anda (yaitu, gunakan hanya sebagian dari titik asli untuk membuat , dan kemudian gunakan sisa dataset untuk memeriksa seberapa baik memprediksi nilai-nilai itu)j c ccjcc
- Gunakan kriteria seperti kriteria Expected Improvement (EI) untuk mencari tahu di mana '' mengisi 'lebih banyak sampel untuk membuat lebih akurat dengan pengambilan sampel . Ini sebenarnya jauh lebih baik dipelajari secara teoritis daripada yang mungkin terlihat, dan kriteria EI diteliti dengan sangat baik. Kriteria EI juga bukan kriteria serakah, sehingga Anda berdua mendapatkan peningkatan keseluruhan yang baik dari akurasi model, sementara memprioritaskan akurasi dekat potensi optima.fcf
- Jika model Anda tidak cukup akurat, ulangi langkah 3, jika tidak gunakan rutin optimasi favorit Anda untuk menemukan yang optimal , yang akan sangat murah untuk dievaluasi (sehingga Anda dapat menggunakan rutin apa pun yang Anda inginkan, bahkan yang membutuhkan turunan, atau hanya mengevaluasi fungsi dalam fine mesh).c
Secara umum, inilah yang dimaksud dengan EGO, Efficient Global Optimization, seperti yang disarankan @barron. Saya ingin menekankan bahwa untuk aplikasi Anda, ini tampaknya sangat cocok - Anda mendapatkan model yang sangat akurat berdasarkan evaluasi relatif sedikit , dan kemudian dapat menggunakan algoritma pengoptimalan yang Anda inginkan. Apa yang sering juga menarik adalah bahwa Anda sekarang dapat mengevaluasi pada mesh dan plot itu, sehingga mendapatkan wawasan tentang penampilan umum . Hal lain yang menarik adalah bahwa kebanyakan teknik pemodelan pengganti juga memberikan perkiraan kesalahan statistik, sehingga memungkinkan estimasi ketidakpastian.c ffcf
Bagaimana membangun tentu saja merupakan pertanyaan terbuka, tetapi sering kali Kriging atau yang disebut model pemetaan ruang digunakan.c
Tentu saja, ini semua sedikit pekerjaan pengkodean, tetapi banyak orang lain telah melakukan implementasi yang sangat baik. Di Matlab, saya hanya tahu DACE toolbox perangkat lunak gratis. TOMLAB mungkin juga menawarkan paket Matlab, tetapi membutuhkan biaya - namun, saya percaya itu juga bekerja di C ++ dan memiliki kemampuan yang jauh lebih banyak daripada yang pernah dimiliki DACE. (Catatan: Saya adalah salah satu pengembang DACE versi baru, yang akan segera dirilis, yang akan menawarkan dukungan tambahan untuk EGO.)
Semoga gambaran umum yang kasar ini membantu Anda, ajukan pertanyaan jika ada poin yang dapat dibuat lebih jelas atau hal-hal yang saya lewatkan, atau jika Anda ingin materi lebih lanjut tentang masalah ini.