【问题标题】:Julia - JuMP constraints with array of tuples as indexesJulia - 以元组数组作为索引的 JuMP 约束
【发布时间】:2021-10-13 21:03:02
【问题描述】:

以下在 Julia JuMP 中工作:

@variable(m, δ[i=V, j=tildeV ; i != j && ŷ[i] < .5 && s[i,j] == sim_i[i]] >= 0)

虽然

Ω = [(i,j) for i in V, j in tildeV if i != j && ŷ[i] < .5 && s[i,j] == sim_i[i]]
@variable(m, δ[(i,j)=Ω] >= 0)

导致错误: 错误:UndefVarError:我没有定义

我做错了什么?我在文档中找不到。我试过了:δ[(i,j)...=Ω]δ[(i,j)=Ω...]

您可能希望使用更简单的Ω 作为最小示例,例如

Ω = [(i,j) for i in 1:5, j in 1:5]

【问题讨论】:

  • 请提供一个可重现的例子。

标签: indexing tuples julia constraints julia-jump


【解决方案1】:

这些都有效,所以你的代码中的其他地方一定有问题。

julia> S = [(1,2), (3,4)]
2-element Vector{Tuple{Int64, Int64}}:
 (1, 2)
 (3, 4)

julia> model = Model()
A JuMP Model
Feasibility problem with:
Variables: 0
Model mode: AUTOMATIC
CachingOptimizer state: NO_OPTIMIZER
Solver name: No optimizer attached.

julia> @variable(model, x[(i, j) = S])
1-dimensional DenseAxisArray{VariableRef,1,...} with index sets:
    Dimension 1, [(1, 2), (3, 4)]
And data, a 2-element Vector{VariableRef}:
 x[(1, 2)]
 x[(3, 4)]
julia> Ω = [(i,j) for i in 1:5, j in 1:5]
5×5 Matrix{Tuple{Int64, Int64}}:
 (1, 1)  (1, 2)  (1, 3)  (1, 4)  (1, 5)
 (2, 1)  (2, 2)  (2, 3)  (2, 4)  (2, 5)
 (3, 1)  (3, 2)  (3, 3)  (3, 4)  (3, 5)
 (4, 1)  (4, 2)  (4, 3)  (4, 4)  (4, 5)
 (5, 1)  (5, 2)  (5, 3)  (5, 4)  (5, 5)

julia> model = Model()
A JuMP Model
Feasibility problem with:
Variables: 0
Model mode: AUTOMATIC
CachingOptimizer state: NO_OPTIMIZER
Solver name: No optimizer attached.

julia> @variable(model, x[(i, j) = Ω])
1-dimensional DenseAxisArray{VariableRef,1,...} with index sets:
    Dimension 1, [(1, 1) (1, 2) … (1, 4) (1, 5); (2, 1) (2, 2) … (2, 4) (2, 5); … ; (4, 1) (4, 2) … (4, 4) (4, 5); (5, 1) (5, 2) … (5, 4) (5, 5)]
And data, a 25-element Vector{VariableRef}:
 x[(1, 1)]
 x[(2, 1)]
 x[(3, 1)]
 x[(4, 1)]
 x[(5, 1)]
 x[(1, 2)]
 x[(2, 2)]
 x[(3, 2)]
 x[(4, 2)]
 x[(5, 2)]
 ⋮
 x[(2, 4)]
 x[(3, 4)]
 x[(4, 4)]
 x[(5, 4)]
 x[(1, 5)]
 x[(2, 5)]
 x[(3, 5)]
 x[(4, 5)]
 x[(5, 5)]

【讨论】:

  • 我相信这并不完全符合 JKHA 的预期,因此,当第一个选项是 x[i,j](没有元组,而是 2 个维度)时,使用 x[(i,j)] 访问变量
  • 他们询问了 undefvar 错误。那是他们代码中的其他地方。要制作二维数组,必须指定两个维度。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多