Julia Key Ошибка при доступе к значению в словаре - PullRequest
0 голосов
/ 06 октября 2018

При попытке запустить этот код Джулия постоянно выдает мне сообщение об ошибке «KeyError: key 18 => 63 not found» каждый раз, когда я пытаюсь получить доступ к требованию [i].Кажется, что эта ошибка происходит каждый раз, когда элемент в dem больше, чем 50.

using JuMP, Clp

hours = 1:24

dem = [43 40 36 36 35 38 41 46 49 48 47 47 48 46 45 47 50 63 75 75 72 66 57 50]
demand = Dict(zip(hours, dem))

m = Model(solver=ClpSolver())

@variable(m, x[demand] >= 0) 
@variable(m, y[demand] >= 0)

for i in demand
    if demand[i] > 50
        @constraint(m, y[i] == demand[i])
    else
        @constraint(m, x[i] == demand[i])
    end
end

Не уверен, как решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Это сработало для меня, используя Юлию 1.0

using JuMP, Clp

hours = 1:24

dem = [43 40 36 36 35 38 41 46 49 48 47 47 48 46 45 47 50 63 75 75 72 66 57 50]
demand = Dict(zip(hours, dem))

m = Model()
setsolver(m, ClpSolver())

@variable(m, x[keys(demand)] >= 0)
@variable(m, y[keys(demand)] >= 0)

for (h, d) in demand
    if d > 50
        @constraint(m, y[h] == d)
    else
        @constraint(m, x[h] == d)
    end
end

status = solve(m)

println("Objective value: ", getobjectivevalue(m))
println("x = ", getvalue(x))
println("y = ", getvalue(y))

REF:

  1. Ответ @Fengyang Wang
  2. Комментарий @Wikunia на https://stackoverflow.com/a/51910619/1096140
  3. https://jump.readthedocs.io/en/latest/quickstart.html
0 голосов
/ 06 октября 2018

Вы используете стиль Python for x in dict.В Julia это перебирает пары ключ-значение словаря, а не ключи.Попробуйте

for i in keys(demand)
    if demand[i] > 50
        @constraint(m, y[i] == demand[i])
    else
        @constraint(m, x[i] == demand[i])
    end
end

или

for (h, d) in demand
    if d > 50
        @constraint(m, y[h] == d)
    else
        @constraint(m, x[h] == d)
    end
end
...