LINGO的学习方法篇
需积分: 0 156 浏览量
更新于2011-09-19
收藏 581KB DOC 举报
### LINGO 学习方法篇之集循环函数解析
#### 概述
LINGO是一款功能强大的优化软件,广泛应用于线性规划、非线性规划、整数规划等多个领域。其核心优势在于能够通过简洁易懂的语言来描述复杂的数学模型。本文主要探讨了LINGO中的集循环函数,包括`@for`、`@sum`、`@min`和`@max`等,以及它们的应用案例,旨在帮助读者更好地理解和掌握这些重要的函数。
#### 集循环函数基础
集循环函数是LINGO中处理集合问题的强大工具。在LINGO中,集合可以用来定义一系列变量或者常量,而集循环函数则允许用户对这些集合中的元素进行操作,例如加总、求最小值或最大值等。
- **集循环函数通用格式**:
```
@function(setname[(set_index_list)][|conditional_qualifier]):expression_list;
```
其中:
- `@function`: 表示具体使用的集循环函数。
- `setname`: 被遍历的集合名称。
- `set_index_list`: 集合的索引列表。
- `conditional_qualifier`: 条件限定符,用于限制遍历范围。
- `expression_list`: 对每个集合成员应用的表达式列表。
#### `@for` 函数详解
`@for`函数用于产生针对集合成员的约束条件。与传统的建模语言相比,`@for`函数允许用户仅定义一个约束模板,LINGO会自动为集合中的每个成员生成对应的约束条件。
**示例**:
假设我们需要构建一个简单的数学模型,其中集合`number`包含数字1到5,并且对于集合中的每一个元素,我们都希望设置一个约束条件`x(I)=I^2`。可以这样写:
```lingo
model:
sets:
number/1..5/:x;
endsets
@for(number(I): x(I)=I^2);
end
```
运行此模型后,LINGO会自动为`number`集合中的每个元素`I`生成相应的约束条件,即`x(1)=1^2`、`x(2)=2^2`等。
#### `@sum` 函数详解
`@sum`函数返回指定集合成员的某个表达式的总和。
**示例**:
假设有向量`x=[5, 1, 3, 4, 6, 10]`,我们需要求出这个向量前5个数的和。可以通过以下方式实现:
```lingo
model:
data:
N=6;
enddata
sets:
number/1..N/:x;
endsets
data:
x=5134610;
enddata
s=@sum(number(I)|I#le#5:x);
end
```
在此例中,`@sum`函数将计算`x`向量前5个元素的和,即5 + 1 + 3 + 4 + 6 = 19。
#### `@min` 和 `@max` 函数详解
`@min`和`@max`函数分别用于返回指定集合成员的某个表达式的最小值和最大值。
**示例**:
对于向量`x=[5, 1, 3, 4, 6, 10]`,我们想要找出该向量前5个数的最小值,以及最后3个数的最大值。
```lingo
model:
data:
N=6;
enddata
sets:
number/1..N/:x;
endsets
data:
x=5134610;
enddata
minv=@min(number(I)|I#le#5:x);
maxv=@max(number(I)|I#ge#N-2:x);
end
```
运行该模型后,`minv`的值为1(前5个数中的最小值),`maxv`的值为10(最后3个数中的最大值)。
#### 复杂案例分析
接下来,我们来看一个更复杂的案例——**职员时序安排模型**。
问题描述:一项工作一周七天每天都需要有人值班,每天所需的最少职员数分别为20、16、13、16、19、14和12,并要求每个职员一周连续工作5天,目标是最少需要多少名职员,以及具体的排班方案。
**模型构建**:
```lingo
model:
sets:
days/mon..sun/:required,start;
endsets
data:
!每天所需的最少职员数;
required=20161316191412;
enddata
!最小化每周所需职员数;
min=@sum(days:start);
@for(days(J):
@sum(days(I)|I#le#5:
start(@wrap(J+I+2,7)))>=required(J));
end
```
在这个案例中,我们定义了一个集合`days`表示一周中的每一天,并为每一天指定了所需的最少职员数。通过`@for`函数,我们确保了每一天所需的最少职员数得到满足,同时通过`@sum`函数最小化了总的职员数。
#### 结果分析
根据模型运行结果,我们得到以下信息:
- 每周最少需要22名职员。
- 排班方案为:周一安排8人,周二安排2人,周三无需安排人,周四安排6人,周五和周六都安排3人,周日无需安排人。
通过本案例的学习,我们可以看到`@for`、`@sum`等函数在解决实际问题中的强大作用。此外,通过灵活运用这些函数,可以帮助我们更加高效地建立和求解复杂的优化模型。
了解并掌握LINGO中的集循环函数对于提高模型构建效率至关重要。这些函数不仅能够简化代码编写过程,还能显著提升模型的可读性和可维护性。希望本文能帮助大家更好地利用这些工具,解决实际问题。
jwen_001
- 粉丝: 0
- 资源: 3
最新资源
- 一个简单的更改所在目录文件名称的py脚本
- 基于Java的商务贸易管理系统设计与实现
- FANUC机器人折弯动作生成使用指南
- 非关系形数据库redis安装包
- 三款便捷高效的文件转换PDF转JPG、PPT转JPG、JPG转PDF小工具,支持右键、拖拽、批量互转工具.rar
- CorelDRAW vba cdr插件 带有中文译文的帮助文档
- Matlab 基于迁移学习的滚动轴承故障诊断 1.运行环境Matlab2021b及以上,该程序将一维轴承振动信号转为二维尺度图图像并使用预训练网络应用迁移学习对轴承故障进行分类,平均准确率在98%左右
- 锂电池Matlab仿真二阶RC等效电路模型 用m代码编写 两个工况:HPPC CC
- MATLAB四旋翼自适应控制仿真simulink simscape,可更成自己的无人机solidworks模型 有公式手册需MATLAB2017版本以上
- 六旋翼无人机PID模型,飞行器本体模型,位置控制,姿态控制,控制分配和电机控制
- 电动汽车定速巡航控制器 基于整车纵向动力学作为仿真模型 输入为目标车速,输出为驱动力矩、实际车速,包含PID模块 控制精度在0.2之内,定速效果非常好 自主开发,详细讲解,包含 资料内含.slx文件、
- 实验6 学生成绩管理系统实验报告(综合性实验).doc
- 通过动态规划优化PHEV能量管理
- 04fd6daf697bd9edabccfefd333fe2b4.zip
- C#上位机与omron欧姆龙 Fins TCP通信以太网通讯实例 源码 通过和PLC用网络连接,可以读取写入欧姆龙PLC的数据寄存器DM(批量也可以)、输入输出CIO、辅助继电器WR,H保持继电器等
- 90°180°旋转滚轮滚筒输送线sw12可编辑全套技术资料100%好用.zip