Оптимизация бокса с тремя переменными (Julia Optim.jl) - PullRequest
1 голос
/ 13 июля 2020

Я пытаюсь оптимизировать функцию по 3 переменным, используя функцию оптимизации Optim.jl. Я использую NelderMead, поскольку моя цель не имеет градиента и метода Fminbox, поскольку я знаю нижнюю и верхнюю границы. Фрагмент кода выглядит следующим образом:

lower_bound = [0.93,0.01,1.0001]
upper_bound = [0.999,1.0,1.05]
init_val = [0.99,0.15,1.005]
result = optimize(moments_norm, lower_bound, upper_bound, init_val, Fminbox(NelderMead()))

Это дает мне ошибку:

MethodError: no method matching +(::Float64, ::Array{Float64,1})
Closest candidates are:
  +(::Any, ::Any, !Matched::Any, !Matched::Any...) at operators.jl:529
  +(::Float64, !Matched::Float64) at float.jl:401
  +(::AbstractFloat, !Matched::Bool) at bool.jl:106
  ...

Обратите внимание, что moment_norm - это нетривиальная целевая функция, которая дает выражение, подобное ax+by+cz с константой (a, b, c) и моментами (x, y, z), которые зависят от переменных, которые я оптимизирую.

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

...