«Не определенная переменная» в 'while l oop' в Юлии - PullRequest
3 голосов
/ 10 января 2020

Я пытаюсь провести анализ чувствительности в Юлии, используя JuMP. Вот мой код: используя JuMP, Plots, 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 не определено

Чего мне не хватает?

Ответы [ 2 ]

4 голосов
/ 10 января 2020
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, если мы работаем с циклами, переменные, которые мы инициализируем вне нашего l oop, не могут быть напрямую доступны в al oop по умолчанию. Чтобы сделать это, мы должны установить эти переменные для глобального использования, поскольку по умолчанию они считаются локальными

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

Теперь это прекрасно работает

1 голос
/ 14 января 2020

Отказ от ответственности: это альтернативное решение, предложенное членом 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()
...