如何在Julia中使用for循环定义JuMP变量?

Cam*_*Cam 3 julia julia-jump

我是Julia的新手,我正在尝试用JuMP定义优化问题.我有很多变量(x1,x2,x3....),我试图用for循环来定义.我想要代码:

@variable(m, x1>=0)
@variable(m, x2>=0) ... 
Run Code Online (Sandbox Code Playgroud)

但是我想使用一个for循环,所以我不必手动定义每个变量.
这是我到目前为止:

m = Model()
for i = 1:2
    @variable(m,string('x',i)>=0)
end 
Run Code Online (Sandbox Code Playgroud)

我知道这string('x',i)部分不对,但我不知道如何使用Julia这样做.

And*_*ica 5

看起来你想要一组x变量.

JuMP文档中,您可以通过在定义中使用数组语法来创建数组.

@variable(m, x[1:2] >= 0)
@variable(m, y[1:M,1:N] >= 0)
Run Code Online (Sandbox Code Playgroud)

  • 不要使用`x1`和`x2`,使用`x [1]`和`x [2]`,然后它就可以了. (2认同)

Iai*_*ing 5

您可以使用添加索引到变量@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])
Run Code Online (Sandbox Code Playgroud)