繁体   English   中英

JULIA JUMP 中具有两个索引和不同索引长度的优化变量

[英]Optimisation Variable with two indices and different index length in JULIA JUMP

我想解决 Julia 中的优化问题。我试图定义一个二进制变量 x_{r,i} 因此,两个索引的集合长度不相同。

假设有 r_a 和 r_b,但是对于 r_a 有 i_1 和 i_2 而对于 r_b 有 i_1、i_2 和 i_3 所以最后我想得到 X_a_1、X_a_2 和 X_b_1、X_b_2、X_b_3

索引集 i 因不同的索引 r 而异。

有什么方法可以用 Julia 中的这些索引定义变量 x 吗?

这是我试过的:

R=["a","b"]
I=Dict("a" => [1,2],"b"=>[1,2,3])

m = Model(CPLEX.Optimizer)

@variables m begin
    X[R,[I]], Bin 
end

你走在正确的轨道上。 创建一个SparseAxisArray

julia> R = ["a", "b"]
2-element Vector{String}:
 "a"
 "b"

julia> I = Dict("a" => [1, 2], "b" => [1, 2, 3])
Dict{String, Vector{Int64}} with 2 entries:
  "b" => [1, 2, 3]
  "a" => [1, 2]

julia> model = Model();

julia> @variable(model, x[r in R, i in I[r]])
JuMP.Containers.SparseAxisArray{VariableRef, 2, Tuple{String, Int64}} with 5 entries:
  [a, 1]  =  x[a,1]
  [a, 2]  =  x[a,2]
  [b, 1]  =  x[b,1]
  [b, 2]  =  x[b,2]
  [b, 3]  =  x[b,3]

JuMP 支持带有自定义索引的密集 arrays。

julia> indices = [Symbol.(:a, 1:2);Symbol.(:b, 1:3)];

julia> @variable(m, x[indices], Bin)
1-dimensional DenseAxisArray{VariableRef,1,...} with index sets:
    Dimension 1, [:a1, :a2, :b1, :b2, :b3]
And data, a 5-element Vector{VariableRef}:
 x[a1]
 x[a2]
 x[b1]
 x[b2]
 x[b3]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM