文档介绍:§2 LINGO中的集说明:实际问题建模时,总会遇到一群或多群相互联系的对象,如工厂、消费者群体、交通工具和雇工等等。LINGO允许把这些相联系的对象聚合成集(sets)。一旦把对象聚合成集,就可利用集来最大限度的发挥LINGO建模语言的优势。现深入介绍如何创建集,并用数据初始化集的属性。学完本节后,对集如何引入模型会有一个基本的理解。 为什么使用集集是LINGO建模语言基础,是程序设计最强有力的基本构件。借助集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,快速方便地表达规模较大的模型。集:一群相联系的对象集的成员:相联系的对象。说明:一个集可能是一系列产品、卡车或雇员。属性:每个集成员可能有的一个或多个与之有关联的特征。属性值可以预先给定,也可以是未知的,有待于LINGO求解。举例:产品集中的每个产品可以有一个价格属性;卡车集中的每辆卡车可以有一个牵引力属性;雇员集中的每位雇员可有一个薪水属性,也可有一个生日属性集的类型:原始集(primitive set)、派生集(derived set)。原始集:由一些最基本的对象组成派生集:由一个或多个其它集定义, 什么是集集部分:可选部分,使用前,必须在集部分事先定义。以关键字“sets:”开始,“endsets”结束。一个模型可以没有集部分,或有一个简单集部分,或有多个集部分一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须是已经定义。 定义原始集定义一个原始集,必须作如下详细声明:·集的名字·可选,集的成员·可选, 模型的集部分定义原始集语法格式:setname[/member_list/][:attribute_list];注意:“[]”表示该部分内容可选。Setname:集的名字,可读性要强,必须严格符合标准命名规则:以字母或下划线(_)为首字符,其后是字母(A—Z)、下划线、数字(0,1,…,9)组成的总长度不超过32个字符的字符串,不区分大小写。注意:该命名规则同样适用于集成员名和属性名等的命名。Member_list:集成员列表。说明:若集成员放在集定义中,则可采取显式罗列或隐式罗列方式定义。若集成员不放在集定义中,则可在随后的数据部分定义它们。,有成员John、Jill、Rose、Mike,属性有sex、age:sets: students/John Jill, Rose Mike/: sex, age;endsets①显式罗列成员时,必须为每个成员输入一个不同名字,中间用空格或逗号搁开,允许混合使用。②隐式罗列成员时,不必罗列出每个集成员。语法格式:setname/member1..memberN/[: attribute_list];member1是集的第一个成员名,memberN是集的最末一个成员名。自动产生中间的所有成员名。也接受一些特定的首成员名和末成员名,以创建一些特殊的集。列表如下:Oct2001,Nov2001,Dec2001,Jan2002Oct2001..Jan2002MonthYearM..MonthYearNOct,Nov,Dec,JanOct..JanMonthM..MonthNMon,Tue,Wed,Thu,FriMon..FriDayM..DayNCar2,Car3,Car4,…,Car14Car2..car14StringM..StringN1,2,3,4,51..51..!集部分;sets:students:sex,age;endsets!数据部分;data:students,sex,age= John 1 16 Jill 0 14 Rose 0 17 Mike 1 13;enddata注意:开头用感叹号(!),末尾用分号(;)表示注释,可跨多行说明:集部分只定义了一个集students,并未指定成员。数据部分罗列了集成员John、Jill、Rose、Mike,并对属性sex、age分别给出了值。集成员无论用何种字符标记,其索引都是从1开始连续计数。③集成员不放在集定义中,在随后的数据部分来定义可以把集、集成员和集属性同C语言中的结构体作类比。如下图:集←→结构体集成员←→结构体的域集属性←→结构体实例LINGO内置的建模语言是一种描述性语言,用它可以描述现实世界中的一些问题,然后再借助于LINGO求解器求解。因此,集属性的值一旦在模型中被确定,就不可能再更改。只有在初始部分中给出的集属性值在以后的求解中可更改。这与前面