
Metode penurunan koordinat-bijaksana adalah salah satu metode paling sederhana dari optimasi multidimensi dan melakukan pekerjaan yang baik untuk menemukan fungsi minimum lokal dengan topografi yang relatif halus, sehingga lebih baik untuk mulai membiasakan diri dengan metode optimasi dari itu.
Pencarian ekstrem dilakukan ke arah sumbu koordinat, mis. selama proses pencarian, hanya satu koordinat yang diubah. Dengan demikian, masalah multidimensi berkurang menjadi satu dimensi.
Algoritma
Siklus pertama:
- , , ... .
- Mencari fungsi ekstrem . Letakkan ekstrem fungsi pada titik .
- , , ... . Fungsi ekstremum sama dengan
- ...
- , , ... .
Sebagai hasil dari melakukan n langkah, titik pendekatan baru untuk ekstrem ditemukan . Selanjutnya, kami memeriksa kriteria untuk akhir akun: jika terpenuhi, solusinya ditemukan, jika tidak kami melakukan siklus lain.
Persiapan
Periksa versi paket:
(v1.1) pkg> status Status `C:\Users\User\.julia\environments\v1.1\Project.toml` [336ed68f] CSV v0.4.3 [a93c6f00] DataFrames v0.17.1 [7073ff75] IJulia v1.16.0 [47be7bcc] ORCA v0.2.1 [58dd65bb] Plotly v0.2.0 [f0f68f2c] PlotlyJS v0.12.3 [91a5bcdd] Plots v0.23.0 [ce6b1742] RDatasets v0.6.1 [90137ffa] StaticArrays v0.10.2 [8bb1440f] DelimitedFiles [10745b16] Statistics
Kami mendefinisikan fungsi untuk menggambar garis permukaan atau level di mana akan lebih mudah untuk menyesuaikan batas-batas grafik:
using Plots plotly()
Sebagai fungsi model, kami memilih paraboloid elips
parabol(x) = sum(u->u*u, x) fun = parabol plotter(surface, low = [-1 -1], up = [1 1])

Koordinasikan keturunan
Kami menerapkan metode dalam fungsi yang mengambil nama metode optimasi satu dimensi, dimensi masalah, kesalahan yang diinginkan, perkiraan awal, dan batasan untuk menggambar garis level. Semua parameter diatur ke nilai default.
function ofDescent(odm; ndimes = 2, ε = 1e-4, fit = [.5 .5], low = [-1 -1], up = [1 1]) k = 1
Selanjutnya, kita akan mencoba berbagai metode optimasi satu dimensi.
Metode Newton
Gagasan metode ini sederhana seperti implementasinya

Newton cukup menuntut pada perkiraan awal, dan tanpa batasan pada langkah-langkah, ia dapat dengan mudah naik ke jarak yang tidak diketahui. Perhitungan turunan diinginkan, tetapi variasi kecil dapat ditiadakan. Kami memodifikasi fungsi kami:
function newton(i, fit, ϵ) k = 1 oldfit = Inf x = [] y = [] push!(x, fit[1]) push!(y, fit[2]) while ( abs(oldfit - fit[i]) > ϵ && k<50 ) fx = fun(fit) oldfit = fit[i] fit[i] += 0.01 dfx = fun(fit) fit[i] -= 0.01 tryfit = fx*0.01 / (dfx-fx)

Interpolasi parabola terbalik
Suatu metode yang tidak memerlukan pengetahuan tentang turunan dan memiliki konvergensi yang baik
function ipi(i, fit, ϵ)

Jika kita memperparah perkiraan awal, metode ini akan mulai membutuhkan sejumlah besar langkah untuk setiap era penurunan koordinat. Dalam hal ini, saudaranya menang
Interpolasi Parabola Sekuensial
Ini juga membutuhkan tiga titik awal , tetapi pada banyak fungsi tes ini menunjukkan hasil yang lebih memuaskan.
function spi(i, fit, ϵ)

Melangkah keluar dari titik awal yang sangat buruk terjadi dalam tiga langkah! Bagus ... Tetapi semua metode memiliki kelemahan - mereka bertemu ke minimum lokal. Sekarang mari kita ambil fungsi Ackley untuk penelitian
ekly(x) = -20exp(-0.2sqrt(0.5(x[1]*x[1]+x[2]*x[2]))) - exp(0.5(cospi(2x[1])+cospi(2x[2]))) + 20 + ℯ


ofDescent(spi, fit = [1.4 1.4], low = [-.1 -.1], up = [2.4 2.4])

Metode Rasio Emas
Teori Meskipun implementasinya rumit, metode ini terkadang menunjukkan dirinya dengan baik dengan melompati minima lokal
function interval(i, fit, st) d = 0. ab = zeros(2) fitc = copy(fit) ab[1] = fitc[i] Fa = fun(fitc) fitc[i] -= st Fdx = fun(fitc) fitc[i] += st if Fdx < Fa st = -st end fitc[i] += st ab[2] = fitc[i] Fb = fun(fitc) while Fb < Fa d = ab[1] ab[1] = ab[2] Fa = Fb fitc[i] += st ab[2] = fitc[i] Fb = fun(fitc)

Itu semua dengan keturunan koordinat. Algoritma dari metode yang disajikan cukup sederhana, jadi menerapkannya dalam bahasa pilihan Anda tidak sulit. Di masa depan, Anda dapat mempertimbangkan alat bawaan dari bahasa Julia , tetapi untuk sekarang, Anda ingin menyentuh segalanya, sehingga untuk berbicara, dengan tangan Anda, pertimbangkan metode yang lebih rumit dan lebih efisien, maka Anda dapat pergi ke optimasi global, secara bersamaan membandingkan dengan implementasi dalam bahasa lain.
Sastra
- Zaitsev V.V. Metode numerik untuk fisikawan. Persamaan dan optimisasi nonlinier: tutorial. - Samara, 2005 - 86-an.
- Ivanov A.V. Metode komputer untuk mengoptimalkan sistem optik. Panduan belajar. –SPb: SPbSU ITMO, 2010 - 114s.
- Popova T. M. Metode optimasi multidimensi: pedoman dan tugas untuk pekerjaan laboratorium dalam disiplin "Metode optimasi" untuk siswa dari arah "Matematika Terapan" / comp. T. M. Popova. - Khabarovsk: Rumah Penerbitan Pasifik. negara University, 2012 .--44 hal.