"Not defined variable" 在朱莉娅的 'while loop' 中

"Not defined variable" in a 'while loop' in Julia

我正在尝试使用 JuMP 在 Julia 中进行敏感性分析。这是我的代码: 使用 JuMP、绘图、Gurobi

m=Model(with_optimizer(Gurobi.Optimizer))


@variable(m, x>=0)
@variable(m, y>=0)
@variable(m, k>=0)

k = 0

while k<=1
    φ(x,y,k)=3*x+k*y

    @objective(m, Max, φ(x,y,k))

    @constraint(m, 2*x-4>=0)
    @constraint(m, y-0.5*x>=0)

    pl=optimize!(m)
    k=k+0.2
end

问题是我得到一个错误:

UndefVarError: k not defined

我错过了什么?

julia> k =0
0

julia> while k<10
           k=k+1
       end
ERROR: UndefVarError: k not defined
Stacktrace:
 [1] top-level scope at ./REPL[11]:2

在 julia 中,如果我们使用循环操作,我们在循环外初始化的变量在默认情况下无法在循环内直接访问。为此,我们必须将这些变量设置为全局使用,因为默认情况下它们被认为是本地的

julia> while k<10
         global  k=k+1
       end

现在可以正常工作了

免责声明:这是一个替代解决方案,由 Julia Discorse

的成员建议

Julia Discourse 的讨论中,建议将代码包装在函数中以提高速度并避免 global 问题:

function run_code()
    model = Model(with_optimizer(Gurobi.Optimizer))
    @variable(model, x >= 0)
    @variable(model, y >= 0)
    @constraint(model, 2x - 4 >= 0)

    k = 0

    while k <= 1
        @objective(model, Max, 3x + k * y)
        optimize!(model)
        k = k + 0.2
    end
end
run_code()