Для l oop с 2 итераторами в Julia / JuMP - PullRequest
3 голосов
/ 07 мая 2020

Мне нужно реализовать следующий псевдокод для JuMP / Julia:

forall{i in M, j in Ni[i]}:  x[i] <= y[j];

Я представляю что-то вроде:

for i in M and j in Ni[i]
    @constraint(model, x[i] <= y[j])
end

Как правильно реализовать 2 итератора в for l oop?

Ответы [ 2 ]

5 голосов
/ 08 мая 2020

Я не знаю, нужна ли вам одна итерация с обоими значениями или декартово произведение итераторов, но вот пример для обоих:

julia> M = 1:3; N = 4:6;

julia> for (m, n) in zip(M, N) # single iterator over both M and N
           @show m, n
       end
(m, n) = (1, 4)
(m, n) = (2, 5)
(m, n) = (3, 6)

julia> for m in M, n in N # Cartesian product
           @show m, n
       end
(m, n) = (1, 4)
(m, n) = (1, 5)
(m, n) = (1, 6)
(m, n) = (2, 4)
(m, n) = (2, 5)
(m, n) = (2, 6)
(m, n) = (3, 4)
(m, n) = (3, 5)
(m, n) = (3, 6)
1 голос
/ 21 мая 2020

Вы хотите

@constraint(model, [i = M, j = Ni[i]], x[i] <= y[j])

Вот соответствующая документация: https://www.juliaopt.org/JuMP.jl/stable/constraints/#Constraint -containers-1

...