Skip to content

Commit

Permalink
Add shortcut versions of optimize for Fminbox, and update documentati…
Browse files Browse the repository at this point in the history
…on. (#450)
  • Loading branch information
pkofod committed Jul 23, 2017
1 parent bb5cc12 commit c4e0116
Show file tree
Hide file tree
Showing 2 changed files with 31 additions and 3 deletions.
9 changes: 6 additions & 3 deletions docs/src/user/minimization.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ A primal interior-point algorithm for simple "box" constraints (lower and upper
lower = [1.25, -2.1]
upper = [Inf, Inf]
initial_x = [2.0, 2.0]
results = optimize(OnceDifferentiable(f, g!), initial_x, lower, upper, Fminbox{GradientDescent}())
od = OnceDifferentiable(f, g!, initial_x)
results = optimize(od, initial_x, lower, upper, Fminbox{GradientDescent}())
```

This performs optimization with a barrier penalty, successively scaling down the barrier coefficient and using the chosen `optimizer` (`GradientDescent` above) for convergence at each step. Notice that the `Optimizer` type, not an instance should be passed (`GradientDescent`, not `GradientDescent()`).
Expand All @@ -81,11 +82,13 @@ There are two iterations parameters: an outer iterations parameter used to contr

For example, the following restricts the optimization to 2 major iterations
```julia
results = optimize(OnceDifferentiable(f, g!), initial_x, lower, upper, Fminbox{GradientDescent}(); iterations = 2)
od = OnceDifferentiable(f, g!, initial_x)
results = optimize(od, initial_x, lower, upper, Fminbox{GradientDescent}(); iterations = 2)
```
In contrast, the following sets the maximum number of iterations for each `ConjugateGradient` optimization to 2
```julia
results = Optim.optimize(OnceDifferentiable(f, g!), initial_x, lower, upper, Fminbox{GradientDescent}(); optimizer_o = Optim.Options(iterations = 2))
od = OnceDifferentiable(f, g!, initial_x)
results = Optim.optimize(od, initial_x, lower, upper, Fminbox{GradientDescent}(); optimizer_o = Optim.Options(iterations = 2))
```
## Minimizing a univariate function on a bounded interval

Expand Down
25 changes: 25 additions & 0 deletions src/multivariate/solvers/constrained/fminbox.jl
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,31 @@ Fminbox() = Fminbox{ConjugateGradient}() # default optimizer

Base.summary{O}(::Fminbox{O}) = "Fminbox with $(summary(O()))"

function optimize{T<:AbstractFloat,O<:Optimizer}(obj,
initial_x::Array{T},
l::Array{T},
u::Array{T},
F::Fminbox{O}; kwargs...)
optimize(OnceDifferentiable(obj, initial_x), l, u, F; kwargs...)
end

function optimize{T<:AbstractFloat,O<:Optimizer}(f,
g!,
initial_x::Array{T},
l::Array{T},
u::Array{T},
F::Fminbox{O}; kwargs...)
optimize(OnceDifferentiable(f, g!, initial_x), l, u, F; kwargs...)
end


function optimize{T<:AbstractFloat,O<:Optimizer}(df::OnceDifferentiable,
l::Array{T},
u::Array{T},
F::Fminbox{O}; kwargs...)
optimize(df, df.last_x_f, l, u, F; kwargs...)
end

function optimize{T<:AbstractFloat,O<:Optimizer}(
df::OnceDifferentiable,
initial_x::Array{T},
Expand Down

0 comments on commit c4e0116

Please sign in to comment.