如何创建&在FICO Xpress Mosel中初始化记录实例

时间:2013-08-21 09:48:14

标签: mathematical-optimization linear-programming

我正在尝试重构Mosel中的一些代码,并使用记录集来表示稀疏多维数组的索引。我希望能够动态填充我的记录集,因此我无法使用文件或数据库中的初始化内容。

我有:

declarations
    myTuple = record
        index1 : string
        index2 : string
    end-record
    sparseIndex : set of myTuple
end-declarations

然后我想做类似的事情:

forall (a in largeListOfStrings)
    forall (b in anotherListOfStrings)
        if (someCondition(a,b)) then
            sparseIndex += { new myTuple(a, b) }

但是在Mosel中没有“new”关键字或运算符,文档在这一点上看起来很弱,所以我只是不知道如何创建我的记录的新实例并初始化它以便我可以将它添加到我的动态集。

或者,我可能只是想错误的方法 - 是否有更好的方法来创建一个保留对稀疏索引组件的访问权限的稀疏索引集。

1 个答案:

答案 0 :(得分:1)

您无需为此案例定义记录。 Mosel非常适合保存稀疏数组的信息。你应该做点什么:

declarations
    largeListOfStrings, anotherListOfStrings: set of string
    mylist: dynamic array(largeListOfStrings, anotherListOfStrings) of integer 
end-declarations

forall(a in largeListOfStrings, b in anotherListOfStrings | someCondition(a,b) = true) do
    mylist(a, b) := 1
end-do

因此,从现在开始,您的稀疏矩阵将保留在我的列表中。每当你想要遍历它时,你应该使用如下逻辑:

forall(a in largeListOfStrings, b in anotherListOfStrings | exists(mylist(a,b))) do
    ! Here you will iterate
end-do