Я использую JuMP v0.20.0 с оптимизатором Ipopt и пытаюсь решить систему нелинейных уравнений в al oop, где постановка задачи меняется в зависимости от того, над чем я работаю.
Предположим, у меня есть действительно простая проблема - попытаться выбрать $$ t_1, \ dots, t_n $$, чтобы минимизировать нелинейное уравнение $$ \ sum_ {i = 1 до N} t_i ^ 2 $$. Когда я запускаю это без зацикливания, у меня есть следующий код
using JuMP, Optim, Ipopt, NLsolve
m = Model(Ipopt.Optimizer)
@variable(m, t[1:N] >= 0.00000001)
function solve_Aik(tlist...)
t = collect(tlist)
return sum([t[i]^2 for i in 1:N])
end
register(m, :solve_Aik, N, solve_Aik, autodiff=true)
@NLobjective(m, Min, solve_Aik(t...))
optimize!(m)
solution = [value.(t[i]) for i=1:N]
, последняя строка которого дает мне мое решение просто отлично.
Однако, как только я поместил это в al oop (даже не указав номер, который я зацикливался на проблеме), я больше не могу восстановить свое решение с ошибкой "MethodError: нет значения, соответствующего методу (:: ForwardDiff.Dual {ForwardDiff.Tag {JuMP.var "# 107 # 109" {var "# solve_Aik # 378"}, Float64}, Float64,8}) ". См. Код ниже:
nums = [1,2,3]
for num in nums
m = Model(Ipopt.Optimizer)
@variable(m, t[1:N] >= 0.00000001)
function solve_Aik(tlist...)
t = collect(tlist)
return sum([t[i]^2 for i in 1:N])
end
register(m, :solve_Aik, N, solve_Aik, autodiff=true)
@NLobjective(m, Min, solve_Aik(t...))
optimize!(m)
solution = [value.(t[i]) for i=1:N]
end
Последняя строка, предлагающая решение, - это то, на что Джулия зацикливается. Кто-нибудь еще сталкивался с подобной проблемой? ТИА!