[英]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.