如何在 Julia 中使用 for 循环定义 JuMP 变量?
How to define JuMP variables using for loop in Julia?
我是 Julia 的新手,我正在尝试用 JuMP 定义优化问题。我有很多变量 (x1,x2,x3....
),我试图使用 for
循环来定义它们。我想要代码:
@variable(m, x1>=0)
@variable(m, x2>=0) ...
但是我想使用 for
循环,所以我不必手动定义每个变量。
这是我目前所拥有的:
m = Model()
for i = 1:2
@variable(m,string('x',i)>=0)
end
我知道 string('x',i)
部分不正确,但我不确定如何使用 Julia 来做到这一点。
您似乎需要一个包含 x
个变量的数组。
从 JuMP docs 开始,您可以在定义中使用数组语法来创建数组。
@variable(m, x[1:2] >= 0)
@variable(m, y[1:M,1:N] >= 0)
您可以使用 @variable
为您的变量添加索引。以下均在 JuMP 中有效:
m = Model()
@variable(m, x[1:2] >= 0)
@variable(m, boringvariable[1:9,1:9,1:9])
@variable(m, 0 <= pixel_intensity[1:255,1:255] <= 1)
@variable(m, bit_pattern[0:8:63], Bin)
N = 5, M = 10
@variable(m, trucks_dispatched[i=1:N,j=1:M] >= 0, Int)
items = [:sock,:sandal,:boot]
max_stock = [:sock => 10, :sandal => 13, :boot => 5]
@variable(m, 0 <= stock_levels[item=items] <= max_stock[item])
我将补充一点,您的约束中的 'for' 循环可能如下所示:
@constraint(m, [i in 1:2], x[i]>=0)
其中 [i in 1:2]
是您的 for 循环。
添加到 Iain 上面的评论中,最好使用 x
作为一个向量来为它定义单个变量——这样你只有一个决策变量。
当你想增加它的维度时,这特别有用:
即x[i,j]
我是 Julia 的新手,我正在尝试用 JuMP 定义优化问题。我有很多变量 (x1,x2,x3....
),我试图使用 for
循环来定义它们。我想要代码:
@variable(m, x1>=0)
@variable(m, x2>=0) ...
但是我想使用 for
循环,所以我不必手动定义每个变量。
这是我目前所拥有的:
m = Model()
for i = 1:2
@variable(m,string('x',i)>=0)
end
我知道 string('x',i)
部分不正确,但我不确定如何使用 Julia 来做到这一点。
您似乎需要一个包含 x
个变量的数组。
从 JuMP docs 开始,您可以在定义中使用数组语法来创建数组。
@variable(m, x[1:2] >= 0)
@variable(m, y[1:M,1:N] >= 0)
您可以使用 @variable
为您的变量添加索引。以下均在 JuMP 中有效:
m = Model()
@variable(m, x[1:2] >= 0)
@variable(m, boringvariable[1:9,1:9,1:9])
@variable(m, 0 <= pixel_intensity[1:255,1:255] <= 1)
@variable(m, bit_pattern[0:8:63], Bin)
N = 5, M = 10
@variable(m, trucks_dispatched[i=1:N,j=1:M] >= 0, Int)
items = [:sock,:sandal,:boot]
max_stock = [:sock => 10, :sandal => 13, :boot => 5]
@variable(m, 0 <= stock_levels[item=items] <= max_stock[item])
我将补充一点,您的约束中的 'for' 循环可能如下所示:
@constraint(m, [i in 1:2], x[i]>=0)
其中 [i in 1:2]
是您的 for 循环。
添加到 Iain 上面的评论中,最好使用 x
作为一个向量来为它定义单个变量——这样你只有一个决策变量。
当你想增加它的维度时,这特别有用:
即x[i,j]