如何在 Julia/JuMP 中找到集合的索引?
How to find the index of a set in 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
您知道如何修复输出以便我可以读取变量的值吗?
您发布的代码无效,因为您正试图通过例如索引 c
400909,47
。试试这个:
n = length(si)
p = length(sj)
@variable(m, x[i=1:n,j=1:p] >= 0)
@objective(m,Min,sum{c[i,j]*x[i,j],i=1:n,j=1:p})
for j in 1:p
@constraint(m, sum{x[i,j],i=1:n} <= 480)
end
for i in 1:n
@constraint(m, sum{x[i,j],j=1:p} >= b[i])
end
我正在尝试创建一个线性优化模型。我有一个看起来像这样的集合:
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
您知道如何修复输出以便我可以读取变量的值吗?
您发布的代码无效,因为您正试图通过例如索引 c
400909,47
。试试这个:
n = length(si)
p = length(sj)
@variable(m, x[i=1:n,j=1:p] >= 0)
@objective(m,Min,sum{c[i,j]*x[i,j],i=1:n,j=1:p})
for j in 1:p
@constraint(m, sum{x[i,j],i=1:n} <= 480)
end
for i in 1:n
@constraint(m, sum{x[i,j],j=1:p} >= b[i])
end