Я пытаюсь решить MINLP с двоичными переменными в Юлии. У меня есть целевая функция для конкретного пользователя, которая является нелинейной, и у меня есть нелинейные и линейные ограничения. Я пытался решить проблему с помощью Juniper, но всегда получаю ошибку KeyError: key :myfunc not found
, которую я не понимаю.
Вот пример возникновения ошибки.
using Ipopt, JuMP, Juniper
N = 5
optimizer = Juniper.Optimizer
params = Dict{Symbol,Any}()
params[:nl_solver] = with_optimizer(Ipopt.Optimizer, print_level=0)
m = Model(with_optimizer(optimizer, params))
@variable(m, z[1:N],binary=true)
@NLconstraint(m, sum(z[i]*z[i+1] for i=1:N-1) <= 20)
@constraint(m, sum(z[i] for i=1:N) <= 10)
myfunc(z...) = sum(sin(i)*z[i]^i for i in 1:length(z))
register(m, :myfunc, N, myfunc, autodiff=true)
@NLobjective(m, Max, myfunc(z...))
m
optimize!(m)
println(JuMP.value.(z))
println(JuMP.objective_value(m))
println(JuMP.termination_status(m))
Вы знаете, почему возникает ошибка KeyError: key :myfunc not found
и как ее исправить?
Спасибо!