Документация Engee

Примечания к участию в разработке

Мы всегда рады получать помощь от людей, которые обычно не участвуют в создании пакета. Однако для того, чтобы процесс прошел наилучшим образом, мы просим вас прочитать эту страницу перед созданием запроса на вытягивание. Так будет больше шансов, что ваши изменения будут учтены, и в конечном итоге это означает меньше работы для всех.

Важные моменты

Предлагая изменения в Optim.jl, необходимо учитывать несколько моментов. Если вы сомневаетесь, не стесняйтесь обращаться к нам. Проще всего это можно сделать, присоединившись к нашему каналу на сервисе Gitter.

Прежде чем отправлять запрос на вытягивание, обратите внимание на следующие пункты.

  • Вы предоставили тесты для своих изменений? Если нет, сделайте это или попросите помощи.

  • Добавило ли ваше изменение новую функциональность? Не забудьте добавить раздел в документацию.

  • Вы значительно изменили существующий код? Обязательно воспользуйтесь инструментами Julia по выводу из использования, чтобы помочь пользователям перейти на новый синтаксис.

  • Добавьте примечание в файл NEWS.md, чтобы мы могли отслеживать изменения между версиями.

Добавление решателя

Если вы создаете новый решатель, не нужно трогать код в src/optimize.jl. Вам следует добавить файл с именем (solver — имя решателя) solver.jl в src и убедиться, что вы определили подтип Optimizer struct Solver <: Optimizer end с соответствующими полями, конструктор по умолчанию с ключевым словом для каждого поля, тип состояния, который содержит все переменные, которые (повторно) используются в течение итеративной процедуры, функцию initial_state, которая инициализирует такое состояние, и метод update!, который выполняет фактическую работу. Допустим, вы хотите принять участие в разработке решателя Minim, тогда ваш файл src/minim.jl будет выглядеть примерно так

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