[英]Multidimensional string variables in Julia JuMP
我在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)。
是否有正确的解决方法或语法修正?
在对解决方案中的集合和数组进行评估之后,我发现如果索引的描述不是“集合”,则不会给出错误。
因此,为了使多维变量具有字符串索引,请将索引声明为Arrays而不是Sets。
当我实现非整数指标时,我通常使用符号而不是字符串来完成它。 两者之间的转换非常简单,符号的概念看起来更像是集合,但我使用数组代替集合,所以我不确定它是否能解决问题。
我鼓励您将AxisArrays.jl作为替代数据结构。 JuMP将其变量存储在AxisArrays中,因此它与代码库的其余部分非常相似。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.