using Optim using BenchmarkTools rosenbrock(x) = (1.0 - x[1])^2 + 100.0 * (x[2] - x[1]^2)^2 x0 = zeros(2) method = BFGS() @btime optimize($rosenbrock, $x0, $method) method = NelderMead() @btime optimize($rosenbrock, $x0, $method) @btime optimize(rosenbrock, zeros(2), LBFGS()) @btime optimize(rosenbrock, zeros(2), LBFGS(); autodiff = :forward) # inplace function, which mutates an array passed by Optim function rosenbrock_gradient!(G, x) G[1] = -2.0 * (1.0 - x[1]) - 400.0 * (x[2] - x[1]^2) * x[1] G[2] = 200.0 * (x[2] - x[1]^2) end # check allocations @btime optimize(rosenbrock, rosenbrock_gradient!, zeros(2)) # this function allocates function rosenbrock_gradient(x) G = similar(x) G[1] = -2.0 * (1.0 - x[1]) - 400.0 * (x[2] - x[1]^2) * x[1] G[2] = 200.0 * (x[2] - x[1]^2) end # this version should have more allocations @btime optimize(rosenbrock, rosenbrock_gradient, zeros(2); inplace = false) versioninfo() println(now()) for i in 1:1000 optimize(rosenbrock, zeros(2), NelderMead()) end println(now()) Pkg.status("Optim")