Я пытаюсь оптимизировать функцию по 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.