我在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)
由于索引超出维度3,因此出现索引不是:: Int64类型的错误。
这很好:
@variable(model, y[Set1, Set2] >= 0)
为了限制尺寸,我尝试将变量设置为二维,如下所示:
@variable(model, x[Set1, [Set2, Set2, Set3, Set4]] >= 0)
但是,这给出了重复索引(Set2)的错误。
是否有适当的解决方法或语法更正?
答案 0 :(得分:0)
在评估解决方案中的集合和数组之后,我发现如果描述的索引不是“集合”,则不会给出错误。
因此,为了使多维变量具有字符串索引,请将索引声明为数组而不是Set。
答案 1 :(得分:0)
当我实现了非整数索引时,通常使用符号而不是字符串来实现。两者之间的转换非常容易,符号的概念似乎更像什么是集合,但是我使用数组而不是集合来做到这一点,所以我不确定是否可以解决问题。
我也建议您将AxisArrays.jl视为替代数据结构。 JuMP将其变量存储在AxisArrays中,因此可以与其余代码库很好地配合使用。