/NelderMead.jl

Pure Julia Nelder Mead optimisation

Primary LanguageJuliaMIT LicenseMIT

CI codecov

NelderMead.jl

Pure Julia Nelder Mead optimisation

using NelderMead, CairoMakie

xs, ys, zs, vs = Float64[], Float64[], Float64[], Float64[]

function rosenbrock(x)
  output = (1 - x[1])^2 + 100 * (x[2] - x[1]^2)^2
  output += (1 - x[2])^2 + 100 * (x[3] - x[2]^2)^2
  push!(xs, x[1]); push!(ys, x[2]); push!(zs, x[3]); push!(vs, output)
  return output
end

result = NelderMead.optimise(rosenbrock, zeros(3), ones(3) ./ 10)
position, minvalue, returncode, iters, simplex = result

fig, ax, scat = scatter(0 .* xs .+ 1.2, ys, zs, color=:grey, alpha=0.5,
                        axis=(;type=Axis3))
scatter!(xs, 0 .* ys .+ 1.2, zs, color=:grey, alpha=0.5)
scatter!(xs, ys, 0 .* zs .- 0.2, color=:grey, alpha=0.5)
scatter!(xs, ys, zs, color=log10.(vs))
limits!(ax, -0.2, 1.2, -0.2, 1.2, -0.2, 1.2)

save("Rosenbrock3D.png", fig)

NelderMead jl