如何在Julia/JuMP中找到集合的索引?

如何在Julia/JuMP中找到集合的索引?,julia,julia-jump,Julia,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;

我试图创建一个线性优化模型。我有一套像这样的:

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
但是,输出只读取

 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
n=长度(si)
p=长度(sj)
@变量(m,x[i=1:n,j=1:p]>=0)
@目标(m,Min,sum{c[i,j]*x[i,j],i=1:n,j=1:p})
对于1:p中的j
@约束(m,和{x[i,j],i=1:n}=b[i])
终止

您发布的代码不起作用,因为您试图通过索引
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
n=长度(si)
p=长度(sj)
@变量(m,x[i=1:n,j=1:p]>=0)
@目标(m,Min,sum{c[i,j]*x[i,j],i=1:n,j=1:p})
对于1:p中的j
@约束(m,和{x[i,j],i=1:n}=b[i])
终止

请记住接受您以前问题的答案-这将鼓励人们回答您的新问题!当你说“设置”时,你的意思是列表/数组,这是一个重要的考虑因素。您不能索引到集合中。我不确定您是否可以循环使用集合,您可能需要使用collect()。循环索引?你的意思是类似于列表=[1:length(list)]中x的列表[x]吗?请记住接受你以前问题的答案-这将鼓励人们回答你的新问题!当你说“设置”时,你的意思是列表/数组,这是一个重要的考虑因素。您不能索引到集合中。我不确定您是否可以循环使用集合,您可能需要使用collect()。循环索引?你的意思是在[1:length(list)]中,list=[list[x]代表x?这很有效!然而,在打印变量时,我在尝试这样做时遇到了问题。我在问题中添加了新错误的代码。希望你有答案!你需要
1:n
,例如
用于1:n中的i
-现在你只需要
用于n中的i
就行了!然而,在打印变量时,我在尝试这样做时遇到了问题。我在问题中添加了新错误的代码。希望你有答案!您需要
1:n
,例如
用于1:n中的i
-现在您只需要
用于n中的i