4.4 集循环函数

集循环函数遍历整个集进行操作.其语法为

@function(setname[(set_index_list)[|conditional_qualifier]]:expression_list);

@function相应于下面罗列的四个集循环函数之一:@for、@sum、@min和@max;

setname是要遍历的集;

set_index_list是集索引列表,相当于下标;

conditional_qualifier是用来限制集循环函数的范围,当集循环函数遍历集的每个成员时,LINGO都要对conditional_qualifier进行评价,若结果为真,则对该成员执行@function操作,否则跳过,继续执行下一次循环.

expression_list是被应用到每个集成员的表达式列表,当用的是@for函数时,expression_list可以包含多个表达式,其间用逗号隔开.这些表达式将被作为约束加到模型中.当使用其余的三个集循环函数时,expression_list只能有一个表达式.如果省略set_index_list,那么在expression_list中引用的所有属性的类型都是setname集.

1.@for

该函数用来产生对集成员的约束.基于建模语言的标量需要显式输入每个约束,不过@for函数允许只输入一个约束,然后LINGO自动产生每个集成员的约束.

【例1】 产生序列{1,4,9,16,25}

4.4 集循环函数 - 图1

2.@sum

该函数返回遍历指定的集成员的一个表达式的和.

【例2】 求向量[5,1,3,4,6,10]前5个数的和.

4.4 集循环函数 - 图2

3.@min和@max

返回指定的集成员的一个表达式的最小值或最大值.

【例3】 求向量[5,1,3,4,6,10]前5个数的最小值,后3个数的最大值.

4.4 集循环函数 - 图3