5

我是 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 来做到这一点。

4

3 回答 3

5

看起来你想要一个x变量数组。

JuMP docs中,您可以在定义中使用数组语法创建一个数组。

@variable(m, x[1:2] >= 0)
@variable(m, y[1:M,1:N] >= 0)
于 2015-08-04T14:53:45.563 回答
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])
于 2015-08-04T15:19:05.483 回答
0

我将在您的约束中添加一个“for”循环可能如下所示:

@constraint(m, [i in 1:2], x[i]>=0)

[i in 1:2]你的 for 循环在哪里。

添加到上面 Iain 的评论中,最好将其x用作向量来为其定义单个变量 - 这样您就只有一个决策变量。

当您想增加它的维度时,这特别有用:即x[i,j]

于 2020-11-12T03:09:00.713 回答