Saya mencoba menerapkan algoritma Nelder-Mead untuk mengoptimalkan fungsi. The wikipedia Halaman tentang Nelder-Mead adalah mengejutkan jelas tentang seluruh algoritma, kecuali untuk kriteria penghentian. Di sana dikatakan dengan sedih:
Periksa konvergensi [klarifikasi diperlukan] .
Saya mencoba dan menguji beberapa kriteria sendiri:
Berhenti jika mana kecil dan di mana adalah th titik dari simplex, memerintahkan dari rendah ( ) ke tinggi ( ) nilai fungsi. Dengan kata lain, ketika nilai maksimum simpleks hampir sama dengan nilai minimum. Saya menemukan ini tidak berfungsi dengan baik, karena ini tidak memberikan jaminan tentang apa fungsi tidak di dalam simpleks. Contoh, pertimbangkan fungsi: Ini tentu saja sepele untuk dioptimalkan, tetapi katakanlah kita melakukan ini dengan NM, dan biarkan dua titik simpleks kita menjadi dan
. Algoritma akan bertemu di sini tanpa menemukan yang optimal.Opsi kedua melibatkan mengevaluasi centroid simpleks: berhenti jika . Ini mengasumsikan bahwa jika titik terendah simpleks dan centroid memiliki nilai yang sama, simpleks cukup kecil untuk memanggil konvergensi.
Apakah ini cara yang tepat untuk memeriksa konvergensi? Atau adakah cara yang mapan untuk memeriksa ini? Saya tidak dapat menemukan sumber apa pun tentang ini, karena sebagian besar pencarian-hit berfokus pada kompleksitas algoritma.
Jawaban:
Akun "algoritma downhill simplex" ini dalam versi asli Numerical Recipes sangat jelas dan bermanfaat. Karena itu saya akan mengutip bagian yang relevan dari itu. Inilah latar belakangnya:
Sekarang untuk masalah yang ada, mengakhiri algoritma. Perhatikan umum dari account: penulis memberikan saran intuitif dan berguna untuk mengakhiri setiap optimizer multidimensi dan kemudian menunjukkan khusus bagaimana itu berlaku untuk algoritma tertentu. Paragraf pertama menjawab pertanyaan di depan kita:
[Halaman 290-292.]
Kode yang menyertai teks ini dalam Numerical Recipes mengklarifikasi arti "fraksional lebih kecil": perbedaan antara nilai dan (baik nilai argumen atau nilai fungsi) adalah "fraksional lebih kecil" daripada ambang batas saatx y T>0
dengan .f(x,y)=(|x|+|y|)/2
Sisi kiri kadang-kadang dikenal sebagai "perbedaan absolut relatif." Di beberapa bidang itu dinyatakan sebagai persen, di mana ia disebut "kesalahan relatif persen." Lihat artikel Wikipedia tentang perubahan dan perbedaan relatif untuk lebih banyak opsi dan terminologi.(1)
Referensi
William H. Press et al. , Resep Numerik: Seni Komputasi Ilmiah. Cambridge University Press (1986). Kunjungi http://numerical.recipes/ untuk edisi terbaru.
sumber
Bukan jawaban yang lengkap, tetapi terlalu lama untuk komentar dan mungkin menempatkan Anda di jalur yang benar.
Topik ini dibahas secara singkat pada halaman 171 dari "Metode Numerik Ringkas untuk Komputer" 2nd Ed., Oleh John C. Nash. Dan kebetulan menjadi referensi yang dikutip untuk rutin Nelder-Mead diimplementasikan dalam
optim()
fungsi R. Mengutip bagian yang relevan:Saya akan menyela untuk memperjelas bahwa Adalah fungsi yang diperkecil, adalah titik yang menentukan simpleks -dimensi; titik dengan nilai fungsi tertinggi adalah dan titik dengan nilai fungsi terendah adalah . Nash melanjutkan:S(.) b n+1 n bH bL
Pandangan cepat pada sumber
optim()
mengindikasikan bahwa ia menggunakan perbedaan antara nilai fungsi tertinggi dan terendah (dari titik yang mendefinisikan simpleks) untuk menentukan konvergensi:if (VH <= VL + convtol || VL <= abstol) break;
Di manaVH
nilai tinggi danVL
nilai rendah. Ini datang dengan peringatan bahwa saya melihat sumbernya dengan sangat cepat, dan saya mungkin kehilangan sesuatu.Sekarang, pilihan Anda (1) tampaknya merupakan pendekatan kedua yang dianjurkan oleh Nash. Dia juga membahas masalah yang Anda temui:
Referensi asli yang dirujuk Nash di sini adalah:
Nelder JA, Mead R. 1965. Metode simpleks untuk meminimalkan fungsi. Jurnal Komputer 7: 308-313.
O'Neill R. 1971. Algoritma AS 47: Minimalisasi fungsi menggunakan prosedur simpleks. Statistik Terapan 20: 338-345.
sumber
Seorang lelaki: melacak hanya sudut terendah dengan aturan berhenti "sabar" :
Memantau semua sudut jelas berguna dalam memeriksa skala koordinat yang masuk akal, kendala, simpleks awal NM. Apakah melacak semua sudut dapat meningkatkan kombinasin+1
masih harus dilihat - kasus uji nyata diterima.
(Kelas nyata
Stopiter
memiliki banyak kondisi berhenti, di sampingpatience
; paling sederhana adalah waktu jam dinding.)Lihat juga:
NLopt : banyak algoritma termasuk Nelder-Mead, mudah untuk dibandingkan. Lihat terutama catatan tentang Membandingkan algoritma
Downhill : kesabaran berhenti
min_improvement
sumber