II.II.i 一维集合的定义
集合模块以sets: 开头,endsets 结尾,这是固定的格式,无法更改。这之间定义的是lingo中的集合,也就是编程中的数组。lingo常用的一维集合的定义遵循下面的格式:
集合名称/1…n/:变量1,变量2…;
其中,第一个斜线前的名称表示这个集合的名称,它可以任意取名字。
第一个斜线和第二个斜线中间表示集合(数组)的索引值从1到n,具体题目中n取实际的值,例如/1…3/表示数组长度是3,索引分别是1,2,3。
第二个斜线后跟上一个冒号,紧接着一些变量名,这些变量名都是集合变量名,他们每个都拥有长度1-n,这里第二个斜线后面的内容是可选的,也就是说可以没有变量,也可以有任意多个变量,每个变量都是一个一维的集合,而且这些变量本身没有任何的关系(除了长度相同)。
II.II.ii 二维集合的定义
二维集合是lingo中另一类常用的集合,它的定义会遵循下面的格式:
集合名称(一维集合1,一维集合2):变量1,变量2…;
其中,需要注意但是,定义一个二维的集合前,首先要定义的是两个一维的集合,否则将不支持直接对二维集合定义。而同理,其后的变量1,2之间也没有任何联系(除了它们的尺寸都是n×m)。
二维集合的大小是由()内的两个一维集合的长度决定的。()内的一维集合1决定了二维集合的行数,一维集合2决定了二维集合的列数。
所有的集合,包括一维和二维,都要全部在sets/endsets内定义完成,此时只是定义,并未涉及任何数据。
集合这个模块中,最重要的概念是区分开集合名和集合变量名,前者代表了一个集合,是广泛的定义,后者是一个普通的变量,它的类型是一个集合类型。
下面的代码演示了这部分的内容:
sets:
supply/1…2/: s; !集合一,s是集合变量
demand/1…3/: d; !集合二,d是集合变量
<