### Lingo与数学建模
#### 一、数学模型与LINGO软件
数学建模是在实际问题的基础上,根据问题的特点,运用数学的语言和方法,通过抽象、简化建立起来的数学结构(模型)。LINGO是一款非常强大的优化求解软件,特别适用于解决复杂的线性和非线性规划问题。
#### 二、LINGO软件的基础知识
##### 1. 掌握集合(SETS)的应用
在LINGO中,集合是一个重要的概念,它可以帮助用户有效地组织和管理模型中的变量。例如,在一个生产和库存问题中,可以通过定义季度集合来跟踪不同时间段的需求、生产量和库存变化。集合通常包含一组相关的元素,并可以定义与这些元素相关的属性和索引。
**例1:**
假设我们有四个季度的需求量和生产能力,可以通过以下方式定义集合:
```lingo
sets:
quarter / q1*q4 /: dem, rp, op, inv;
ends
```
这里`quarter`是一个集合名称,`q1*q4`定义了集合的元素,而`: dem, rp, op, inv;`则定义了集合内的属性。
##### 2. 正确阅读求解报告
求解报告提供了关于求解过程的关键信息,包括求解时间、使用的内存、变量和约束的数量等。这些信息对于调试模型和优化求解过程非常重要。
**报告示例:**
```
Solution Information:
Model created in 0.00 seconds.
Model contains 5 variables (0 binary, 0 integer, 0 implied int.)
Model contains 3 constraints (0 nonlinear).
...
```
##### 3. 正确理解求解状态窗口
求解状态窗口显示了求解过程的状态信息,如当前的最优解、迭代次数等。
**状态示例:**
```
Solver Status Box:
Current Best Integer: -2250.000000
Number of Nodes: 0
...
```
##### 4. 学会设置基本的求解选项(OPTIONS)
选项设置可以显著影响求解的速度和结果的质量。例如,可以设置时间限制、精度要求等。
**选项示例:**
```lingo
options / time_limit = 300, mip_gap = 0.01/;
```
##### 5. 应用实例
下面是一个简单的例子,展示了如何使用LINGO来建立并求解一个线性规划问题。
**模型示例:**
```lingo
max = 2*x + 3*y;
4*x + 3*y <= 10;
3*x + 5*y <= 12;
@gin(x); @gin(y);
```
在这个模型中,`@gin(x)`和`@gin(y)`分别表示`x`和`y`为整数变量。
#### 三、LINGO与其他软件的比较
与LINDO相比,LINGO具有以下优势:
1. **支持非线性规划问题:** LINGO不仅能处理线性规划问题,还能处理非线性规划问题,包括非线性整数规划问题。
2. **内置建模语言:** LINGO提供了一种简洁、直观的方式来描述大型优化问题,使得模型更易于编写和理解。
#### 四、模型输入格式的差异
LINGO和LINDO在模型输入格式上有一些细微差别,主要体现在:
- 目标函数的表示方式从“MAX”变成了“MAX=”。
- 删除了“ST”关键字。
- 每个系数与变量之间增加了运算符“*”。
- 每行(目标、约束和说明语句)后面均增加了一个分号“;”。
**对比示例:**
**LINDO模型:**
```
max2x + 3y
st
4x + 3y < 10
3x + 5y < 12
end
```
**LINGO模型:**
```lingo
max = 2*x + 3*y;
4*x + 3*y <= 10;
3*x + 5*y <= 12;
```
#### 五、LINGO的文件类型
LINGO支持多种文件类型,包括:
- `LG4`:LINGO格式的模型文件,是一种特殊的二进制格式文件,只能被LINGO读取。
- `LNG`:LINGO文本文件,模型中的格式信息将丢失。
- `LDT`:数据文件。
- `LTF`:命令脚本文件。
- `LGR`:报告文件。
#### 六、二次规划问题的求解
对于二次规划问题,LINGO同样可以很好地支持。例如,考虑以下二次规划问题:
**模型示例:**
```lingo
max = 98*x1 + 277*x2 - x1^2 - 0.3*x1*x2 - 2*x2^2;
x1 + x2 <= 100;
x1 <= 2*x2;
@gin(x1); @gin(x2);
```
#### 七、LINGO编程技巧
1. **变量命名规则:** 变量和行名可以超过8个字符,但不能超过32个字符,并且必须以字母开头。
2. **默认变量非负:** LINGO默认假设各变量非负,除非另有说明。
3. **变量位置灵活:** 变量可以放在约束条件的右端,数字也可以放在约束条件的左端。
LINGO是一款功能强大且易用的数学建模工具,适用于解决各种类型的优化问题。通过熟练掌握其基础语法和高级功能,用户可以更加高效地进行数学建模和求解。