Я пытаюсь создать модель линейной оптимизации. У меня есть набор, который выглядит так:Как найти индекс набора в Julia/JuMP?
si=[1,51,39,400909,1244]
sj=[31,47,5]
Номера в этом наборе представляют коды. Я пытаюсь выполнить цикл через набор, чтобы добавить ограничение к моей модели, но я не хочу перебирать множества, используя их значения, я хочу прокручивать множества на основе их индексов. Вот код, у меня сейчас:
si=[1,51,39,400909,1244]
sj=[31,47,5]
c= [3 5 2;
4 3 5;
4 5 3;
5 4 3;
3 5 4]
b= [80;
75;
80;
120;
60]
# x_ij >= 0 ∀ i = 1,...,5, j = 1,...,3
@defVar(m, x[i in si,j in sj] >= 0)
@setObjective(m,Min,sum{c[i,j]*x[i,j],i in si, j in sj})
# ∀j = 1,...,3
for j in sj
@addConstraint(m, sum{x[i,j],i in si} <= 480)
end
for i in si
@addConstraint(m, sum{x[i,j],j in sj} >= b[i])
end
я получаю сообщение об ошибке, потому что числа в наборах слишком велики. Кто-нибудь знает, как перебирать индексы? Или у кого-то есть другой способ сделать это?
У меня также есть проблемы с печатью моего решения. Вот мой код:
for i in n
for j in p
println("x",i,",",j,"= ", getValue(x[i,j]))
end
end (incorporating Iain Dunning's answer from below)
Однако выход только читает
Objective value: 1165.0
x5,3= 0.0
Вы знаете, как исправить выход, так что я могу читать значения моих переменных?
Пожалуйста, не забудьте принять ответы на свои предыдущие вопросы - это будет способствовать тому, что люди ответят на ваши новые вопросы! – IainDunning
Когда вы говорите «set», похоже, что вы имеете в виду список/массив, и это материальное соображение. Вы не можете индексировать в набор. Я не уверен, что вы можете выполнить цикл через набор, возможно, вам понадобится использовать функцию collect(). Провести тщательные индексы? Вы имеете в виду что-то по строкам списка = [list [x] для x в [1: length (list)]]? –