JuMP 查询解决方案在 for 循环中不起作用

JuMP querying solution doesn't work in for loop

我将 JuMP v0.20.0 与 Ipopt 优化器一起使用,我正在尝试在循环中求解非线性方程组,其中问题陈述根据我循环的内容而有所不同。

假设我有一个非常简单的问题,试图选择 $$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]

最后一行很好地提供了我的解决方案。

然而,一旦我将其放入循环中(甚至没有提供我正在循环解决问题的数字),我就无法再恢复我的解决方案,并出现错误 "MethodError: no method matching value(::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

提供解决方案的最后一行是 Julia 挂断的地方。还有其他人遇到过类似的问题吗? TIA!

我根据错误消息的猜测是,由于 Julia 的范围规则的一些怪癖,t = collect(tlist) 覆盖了 for 循环主体中定义的 JuMP 变量 t。尝试为 solve_Aik.

中的变量使用不同的名称