"这篇资源主要介绍了LINGO编程中派生集合的定义语法,以及LINGO程序的基本结构,包括集合段、数据段、初始段、计算段和目标与约束段。"
在LINGO中,派生集合是基于一个或多个已存在的集合创建的新集合,其定义语法具有以下特点:
1. **定义格式**:派生集合的定义通常包含父集合列表(parent_set_list)、可选的元素列表(member_list)和可选的属性列表(attribute_list)。定义的通用形式如下:
```lingo
setname(parent_set_list) [/member_list/] [: attribute_list];
```
其中,`setname` 是派生集合的名称,`parent_set_list` 是一个或多个父集合的列表,`member_list` 是集合的元素列表,而 `attribute_list` 是集合的属性列表。
2. **父集合**:父集合列表中的集合可以是基本集合,也可以是其他派生集合,它们共同构成了派生集合的基础。
3. **元素列表**:如果不提供元素列表,可以在程序的数据段通过赋值语句来指定集合的元素。若同时在定义和数据段都不指定元素,那么派生集合默认为稠密集合,即父集合的所有元素组合都是派生集合的元素。
4. **元素定义方式**:元素列表有两种定义方法:元素列表法和元素过滤法。元素列表法直接列出集合中的元素,而元素过滤法则通过过滤条件来筛选出满足条件的元素。
5. **属性列表**:属性列表用于定义集合成员的附加信息,如数组的维度或其他相关属性。
关于LINGO程序的基本结构,它包括以下五个部分:
1. **模型标题**:模型以 "Model" 开始,以 "END" 结束。完整的程序应包含 "Model" 和 "END" 标签,虽然不强制,但推荐使用。
2. **五段结构**:集合段、数据段、初始段、计算段和目标与约束段。其中,目标与约束段是必不可少的,集合段用来定义集合,数据段输入常数数据,初始段定义初始值,计算段则用于进行计算。
- **集合段**(SETS):定义集合及其属性。
- **数据段**(DATA):提供常数数据,用于初始化集合的属性。
- **初始段**(INIT):设置属性的初始值,有助于优化算法的计算效果。
- **计算段**(COMPUTE):进行预处理计算或中间结果的处理。
- **目标与约束段**:定义模型的目标函数和约束条件。
例如,在一个LINGO模型中,集合定义可能如下:
```lingo
Sets:
Car/12/:lcar; // Car是集合,12是元素,lcar是属性
Box/1..7/:hd,zl,js; // Box集合,1到7是元素,hd、zl和js是属性
SL(Car,Box):x; // SL是基于Car和Box的派生集合,x是属性
TRI(Car,SL):trx; // TRI是基于Car和SL的派生集合,trx是属性
ENDSETS
```
数据段和初始段的定义类似,如数据段可以输入属性的常数值,初始段可以设定属性的起始值。
通过理解这些概念,可以更好地构建和解决数学建模问题,如在王丹教授的数学建模课程综合设计中应用LINGO进行模型建立和求解。