Notes for contributing
Add a note in NEWS.md
If a change is more than just changing a typo, it will often be required to add a bullet point to the NEWS.md file at the root of the repository. This makes it easier for users to keep track of the changes since last version. A short description, and a link to the PR or issue is sufficient.
Adding a solver
If you're contributing a new solver, you shouldn't need to touch any of the code in src/optimize.jl. You should rather add a file named (solver is the name of the solver) solver.jl in src, and make sure that you define an Optimizer subtype immutable Solver <: Optimizer end with appropriate fields, a default constructor with a keyword for each field, a state type that holds all variables that are (re)used throughout the iterative procedure, an initial_state that initializes such a state, and an update! method that does the actual work. Say you want to contribute a solver called Minim, then your src/minim.jl file would look something like
immutable Minim{T} <: Optimizer
linesearch!::Function
minim_parameter::T
end
Minim(; linesearch!::Function = LineSearches.hagerzhang!, minim_parameter = 1.0) =
Minim(linesearch!, minim_parameter)
type MinimState{T}
@add_generic_fields()
x_previous::Array{T}
g::Array{T}
f_x_previous::T
s::Array{T}
@add_linesearch_fields()
end
function initial_state(method::Minim, options, d, initial_x)
# prepare cache variables etc here
end
function update!{T}(d, state::MinimState{T}, method::Minim)
# code for Minim here
false # should the procedure force quit?
end