Julia 跳转查询解决方案不';我不能在循环中工作

Julia 跳转查询解决方案不';我不能在循环中工作,julia,numerical-methods,nonlinear-optimization,julia-jump,Julia,Numerical Methods,Nonlinear Optimization,Julia Jump,我在Ipopt优化器中使用JuMP v0.20.0,我试图在一个循环中求解一个非线性方程组,其中问题陈述根据我循环的内容而变化 假设我有一个非常简单的问题,试图选取$$t\u 1、\dots,t\u n$$来最小化非线性方程$$\sum\u{I=1到n}t\u I^2$$。当我在没有循环的情况下运行它时,我有以下代码 using JuMP, Optim, Ipopt, NLsolve m = Model(Ipopt.Optimizer) @variable(m, t[1:N] >= 0.0

我在Ipopt优化器中使用JuMP v0.20.0,我试图在一个循环中求解一个非线性方程组,其中问题陈述根据我循环的内容而变化

假设我有一个非常简单的问题,试图选取$$t\u 1、\dots,t\u n$$来最小化非线性方程$$\sum\u{I=1到n}t\u 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挂断的内容。还有其他人遇到过类似的问题吗?蒂亚

根据错误消息,我的猜测是,由于Julia的作用域规则有点奇怪,
t=collect(tlist)
覆盖了for循环体中定义的跳转变量
t
。请尝试为有效的
solve\u Aik

内的变量使用其他名称,谢谢!奇怪的是,范围界定问题不会在for循环或函数之外出现,人们会认为我从一开始就遇到了它。