
Kami terus mempelajari metode optimasi multidimensi, dan baris berikutnya adalah metode segerombolan partikel, yang mencari minimum global.
Teori
Algoritma ini cukup sederhana:

Posisi setiap partikel pada saat tertentu dihitung dengan rumus:
Dimana - mengoordinasikan solusi terbaik untuk partikel tertentu, - koordinat solusi terbaik untuk semua partikel untuk era ini, dan - faktor bobot (dipilih untuk model tertentu), Apakah koefisien inersia, dapat dibuat tergantung pada jumlah suatu era, maka kecepatan partikel akan berubah dengan lancar.
Fungsi tes
Karena sangat bagus untuk melihat kerja metode ini, kami akan mendapatkan lebih banyak fungsi pengujian:
Terselipparabol(x) = sum(u->u*u, x)
Dan, nyatanya, MRC itu sendiri:
function mdpso(; nparts = 50, ndimes = 2, ages = 50,
Namun, dengan gambar, perhitungannya lebih lama, tetapi lebih cantik:
using Plots pyplot() function ploter(l, u, xy, z, n_age ) contour(Xs, Ys, Zs, fill = true);

mdpso(C1 = [1.2 1.2], C2 = [1.1 1.1], Ac = [0.08 0.08], lower = [-4 -4], upper = [4 4], ages = 30)

fun = ekly mdpso(C1 = [1.7 1.7], C2 = [1.7 1.7], Ac = [0.07 0.07], lower = [-5 -5], upper = [5 5], ages = 15)


fun = himmelblau mdpso(C1 = [1.1 1.1], C2 = [1.0 1.0], Ac = [0.09 0.09], lower = [-5 -5], upper = [5 5], ages = 20, parts = 50)


fun = holdertable mdpso(C1 = [1.1 1.1], C2 = [1.0 1.0], Ac = [0.09 0.09], lower = [-10 -10], upper = [10 10], ages = 20, parts = 50)


fun = levy13 mdpso(C1 = [1.1 1.1], C2 = [1.0 1.0], Ac = [0.09 0.09], lower = [-10 -10], upper = [10 10], ages = 20, parts = 50)


fun = shaffer4 mdpso(C1 = [1.1 1.1], C2 = [1.0 1.0], Ac = [0.09 0.09], lower = [-100 -100], upper = [100 100], ages = 20, parts = 50)


Apa yang benar-benar tertekan adalah sibuk dengan parameter dan elemen keacakan: jika tidak ada partikel terbang di dekat minimum global, maka semua ini mungkin jatuh ke dalam lokal:
fun = rastrigin mdpso(mdpso(C1 = [0.1 0.1], C2 = [1 1], Ac = [0.08 0.08], lover = low, upper = up, ages = 30))


Ya, dan tua tidak terlalu Rosenbrock yang baik masih tidak memungkinkan untuk memahami dirinya sendiri:
fun = rosenbrok mdpso(C1 = [1.7 1.7], C2 = [1.5 1.5], Ac = [0.15 0.15], lover = low, upper = up, ages = 20, nparts = 50) ... Age № 20 xbest: 0.37796421341886866 0.12799160066705667 Fmin: 0.409026370833564


Tetapi seperti yang saya katakan sebelumnya, Anda dapat menggunakan FDM untuk mencari perkiraan yang baik ke minimum global, dan kemudian tentukan, katakanlah, Nelder-Mead:
Metode simpleks vecl(x) = sqrt( sum(u -> u*u, x) ) function sortcoord(Mx) N = size(Mx,2) f = [fun(Mx[:,i]) for i in 1:N]
ofNelderMid(fit = [0.37796 0.127992]) ... 92 0.00022610400555036366 [1.0, 1.0] 93 0.00015987967588703512 [1.0, 1.0] 94 0.00011305200343052599 [1.0, 1.0] 2-element Array{Float64,1}: 0.9999999996645973 0.9999999995466575
Untuk MFC klasik, tidak semuanya jelas dengan kriteria berhenti: titik terbaik dapat menahan posisi beberapa era, jarak antara beberapa partikel juga tidak dapat berubah untuk waktu yang lama. Oleh karena itu, batas jumlah era digunakan. Untuk meningkatkan peluang menemukan minimum global, perlu untuk meningkatkan jumlah partikel dan zaman, yang sangat mahal dalam hal memori dan, lebih lanjut, waktu (Tidak ada lelucon, 50 panggilan fungsi obyektif untuk setiap dimensi pada setiap iterasi).
Akhlak
- Jika Anda tidak ingin atau tidak dapat menggunakan metode yang kompleks dan modern, Anda dapat menggunakan komposisi metode yang lebih sederhana
- Sangat sering untuk masalah ada metode yang diasah secara sempit (misalnya, untuk fungsi jurang)
- Dianjurkan untuk memiliki beberapa MO yang berbeda untuk perbandingan yang konsisten.
- Tidak selalu mungkin untuk memasukkan tugas Anda ke dalam metode dan mendapatkan jawaban yang tepat segera - Anda harus menghabiskan waktu meneliti, memvariasikan parameter, jika Anda tidak dapat melihat bantuan, Anda setidaknya harus mencetak perhitungan menengah untuk melacak konvergensi.
Itu saja untuk hari ini, terima kasih atas perhatian Anda dan semoga Anda semua optimisasi yang baik!