【问题标题】:Multidimensional string variables in Julia JuMPJulia JuMP 中的多维字符串变量
【发布时间】:2019-04-10 12:44:35
【问题描述】:

我在 JuMP 中定义多维变量,但是,为了便于操作,我要求索引是字符串。一些指数可能不明显。如何在允许重复元素的同时在 JuMP 中设置多维变量?

我已经尝试将变量定义为字符串变量。但是,一旦变量的索引数或维度数超过 3,则错误表明索引应为 ::Int64 类型。

Set1 = Set{String}(["One", "Two", "Three"])
Set2 = Set{String}(["This", "That", "Where", "There"])
Set3 = Set{String}([1,2,3,4,5])
Set4 = Set{String}(["Where", "There"])

@variable(model, x[Set1, Set2, Set2, Set3, Set4] >= 0)

这给出了索引不是类型 ::Int64 的错误,因为索引超过了维度 3。

这很好用:

@variable(model, y[Set1, Set2] >= 0)

为了限制维度,我尝试将变量设为二维,如下所示:

@variable(model, x[Set1, [Set2, Set2, Set3, Set4]] >= 0)

但是,这给出了索引重复(Set2)的错误。

是否有适当的解决方法或语法更正?

【问题讨论】:

    标签: optimization syntax julia julia-jump


    【解决方案1】:

    在对解决方案中的集合和数组进行评估后,我发现如果索引描述为“集合”以外的内容,则不会给出错误。

    因此,为了使多维变量具有字符串索引,请将索引声明为数组而不是集合。

    【讨论】:

      【解决方案2】:

      当我实现非整数索引时,我通常使用符号而不是字符串来完成它。两者之间的转换非常简单,符号的概念看起来更像是集合,但我使用数组而不是集合来做到这一点,所以我不确定它是否能解决问题。

      我鼓励您将AxisArrays.jl 也视为另一种数据结构。 JuMP 将其变量存储在 AxisArrays 中,因此它可以很好地与代码库的其余部分配合使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-07-21
        相关资源
        最近更新 更多