Engee documentation

Notes on participation in the development

Important points

When proposing changes to Optim.jl, there are several points to consider. If in doubt, do not hesitate to contact us. The easiest way to do this is by joining our https://gitter.im/JuliaNLSolvers/Optim .jl[to the channel on the Gitter service].

Before sending a pull request, pay attention to the following points.

  • Have you provided tests for your changes? If not, then do it or ask for help.

  • Did your change add new functionality? Do not forget to add a section to the documentation.

  • Have you significantly changed the existing code? Be sure to use Julia’s decommissioning tools to help users switch to the new syntax.

  • Add a note to the file NEWS.md so that we can track changes between versions.

Adding a solver

If you are creating a new solver, you do not need to touch the code in src/optimize.jl'. You should add a file with the name (`solver — the name of the solver) solver.jl in src and make sure that you have defined the subtype Optimizer struct Solver <: Optimizer end with the appropriate fields, the by default constructor with a keyword for each field, the state type that contains all the variables that are (re)used during the iterative procedure, the function initial_state, which initializes such a state, and the update!, which does the actual work. Let’s say you want to participate in the development of the Minim solver, then your src/minim.jl file will look something like this

struct Minim{IF, F<:Function, T} <: Optimizer
    alphaguess!::IF
    linesearch!::F
    minim_parameter::T
end

Minim(; alphaguess = LineSearches.InitialStatic(), linesearch = LineSearches.HagerZhang(), minim_parameter = 1.0) =
  Minim(linesearch, minim_parameter)

type MinimState{T,N,G}
  x::AbstractArray{T,N}
  x_previous::AbstractArray{T,N}
  f_x_previous::T
  s::AbstractArray{T,N}
  @add_linesearch_fields()
end

function initial_state(method::Minim, options, d, initial_x)
# подготовка переменных кэша и т. д. здесь

end

function update!{T}(d, state::MinimState{T}, method::Minim)
    # код для Minim здесь
    false # нужно ли принудительно прекращать процедуру?
end