Примечания к участию в разработке
Мы всегда рады получать помощь от людей, которые обычно не участвуют в создании пакета. Однако для того, чтобы процесс прошел наилучшим образом, мы просим вас прочитать эту страницу перед созданием запроса на вытягивание. Так будет больше шансов, что ваши изменения будут учтены, и в конечном итоге это означает меньше работы для всех.
Важные моменты
Предлагая изменения в 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