# Downhill.jl

A collection of descent-based optimization methods.

The package is meant to be used for small-scale optimization problems. The use case is the problems where an optimization is some intermediate step that has to be run repeatedly.

## Basic usage

```
julia> function rosenbrock!(x::AbstractVector, g::AbstractVector; b=100)
f = zero(eltype(g))
fill!(g, 0)
inds = eachindex(x, g)
for i in 2:last(inds)
f += (1 - x[i-1])^2 + b * (x[i] - x[i-1]^2)^2
g[i-1] += 2 * (x[i-1] - 1) + 4 * b * x[i-1] * (x[i-1]^2 - x[i])
g[i] += 2 * b * (x[i] - x[i-1]^2)
end
return f, g
end
julia> let x0 = zeros(2)
opt = BFGS(x0)
optresult = optimize!(rosenbrock!, opt, x0)
optresult.argument
end
2-element Vector{Float64}:
0.9999999998907124
0.9999999998080589
```