lingo学习方法

更新时间:2024-04-03 13:12:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

目 录

1.软件介绍 ........................................................................................................... 1 1.1 软件介绍 ....................................................................................................... 1 1.2 菜单介绍 ....................................................................................................... 1 1.3具栏 ............................................................................................................. 12 2.简单模型求解 .................................................................................................. 13 2.1 关键词 ........................................................................................................ 13 2.2 用LINGO解决数学问题 .............................................................................. 13 2.3 在LINGO中对方程组求解........................................................................... 19 2.4例题 ............................................................................................................. 21 2.5习题 ............................................................................................................. 23 3. 模型、集、数据的应用 ..................................................................................... 25 3.1 模型 ............................................................................................................ 25 3.2 模型的集部分 .............................................................................................. 25 3.3 模型的数据部分 .......................................................................................... 26 3.4 模型的初始部分(Init Setion).................................................................... 29 3.5 例题 ............................................................................................................ 30 4.循环函数 ................................................................................ 错误!未定义书签。 4.1

循环函数..................................................................... 错误!未定义书签。

4.2例题 ................................................................................. 错误!未定义书签。 5. 在LINGO中使用数据.......................................................... 错误!未定义书签。 习题.......................................................................................... 错误!未定义书签。

LINGO软件应用

1.软件介绍

1.1 软件介绍

LINGO是一种专门用于求解最优化模型的软件. 由于LINGO软件包执行速度快,易于输入、修改、求解和分析数学规划(优化问题),因此在教育、科研和工业界得到广泛应用. LINGO主要用于求线性规划、非线性规划、二次规划、整数规划和动态规划问题,也可用于一些线性和非线性方程组的求解以及代数方程求根等. LINGO中包含了一种建模语言和许多常用函数,可供使用者建立数学规划问题的模型调用.

如果想了解关于LINGO的信息, 可以点击菜单中的About LINGO命令, 将会出现一个信息窗口, 在该窗口中的第三个框里是版本权限信息(包括整数变量、非线性变量、约束变量、总变量)的个数, 具体如下:

版本 总变量数 整数变量

Demo/Web

300

30 50

Solver Suite 500

非线性变量 约束变量 30 50

150 250 1,000

4,000 16,000 Unlimited

Super 2,000 200 200 Hyper 8,000 800 800 Industrial 32,000 3,200 3,200 Extended Unlimited Unlimited Unlimited 只有Extended版本是没有受到任何限制的.

1.2 菜单介绍

1.2.1 File

1 New

新建一个窗口, 当你执行这个命令时, 会出现如下对话框:

1

LINGO软件应用

你可以在对话框中选择你想要建立的类型. 类型如下: 1)扩展名为(*.lg4)

LG4格式是LINGO4.0的版本,是在Windows下最主要的储存文件格式, 这种格式支持字体格式, 自定义格式以及动态连接, LG4以二进制格式存储, 所以不能被其它的应用软件直接读取.

2)扩展名为(*.lng)

LNG是捷便的存储方式,是4.0版本前的标准文件格式,为了与前版本的兼容,所以还一直在用,LNG文件是以ASCII形式存储的,所以能被支持文本文件的应用程序读取.该格式不支持多种字体.

3)扩展名为(*.ltd) LTD是数据文件, 可以从@FILE函数导入数据,@FILE函数只能读取文本文件,所以所有的LTD文件是以ASCII形式存储, 也不支持多种字体.

4)扩展名为(*.ltf)

LTF是LINGO的调试文件格式, 也是以ASCII格式存储,能直接被LINGO的File|Take command执行.

2 Log Output

输出文本文件,可以将随后原输出到报告窗口的内容输出到文本中. 该命令与Maple中的writeto命令非常相似.

在Maple中输入如下: > x:=sin(5.);

writeto(\y:=x+1:

print(x,y); print(x); > y;

> writeto(terminal); > y;

2

LINGO软件应用

执行菜单中的Edit|Excute|Worksheet, 或则工具栏中的按钮,窗口重新显示如下:

> x:=sin(5.);

writeto(\y:=x+1:

print(x,y); print(x);

x := -.9589242747

> y;

> writeto(terminal); > y;

.0410757253

而在C盘的maple.txt文件的内容为:

-.9589242747, .0410757253

-.9589242747

.0410757253

从中可以知道,用了writeto(filename)命令以后把结果输出到filename中. 直到碰到writeto(terminal)命令时,才重新在工作窗口中显示.

当你点击菜单File|Log Output时,系统出现保存对话框,系统就会将命令窗口中的输出结果保存到指定的文件中.

3 Import LINDO File

该命令是用来导入LINDO软件保存的LINDO文件(*.LTX)格式. 只要在LINGO中导入LINDO文件格式, LINGO系统自动将该文件转化为LINGO可执行语句. 1.2.2 Edit

1 Paste Function

用该命令可以在当前点插入LINGO的内部函数, 2 Select Fonts

设置字体类型, 字体大小, 字体颜色. 1.2.3 LINGO

1 Solve

用solve命令对当前窗口中的模型求解, 该命令只对report script窗口起作用, 不能对数据窗口求解.

当你对一个模型进行求解, LINGO首先检查该模型的语句格式是否正确, 如果LINGO

3

LINGO软件应用

发现在语句中存在错误, 将会出现类似于如下的对话框:

在上图的Error Text框中, LINGO提示发生语句错误的行数及该行的内容. 在通常情况下, LINGO系统能很好的指出错误, 但是有时也会提供错误的信息.

如果在编译的过程中没有语法的错误, LINGO将调用适当的内部函数对模型进行优化求解. 假如我们在工作窗口输入如下内容:

点击菜单LINGO|SOLVE,或者点击工具栏窗口(Solver Status Windows):

,将会在屏幕上显示LINGO解的状态

4

LINGO软件应用

该状态窗口用于跟踪整个求解过程, 下面我们将详细的描写该窗口中的一些主要的内容.

1) 按钮

在解的状态窗口提供了两个按钮, 一个为关闭按钮 (Close), 另一个是打断(interrupt Solver)求解按钮,该按钮的作用是阻止LINGO求解下一个迭代. 在线性模型中,LINGO一般能给出优化解(除整数规划时没有整数解),如果这线性模型被打断了,LINGO返回的将是无意义的, 应该被忽略的值.

注意:如果你按了interrupt solver这个按钮, 解的情况是这样的:

? ? ?

毫无疑问这不是最优解;

解可能不能全部满足约束条件;

如果这个是线性模型,这个解毫无意义.

2) 文本框

在该窗口中有一个文本框, 该文本框的作用是更新状态窗口的相隔时间, 单位为秒, 在默认时为2秒.

3)状态窗口(Solver Status Box)

状态窗口的详细的介绍如下:

5

LINGO软件应用

Model 模型类别显示的模型类别为LP, QP ILP, QP, ILP, IQP, LP, NLP等 Class: State: Possible states are \Optimum\\Local Optimum\\\Objective: 目标函数的当前值. Infeasibility: 不满足约束条件的个数. Iterations : 迭代次数 其中:

缩写 LP QP ILP IQP 类型 线性模型 二次模型 整数线性模型 数。 描述 所有的表达式是线性,并且模型的约束条件中变量没有被约束为整所有表达式是线性或二次型,没有整数约束。 所有的表达式是线性,在变量中存在整数约束。 所有表达式是线性或二次型, 在变量中存在整数约束。 所有表达式是线性,所有变量是整数。 所有表达式是线性或二次型,所有变量是整数。 至少存在一个非线性的表达式 整数二次模型 PILP 纯整数线性模型 PIQP 纯整数二次模型 NLP 非线性模型

一旦LINGO处理完成该模型, 建立一个包括该模型解的报告(Solve Report)窗口. 你可以通过拉窗口的滚动条, 检查该窗口内部的内容. 该窗口如下:

第一:Solution Report告诉我们求该模型迭带的次数是0次;第二:该目标函数的最大值是1.285714;第三:取到最优值时变量X、Y分别为1.142857、0.1428571.

6

LINGO软件应用

我们用数学软件Maple来验证该结果: > with(simplex):

maximize( x+y, {4*x+3*y <= 5, 3*x+4*y <= 4 } );

18{y???,x???}77

> evalf(%);

{y???.1428571429,x???1.142857143}

比较LINGO与Maple所求的结果, 完全一致.

在Solution Report中还包括The Reduced Costs, Slack or Surplus, Dual Price栏.

Reduced Cost:

假设X的reduce cost值为10,则X系数加上10时,求优化模型变量取值不变. 例如下模型:

MAX = 4.0 * TOM + 3.0 * DICK +2.0 *HARRY; 2.5 * TOM +3.1 *HARRY <= 5; 2.0 * TOM + 0.7 * DICK +0.4 *HARRY <= 1;

求解得到solution report如下:

Global optimal solution found at iteration: 0 Objective value: 10.57143

Variable Value Reduced Cost TOM 2.000000 0.000000 DICK 0.8571429 0.000000 HARRY 0.000000 3.611429

Row Slack or Surplus Dual Price 1 10.57143 1.000000 2 0.000000 1.257143 3 0.000000 4.285714

该解中变量HARRY的Reduced Cost为3.611429,现在我们把HARRY前的系数加2,得到的新模型如下:

MAX = 4.0 * TOM + 3.0 * DICK +4.0 *HARRY; 2.5 * TOM +3.1 *HARRY <= 5; 2.0 * TOM + 0.7 * DICK +0.4 *HARRY <= 1;

7

LINGO软件应用

再求解得到solution report如下:

Global optimal solution found at iteration: 0 Objective value: 10.57143

Variable Value Reduced Cost TOM 2.000000 0.000000 DICK 0.8571429 0.000000 HARRY 0.000000 1.611429

Row Slack or Surplus Dual Price 1 10.57143 1.000000 2 0.000000 1.257143 3 0.000000 4.285714

变量TOM、DICK的取值没有变化分别为2.000000、0.8571429. 从变量HARRY的Reduced Cost中看到从原来得3.611429到现在得1.611429差为2. 如果如果系数变化在Reduced Cost内, 优化取值不变.

Slack or Surplus(小于:松弛,大于:过剩): 如果满足约束条件, 则该值是左右差的绝对值. 如果不满足约束条件, 则该值为负数. 如果该值为0, 说明两边相等. 例2 模型如下:

Max = 3 * X + 4 * Y;

X <= 40; Y <= 60; X + Y <= 80;

解该模型,得到的Solution Report 如下:

Global optimal solution found at iteration: 0 Objective value: 300.0000

Variable Value Reduced Cost X 20.00000 0.000000 Y 60.00000 0.000000

8

LINGO软件应用

Row Slack or Surplus Dual Price 1 300.0000 1.000000 2 20.00000 0.000000 3 0.000000 1.000000

4 0.000000 3.000000

把X=20.00000,Y=60.00000代入目标函数和约束条件: 1 2 3 4

Dual Price:

如果该行右边数值加1,就得到优化模型相应的加上该行的Dual Price或减去该行的Dual Price。举例如下:

在例2中第4行的Dual Price为3,现在我们在第4行的右边加上1等到如下模型:

Max=300; 20<=40; 60<=60;

300 20 0 0

20+60<=80;

Max = 3 * X + 4 * Y;

X <= 40; Y <= 60; X + Y <= 81;(本来是80)

解该模型,得到的Solution Report 如下:

Global optimal solution found at iteration: 2 Objective value: 303.0000

Variable Value Reduced Cost X 21.00000 0.000000 Y 60.00000 0.000000

Row Slack or Surplus Dual Price 1 303.0000 1.000000 2 19.00000 0.000000 3 0.000000 1.000000

4 0.000000 3.000000 Objective value值从300增加到303。

2 Range

点击Range命令在当前模型中会产生一个Range report 窗口,在该窗口中有两段分别

9

LINGO软件应用

是,Objective Coefficient Ranges(目标函数系数范围)和Righthand Side Ranges(约束条件右边的范围)在例2模型下,产生的range report 窗口内容如下:

Ranges in which the basis is unchanged:

Objective Coefficient Ranges

Current Allowable Allowable Variable Coefficient Increase Decrease

X 3.000000 1.000000 3.000000 Y 4.000000 INFINITY 1.000000

Righthand Side Ranges

Row Current Allowable Allowable RHS Increase Decrease 2 40.00000 INFINITY 20.00000 3 60.00000 20.00000 20.00000

4 80.00000 20.00000 20.00000

Objective Coefficient Ranges:

在Objective Coefficient Ranges中的第一列为目标函数的变量名称,第二列为

对应变量名的系数,第三列是系数可增加的最大范围,第四列是系数可减少的最大范围.

改变目标函数的变量系数(在给定的范围内),不改变优化求解中变量的取值.

Right-hand Side Ranges:

在Right-hand Side Ranges中的第一列为row的名称,第二列是常数项或者是右边的值.

第三列是该模型的右边最多可以加的量,第四列是该模型的右边最多可以减的量. 我们可以回想,在solution report中有Dual Price列,在右边加1(1必须不大于Righthand Side Ranges中,Allowable Increase对应的值),就得到优化模型相应的加上该行的Dual Price或减去该行的Dual Price.

3 Options

该菜单中包含绝大部分的LINGO参数,可设置的tabs内容如下:

? ? ? ? ?

Interface,

General Solver, Linear Solver, Nonlinear Solver, Integer Pre-Solver

10

LINGO软件应用

? Integer Solver, and ? Global Solver.

在Interface的tabs面中可以控制LINGO系统的界面(包括是否显示工具栏, 界面的大小),输出形式(Terse Output)以及默认的文件格式. 其它的tabs内容可以参考帮助文件.

4 Model Statistics

统计该模型的信息,包括行数、变量数、约束条件数等等;在如下模型中: model:

max=2* x1+3*x2;

x1+2*x2+x3=8; 4*x1+x4=16; 4*x2+x5=12;

end

执行LINGO|Model Statistics后得到如下:

Rows= 4 Vars= 2 No. integer vars= 0 ( all are linear) Nonzeros= 9 Constraint nonz= 4( 1 are +- 1) Density= 0 Smallest and largest elements in abs value= 1.00000 16.0000

No. < : 3 No. =: 0 No. > : 0, Obj= MAX, GUBs <= 2 Single cols= 0

其中Single cols表示松弛变量;现在我们在上面模型中添加三个松弛变量,模型变为: model:

max=2*x1+3*x2+0*x3+0*x4+0*x5;

x1+2*x2+x3=8; 4*x1+x4=16; 4*x2+x5=12;

end

执行LINGO|Model Statistics后得到如下:

Rows= 4 Vars= 5 No. integer vars= 0 ( all are linear)

Nonzeros= 12 Constraint nonz= 7( 4 are +- 1) Density= 0 Smallest and largest elements in abs value= 1.00000 16.0000

No. < : 0 No. =: 3 No. > : 0, Obj= MAX, GUBs <= 2 Single cols= 3

Single cols 由原来的0变到3.

11

LINGO软件应用

具栏

1.3

12 LINGO软件应用

2.简单模型求解

2.1 关键词

LINGO系统不同于C语言、Maple软件,在LINGO系统下变量与内部函数不分大小写, 变量student与变量Student, 函数@file 与@FILE认为相同,一般情况下,系统会自动将变量全部转化为大写.

1)变量要求 在LINGO中创建变量名必须字母开头,由字母、数字或下划线(_)的组成的字符序列, 变量有效长度为32个字符.

2)关键词(包括函数) 兰色(默认) 主要关键词如下:

MAX, MIN, MODEL, END, SETS, ENDSETS, DATA, ENDDATA等. 3)注解 注释:“!…;”.

注:在LINGO下的注释符为“! ;”, 该注释符为段注释符. 与Maple注释符号#, LATEX注释符号%不同, 它们是行注释符.

4)一般语句 黑色(默认)

一般语句包括目标函数和约束条件,必须用“;”表示该语句结束;

5)行标: “[…]” 在语句的前面“[ ]”内部的内容为该行的行标,如果在模型中没有编写行标,则LINGO自动在行的前面添加行标(用数字表示).

LINGO为了匹配括号,在编写时显示红色.

绿色(默认)

2.2 用LINGO解决数学问题

2.2.1 运算符

1 算术运算符

算术运算符使用在数值运算域中. LINGO具有5种二元算术运算符(即对两个运算数进行运算):

^

乘方

13

LINGO软件应用

* / + -

乘 除 加 减

这些运算符的运算等级从高到低为: 高 ^

* / 低 + -

运算符的运算次序为从左至右按等级高低来执行. 运算的次序可以用圆括号“( )”来改变.

2.逻辑运算

#NOT# 非,否定该操作数的逻辑值, #AND# 和,返回true 时当且仅当两个运算数均为true,否则返回false. #OR# 或,返回false时当且仅当两个运算数均为false,否则返回true. #EQ# 等于,如果两个运算数相等,则返回true;反之则返回false. #NE#

不相等,如果两个运算数不相等,则返回true,反之则返回false. 小于,左边的运算数严格小于右边的运算数,则返回true,否则返回false.

小于等于,左边的运算数小于右边的运算数,则返回true,否则返回false. 大于,左边的运算数严格大于右边的运算数,则返回true,否则返回false.

#LT#

#LE# #GT#

#GE# 大于等于,左边的运算数大于右边的运算数,则返回true,否则返回false. 3. 关系运算符

在LINGO中,相等与不等关系被用在数学建模中,用以指出左边的表达式应该是小于等于或等于或大于等于右边的表达式. 它们与逻辑运算不同,关系运算符仅仅告诉LINGO在求解过程中满足这样的关系.

2.2.2 数学函数

LINGO具有两类数学函数:一般函数和三角函数. LINGO提供基本的三角函数:正弦函数、余弦函数和正切函数. 适当的运用这些函数的组合可以获得其他三角函数.

@ABS(X) @COS(X) @SIN(X) @EXP(X) @LGM(X) @LOG(X) @SIGN(X)

返回X的绝对值

返回X的余弦值,X是用弧度制表示的一个角 返回X的正弦值,X是用弧度制表示的一个角 返回常数e的X次方

返回先对X去GAMMA函数在取自然对数的值 返回X的自然对数 符号函数

返回list中的最大值 返回list中的最小值

返回X的正切值,X是用弧度制表示的一个角

14

@SMAX(list) @SMINS(list) @TAN(X)

LINGO软件应用

2.2.3 变量域函数

LINGO提供了4个变量域函数:@BIN, @GIN, @FREE和 @BND, 称为变量域函数(Variable Domain Functions)是因为它们规定了一个变量的取值范围.

@GIN和@BIN分别规定一个是General (非负整数0,1,2,……) 和Binary (布尔值).

在默认状态下, LINGO规定变量是非负的, 也就是说下界为0, 上界为无穷大. @FREE取消了下界为0的约束, 使变量可以取负值.

@BND是用于设定一个变量的上界和下界.

整型变量(Integer Variables)

整型变量有两种情况: General和Binary. 一个General整型变量要求是一个非负整数.一个Binary整型变量进一步要求是0或1. 这两种整型变量在建模过程中非常有用. 不能雇佣或安排2/3个人进行工作, 也不能卖出1/2辆汽车.

LINGO并不是简单地将一个解经过四舍五入得到整数解. 相反, 程序使用一种复杂的算法来确定最好的可行整数解. 但这种算法需要大量的额外的运算时间, 当添加整型变量时, 运算时间会惊人的增加, 所以, 应该尽可能少的使用整数变量. 虽然如此, 让LINGO求解整数解仍然是独特之处.

General整型变量

使用General的简单例子: model:

max=x;

x+y=25.5; x<=y; end

将返回解x=12.75; 如果在模型中加入:

@GIN(x);

就会强迫x取整数. 在这种情况下, 该模型的最优解为12.

Binary整型变量

Binary整型布尔变量,也称为0-1变量, 是一种整型变量的特殊情况, 取值只能为1或者0,通常表示“有”或者“没有”,用法:

@BIN(variable);

@FREE自由变量和单边界

在默认情况下, 一个LINGO变量具有一个下边界0和一个上边界无穷大. @FREE取消

15

LINGO软件应用

变量的下界0, 用法为:

@FREE(variable);

@FREE函数与@BND函数的比较

尽管@FREE函数可以将指定的变量的上下界定为正负无穷大(有效地取消了变量的任何边界), @BND函数却能指定上下边界, 用法为:

@BND(lower_bound,variable,upper_bound)

例如在上面的模型中,第五行可以加入: @BND(-5,X,5), 得到的结果还是一样的. @BND函数变量在一定的范围是收敛; 而@FREE函数取消了默认的下界0. 一定要记住:从优化者的角度上, @BND是表示单边界的一种极为有效的方法. 例2.1

Max f=4 * x + 3 * y + 2 * z; s.t.

2.5 * x+ 3.1 * z <= 5;

0.2 * x + .7 * y + .4 * z <= 1; x,y,z=0,1

在LINGO Model中输入模型如下:

MAX = 4.0 * x + 3.0 * y+2.0 * z;

2.5 * x +3.1 * z <= 5; .2 * x + 0.7 * y+0.4 * z <= 1;

@BIN(x);

@BIN(y);

@BIN(z);

求的结果如下:

Global optimal solution found at iteration: 0 Objective value: 7.000000

Variable Value Reduced Cost X 1.000000 -4.000000 Y 1.000000 -3.000000 Z 0.000000 -2.000000

Row Slack or Surplus Dual Price 1 7.000000 1.000000 2 2.500000 0.000000

3 0.1000000 0.000000

16

LINGO软件应用

从该结果中得知,在该模型的约束条件下,X=1,Y=1,Z=0时取的最大值.

例2.2

模型如下:

max f=4100*B+5900*S-90*F-60*A; s.t.

4*B+2*S-F=0; 2*B+3*S-A=0; F<= 160; A<= 180;

在LINGO Model中输入如下模型:

[obj] MAX = 4100 * B + 5900 * S - 90 * F - 60 * A;

[st1] 4 * B + 2 * S - F = 0; [st2] 2 * B + 3 * S - A = 0; [st3] F <= 160; [st4] A <= 180;

求的结果如下:

Global optimal solution found at iteration: 2 Objective value: 332400.0

Variable Value Reduced Cost B 0.000000 73.33333 S 60.00000 0.000000 F 120.0000 0.000000 A 180.0000 0.000000

Row Slack or Surplus Dual Price OBJ 332400.0 1.000000 ST1 0.000000 90.00000 ST2 0.000000 1906.667 ST3 40.00000 0.000000

ST4 0.000000 1846.667

从该Solution Report中的Variable列中可以看出,变量的排序是按目标函数的变量出现的先后顺序排列的.

17

LINGO软件应用

2.2.4. 其他函数 1.WARN 函数

@WARN( 'text', logical_condition)

如果 logical_condition的逻辑值为true时,显示text内容. 这函数的目的是为了验证该模型数据的正确性.

2. IF 函数 格式:

@IF( logical_condition, true_result, false_result)

如果logical_condition的逻辑值为true时,返回true_result值,否则返回false_result值.

在这里我们用@if函数计算固定生产成本模型。

例 2.4 我们生产两种产品X和Y,我们想总共的成本最小. 约束条件是,两种产品的数量和要大于30,产品X的成本是2,固定费用是100(生产这种产品时,起步费用),产品Y的成本是3,固定成本是60.

建立模型如下:

Min f=XCOST + YCOST

XCOST = @IF( X #GT# 0, 100, 0) + 2 * X; YCOST = @IF( Y #GT# 0, 60, 0) + 3 * Y; X + Y >= 30;

现在我们把该模型输入LINGO Model如下: Min=COST;

COST=XCOST + YCOST;

XCOST = @IF( X #GT# 0, 100, 0) + 2 * X; YCOST = @IF( Y #GT# 0, 60, 0) + 3 * Y; X + Y >= 30;

由于在该模型中变量本身就要大于0, 所以我们不要加变量域函数. 求解后得到如下:

Global optimal solution found at iteration: 9 Objective value: 150.0000

Variable Value Reduced Cost COST 150.0000 0.000000 XCOST 0.000000 0.000000 YCOST 150.0000 0.000000 X 0.000000 0.000000 Y 30.00000 0.000000

18

LINGO软件应用

Row Slack or Surplus Dual Price 1 150.0000 -1.000000 2 0.000000 -1.000000 3 0.000000 -1.000000 4 0.000000 -1.000000

5 0.000000 -3.000000

3.WRAP函数

@WRAP(index,limit)

该函数返回的是j=index-k*limit, 使得k在[1,limit]中. 例如:@WRAP(12,7)得到的值为5, @WRAP(14,7)得到的值为7.

2.3 在LINGO中对方程组求解

例2.3 对下列方程组求解。

?u?v?w?1;??3*u?v?3,?u?2*v?w?0.?

在LINGO Model中输入如下: u+v+w=1; 3*u+v=3; u-2*v-w=0;

按LINGO|Solve后得到如下:

按OK按钮后或回车键后得到如下:

19

LINGO软件应用

LINGO Solve Status 报告解为不可行解。 Solution Report报告如下:

在Solution Report中没有显示解迭代的次数, 现在我们将解带入例2.3 模型结果正确,说明该解是可行解, 那为什么会出现上面出错的现象呢?

从上面的Solution Report中我们可以看出,w=-0.4是负数,我们回忆@free函数,@free函数是取消下界0, 也就是说在没有用@free函数取消下界0时, 该模型中的变量,U,V,W都是大于0, 所以出现如上情况,现在我们添加@free变量域函数, 得到的新模型如下:

u+v+w=1;

3*u+v=3; u-2*v-w=0; @free(u); @free(v);

@free(w);

直接得到解如下:

20

LINGO软件应用

对不等式方程组的求解Maple软件比LINGO强大的多, 我们就没有必要列举求不等式的模型.

2.4例题

例 2.4 已知下列五名运动员各种姿势的游泳成绩(各为50米)如表2-4所示, 试问如何从中选拔一个参加200米混合泳的接力队, 使预期比赛成绩为最好.

表2-4 单位:秒

仰 泳 蛙 泳 蝶 泳 自由泳 赵 37.7 43.4 33.3 29.2 钱 32.9 33.1 28.5 26.4 张 33.8 42.2 38.9 29.6 王 37.0 34.7 30.4 28.5 周 35.4 41.8 33.6 31.1

建立模型:

45目标函数:min=?i?1?a(i,j)*x(i,j)

j?1约束条件:

每人只能参加一项; 每一项只能一人参加

注:

a(i,j)对应表2-4中第i人在第j个游泳项目中所用的时间,

21

LINGO软件应用

?1,第i人参加了第j个游泳项目, x(i,j)???0,第i人没有参加第j个游泳项目.使用LINGO软件对此问题编制程序和求解如下:

min=37.7*x11+32.9*x12+33.8*x13+37.0*x14+35.4*x15+

43.4*x21+33.1*x22+42.2*x23+34.7*x24+41.8*x25+ 33.3*x31+28.5*x32+38.9*x33+30.4*x34+33.6*x35+ 29.2*x41+26.4*x42+29.6*x43+28.5*x44+31.1*x45;

x11+x12+x13+x14+x15=1; x21+x22+x23+x24+x25=1; x31+x32+x33+x34+x35=1; x41+x42+x43+x44+x45=1; x11+x21+x31+x41<=1; x12+x22+x32+x42<=1; x13+x23+x33+x43<=1;

x14+x24+x34+x44<=1; x15+x25+x35+x45<=1;

@bin(x11);@bin(x21);@bin(x31);@bin(x41); @bin(x12);@bin(x22);@bin(x32);@bin(x42); @bin(x13);@bin(x23);@bin(x33);@bin(x43); @bin(x14);@bin(x24);@bin(x34);@bin(x44); @bin(x15);@bin(x25);@bin(x35);@bin(x45);

在LINGO8.0中求解如下:

Global optimal solution found at iteration: 0 Objective value: 126.2000

Variable Value Reduced Cost X11 0.000000 37.70000 X12 0.000000 32.90000 X13 1.000000 33.80000 X14 0.000000 37.00000 X15 0.000000 35.40000 X21 0.000000 43.40000 X22 0.000000 33.10000 X23 0.000000 42.20000

22

LINGO软件应用

X24 1.000000 34.70000 X25 0.000000 41.80000 X31 0.000000 33.30000 X32 1.000000 28.50000 X33 0.000000 38.90000 X34 0.000000 30.40000 X35 0.000000 33.60000 X41 1.000000 29.20000 X42 0.000000 26.40000 X43 0.000000 29.60000 X44 0.000000 28.50000 X45 0.000000 31.10000

Row Slack or Surplus Dual Price 1 126.2000 -1.000000 2 0.000000 0.000000 3 0.000000 0.000000 4 0.000000 0.000000 5 0.000000 0.000000 6 0.000000 0.000000 7 0.000000 0.000000 8 0.000000 0.000000 9 0.000000 0.000000

10 1.000000 0.000000

从解中可以知道,x13=1, x24=1, x32=1, x41=1, 即张参加仰泳, 王参加蛙泳, 钱参加蝶泳, 赵参加自由泳. 最好的成绩为126.2秒.

2.5习题

2.5.1 (投资)某公司有资金4百万, 可向A,B,C三个项目投资, 已知各项目不同投资的相应效益如下表所示. 问如何分配资金可使总效益最大?

项目 A B C

23

投资金额 0 0 0 0 1 41 42 64 2 48 50 68 3 60 60 78 4 66 66 76 LINGO软件应用

2.5.2 某汽车厂生产三种汽车: 微型桥车、中级桥车和高级轿车. 每种轿车需要的资源和销售的利润见下表. 为达到经济规模, 每种汽车的月产量必须到达一定数量时才进行生产. 工厂规定的经济规模为微型车1500辆, 中级车1200辆, 高级车位1000辆, 请构造一个整数规划使该厂的利润最大.

钢材(吨) 工人(小时) 利润 微型车 1.5 30 2 中级车 2 40 3 高级车 2.5 50 4 资源可用量 6000吨 55000小时 78

2.5.3 一登山队员做登山准备,他需要携带的物品的重要性系数和重量见下表,假定登山队员可携带的最大重量为25千克. 应该要带哪些物品?

序号 物品 重量 重要性系数

1 食品 5 20 2 氧气 5 15 3 冰镐 2 18 4 绳索 12 8 5 帐篷 12 8 6 照相机 2 4 7 设备通讯 4 10 24

LINGO软件应用

3. 模型、集、数据的应用

3.1 模型

在建立的模型中用标志符MODEL:(包含冒号)开始,END结束. 如: MODEL:

[OBJ] MAX=……; …………………..; END

3.2 模型的集部分

在讨论过的简单模型中,使用的都是度量变量(scalar variables)。在这些模型中,每个约束都明确规定,每个变量都按变量名列出。在大多数大型模型中,可能需要表达一组相似的计算和约束. 使用直接建模的方法,就要重复键入每一个约束条件. LINGO有处理集(set)的能力,这样的操作就简便多了.

集是一组相关对象的集合. 集中的每一个元素可以有一个或多个相关的特征,称这些特征为属性,属性可以是已知的,也可以是待LINGO求解.

LINGO可识别两类型的集初始集(primitive)和生成集(derived)。 一个初始集包含了最基本的对象. 一个生成集是从其他集生成得到,是另外一个集的子集,或有其他几个集中的元素生成.

集在LINGO模型中是在一个可选部分中定义的,称为集部分。

在LINGO模型中使用集以前,必须在模型中的集部分(SETS Section)中对它们进行定义,集部分从标志符SETS:(包含冒号)开始,到标志符ENDSETS结束。

定义一个初始集,必须详细说明如下:

集的名字

集的成员(集中包含对象的名字和数量) 可选地,集中成员属性

定义一个初始集用以下表达式:

setname /member_list/[:attribute_list];

例如,可以定义一个名为student的初始集,它具有成员John, Rose, Mike, 属性有性别sex和年龄age:

SETS:

student /John Rose Mike/ : sex, age; ENDSETS

LINGO也允许定义一个具有n个成员的集而不需要明确的为每一个成员命名. 方法如下:

SETS:

25

LINGO软件应用

student /1 . . n/ : sex, age;

ENDSETS

其中n为具体的数字, 如果应用于前面的例子中,显然, n取值为3. 定义一个生成集,必须详细说明:

如果定义二维的集,则采取的方法如下: 集的名称 集的父集

可选地,成员

可选地,成员属性

定义一个生成集, 用以下表达式:

setname( parent_set_list) [ / member_list /] [: attribute_list];

parent_set_list是前面定义的集,集与集之间用逗号隔开. 如果没有指定成员元素,LINGO 构造父集中全部成员的关联建立新的生成集. 下面我们举例:

SETS:

PRODUCT / A B/; MACHINE / M N/;

WEEK / 1..2/;

ALLOWED( PRODUCT, MACHINE, WEEK); ENDSETS

集PRODUCT, MACHINE,WEEK是已经建立的集, 而集ALLOWED是集PRODUCT,MACHINE,WEEK的生成集,从三个父集中取出所有关联的成员,在集ALLOWED中我们可以得到如下成员:

ALLOWED Set Membership:

Index Member 1 2 3 4 5 6 7

(A,M,1) (A,M,2) (A,N,1) (A,N,2) (B,M,1) (B,M,2) (B,N,1)

8 (B,N,2)

3.3 模型的数据部分

在前面已经介绍了集的LINGO模型结构时,首先接触到在可选的数据部分中为属性赋值。现将继续深入研究数据部分,并且对LINGO的另一个可选部分——初始部分有所了解。

模型的数据部分

为了给属性赋值,LINGO使用了一个可选的模型部分——数据部分。与集部分类似,数据部分从标志符DATA:(包含冒号)开始,到ENDDATA结束.

在数据部分中,输入表达式在集部分中定义的属性赋值. 这些表达式语法如下:

26

LINGO软件应用

ATTRIBUTE=VALUE_LIST;

除了唯一的例外情况,表达式中的数值列(VALUE LIST)所含数值的个数必须与对应属性个数相同。每个数值用逗号或空格分隔。可以这样定义一个名为STUDENTS的集:

SETS: STUDENTS /JOE, JOAN, BILL, BETTY/:AGE,SEX;

ENDSETS

在它的数据部分中包含了为属性AGE和SEX赋值的数值列为: DATA: AGE=20 19 18 21;

SEX=0 1 0 1;

ENDDATA

注意:每个数值列中有4个值,对应4个人名。

这种要求的唯一例外出现在所有元素赋相同的数值时。在这种情况下,只要提供一个数值就够了,LINGO会把他赋给每一个元素。例如,在上面的例子里,数据部分为

DATA: AGE=20;

SEX=0 1 0 1;

会将每一个人的年龄设为20岁,同时为SEX属性提供各自的数值。 也可以同样的方法在数据部分中初始化一些度量变量(Scalar Variable)。这时,数值例中也包含一个数值。

数值部分中的未知数值

有时只想为一个属性向量中的一些元素赋值,而让其余的保持未知,以便告诉LINGO去选择它们的最优值。由此必须在数据声明(Data Statement)中键入两个相连的逗号,中间没有其它字符。如果是第一个元素未知,数据声明中用逗号开始;如果是最后一个元素未知,数据声明最后用逗号加分号结束。请注意,虽然除了逗号外,LINGO在数据声明中还接受空格作为分隔符,但必须用逗号来分隔未知数值。

例如,在一个存货模型中,可能知道某种产品除第一阶段以外其他个阶段的存货量,那么就可以使第一阶段的存货量保持未知,有LINGO求解出第一阶段仓库应该持有的最优存货量。于是集部分可能是这样的:

SETS:

PERIODS /1 . . 10/ :ONHAND; ENDSETS

对应的数据部分为:

DATA: ONHAND=,12,8,11,5,7,12,4,8,11; ENDDATA

数据部分的实时数值(Runtime Values)

若想要在LINGO求解模型的运行过程中, 为某个属性数组的部分或全部元素赋值。因此,LINGO在数据部分中可以接受一个问号. 当程序运行中遇到一个问号时,会提示输入一个数值,并赋给正在求解的模型中某个数组的对应元素.

例如,在刚才看到的存储模型中, 已事先给定其他属性, 而想让模型的用户输入第三和第五阶段的存储量. 于是集部分可能是这样的:

27

LINGO软件应用

SETS:

PERIODS /1 . . 10/ :ONHAND; ENDSETS

对应的数据部分为: DATA:

ONHAND=9,12,?,11,?,7,12,4,8,11;

ENDDATA

在LINGO求解该模型时,LINGO会显示一个实时参数窗口(Runtime Parameter box),要求按顺序输入数值:

输入数组第三个元素的数值. LINGO会在求解模型前再次要求输入第五个元素的数值. 也可以在一个数据表达式中用一个问号来代表整个数组的数值,如下: DATA: ONHAND=?;

ENDDATA

当需要输入实时数值时,不能输入代数符号,变量名,或者无效的数值,只能输入数字. 例3.1

Min f=7*y1+3*y2; s.t.

y1*y2=20;

y1,y2>=0;

在LINGO Model窗口中输入如下:

MODEL: SETS:

WEEK /1..2/:X;!变量X是目标函数的系数列; ENDSETS DATA:

X=7,3; !被变量X赋值; ENDDATA

[obj]Min=X(1)*y1+X(2)*y2; [st1]y1*y2=20; END

结果如下:

Local optimal solution found at iteration: 59 Objective value: 40.98780

28

LINGO软件应用

Variable Value Reduced Cost Y1 2.927700 0.000000 Y2 6.831301 0.1386431E-07 X( 1) 7.000000 0.000000 X( 2) 3.000000 0.000000

Row Slack or Surplus Dual Price OBJ 40.98780 -1.000000

ST1 0.000000 -1.024695

在该模型中我们可以将y1, y2也组成一个集,得到的新模型如下: MODEL: SETS: WEEK /1..2/:X,y;!增加了变量y; ENDSETS

DATA: X=7,3; !被变量X赋值; ENDDATA

[obj]Min=X(1)*y(1)+X(2)*y(2); [st1]y(1)*y(2)=20; END

得到的结果如下:

Local optimal solution found at iteration: 68 Objective value: 40.98780

Variable Value Reduced Cost X( 1) 7.000000 0.000000 X( 2) 3.000000 0.000000 Y( 1) 2.927700 0.000000 Y( 2) 6.831301 0.6706189E-08

Row Slack or Surplus Dual Price OBJ 40.98780 -1.000000

ST1 0.000000 -1.024695

3.4 模型的初始部分(Init Setion)

通常,必须事先给集中的某些属性赋值以便LINGO求解,特别对于非线性模型来说,搜索求解时所取的初始值有可能决定求解的速度与精度。为了给出初始值,有时就要对某些未知属性值进行猜测。为此LINGO使用了一个可选的模型部分——初始部分,与数据部分(DATA Section)类似,由标志符INIT:开始(包括冒号),到标志符ENDINIT结束。

在初始部分中,键入表达式,为集部分中定义的味知属性提供初始值. LINGO使用这些

29

LINGO软件应用

值作为搜索最优解的出发点.

初始部分的表达式如下:

attribute=value_list;

除了一种情况外, 表达式中的数值列(VALUE LIST)所含数值的个数必须与对应属性个数相同. 每个数值用逗号或空格分隔. 所以如果定义一个名为STOCKS的集,属性PRICE的数值已知, 而属性SELL未知, 正如这样;

SETS:

STOOCKS/ AMX, PPG, ATT, DDN/:PRICE,SELL; ENDSTES

然后在初始部分中包含了属性SELL可能的数值列: INIT:

SELL=5 6 7 8;

ENDINIT

就象在初始部分中那样,要注意用数值列中的4个数值去对应4个成员的属性值。唯一例外是为数组中所有的元素提供相同的初始值时, 只要提供一个数值就够了, LINGO会将这个数值赋给每一个元素. 所以在上面的例子中, 初始部分:

INIT: SELL=5;

ENDINIT

会把所有4个SELL属性的设为5. 你也可以在初始部分中为变量赋初始值。 初始部分中的未赋数值

初始部分的实时数值

这两部分与数据部分类似, 在这里就不再重复叙述.

3.5 例题

例 3.2

某个中型的百货商场对售货人员(每周销货员工资为200)的需求经过统计分析如表3.2所示:

为了保证销售人员充分休息, 售货人员每周工作5天, 休息2天, 并要求休息的2天是连续的, 问应该如何安排售货人员的作息, 既满足了工作需要, 又使所配备的售货人员总费用最少?

表3.2 时间 星期日 星期一 星期二 星期三 星期四 星期五 星期六 所需售货人员数 12 18 15 12 16 19 14 设: xi表示星期i开始休息的人数. 即x1表示星期一开始休息的人数, 从这里可以看出这

30

LINGO软件应用

x1个人不能在星期一, 星期二上班.

把问题变为休息两天的销售人员最少.

目标函数: min=200*(x1+x2+x3+x4+x5+x6+x7); 约束条件:

x1+x2+x3+x4+x5 >=12 x2+x3+x4+x5+x6 >=18 x3+x4+x5+x6+x7>=15 x4+x5+x6+x7 +x1>=12 x5+x6+x7 +x1+x2>=16 x6+x7 +x1+x2+x3>=19

x7+x1+x2+x3+x4>=14 xi=0,1,2,…, (i=1..7)

使用LINGO软件对此问题编制程序和求解如下:

model: sets:

num/1..7/:x; endsets data:

a=200; enddata

min=a*(x(1)+x(2)+x(3)+x(4)+x(5)+x(6)+x(7));

[sun] x(1)+x(2)+x(3)+x(4)+x(5)>=12; [mon] x(2)+x(3)+x(4)+x(5)+x(6)>=18;

容器中装有5000升水,放入20千克的盐,充分溶解后,再以25升/分钟的速度注入浓度为0.03千克/升的盐水,注入时迅速搅拌均匀,同时以相同的速度流出经混合后的盐水。问30分钟后容器中的含盐量。

设t时刻的池里浓度为w1

t+△t时,且△t→0时池里浓度为(5000w+△tx25x0.03)/(5000+25△t)=w2

即( w2- w1 )/△t化简得

( w2- w1 )/△t=(25x0.03-25w)/(5000+25△t) 因为△t→0

所以

31

dw/dt=( w2- w1)/ △

LINGO软件应用

t=(25x0.03-25w)/5000

所以有dw/(25x0.03-25w)=dt/5000

两边积分 且w0=0.004kg/L t0=0min 化简得

w=0.03-0.026 e

所以 当

-t/200

-t/200

m=wL=5000(0.03-0.026 e

)

t=30min 是m=38.1kg

A题:水资源短缺风险综合评价(2011数模夏令营试题)

水资源,是指可供人类直接利用,能够不断更新的天然水体。主要包括陆地上的地表水和地下水。

风险,是指某一特定危险情况发生的可能性和后果的组合。

水资源短缺风险,泛指在特定的时空环境条件下,由于来水和用水两方面存在不确定性,使区域水资源系统发生供水短缺的可能性以及由此产生的损失。

近年来,我国、特别是北方地区水资源短缺问题日趋严重,水资源成为焦点话题。

以北京市为例,北京是世界上水资源严重缺乏的大都市之一,其人均水资源占有量不足300m,为全国人均的1/8,世界人均的1/30,属重度缺水地区,附表中所列的数据给出了1979年至2000年北京市水资源短缺的状况。北京市水资源短缺已经成为影响和制约首都社会和经济发展的主要因

32

3

LINGO软件应用

素。政府采取了一系列措施, 如南水北调工程建设, 建立污水处理厂,产业结构调整等。但是,气候变化和经济社会不断发展,水资源短缺风险始终存在。如何对水资源风险的主要因子进行识别,对风险造成的危害等级进行划分,对不同风险因子采取相应的有效措施规避风险或减少其造成的危害,这对社会经济的稳定、可持续发展战略的实施具有重要的意义。

《北京2009统计年鉴》及市政统计资料提供了北京市水资源的有关信息。利用这些资料和你自己可获得的其他资料,讨论以下问题:

1 评价判定北京市水资源短缺风险的主要风险因子是什么?

影响水资源的因素很多,例如:气候条件、水利工程设施、工业污染、农业用水、管理制度,人口规模等。

2建立一个数学模型对北京市水资源短缺风险进行综合评价, 作出风险等级划分并陈述理由。对主要风险因子,如何进行调控,使得风险降低?

3 对北京市未来两年水资源的短缺风险进行预测,并提出应对措施。

4 以北京市水行政主管部门为报告对象,写一份建议报告。

附表 1979年至2000年北京市水资源短缺的状况

33

LINGO软件应用

第三产业及生活等总用水农业用工业用水资源其它用水总量(亿(亿立方米) 方) 量(亿立水(亿立水(亿立年份 方米) 方米) 方米) 1979 42.92 24.18 14.37 4.37 38.23 1980 50.54 31.83 13.77 4.94 26 1981 48.11 31.6 12.21 4.3 24 1982 47.22 28.81 13.89 4.52 36.6 1983 47.56 31.6 11.24 4.72 34.7 1984 40.05 21.84 14.376 4.017 39.31 1985 31.71 10.12 17.2 4.39 38 1986 36.55 19.46 9.91 7.18 27.03 1987 30.95 9.68 14.01 7.26 38.66 1988 42.43 21.99 14.04 6.4 39.18 1989 44.64 24.42 13.77 6.45 21.55 1990 41.12 21.74 12.34 7.04 35.86 1991 42.03 22.7 11.9 7.43 42.29 1992 46.43 19.94 15.51 10.98 22.44 1993 45.22 20.35 15.28 9.59 19.67 1994 45.87 20.93 14.57 10.37 45.42 1995 44.88 19.33 13.78 11.77 30.34 1996 40.01 18.95 11.76 9.3 45.87 1997 40.32 18.12 11.1 11.1 22.25 1998 40.43 17.39 10.84 12.2 37.7 1999 41.71 18.45 10.56 12.7 14.22 2000 40.4 16.49 10.52 13.39 16.86 注:2000年以后的数据可以在《北京2009统计年鉴》上查

34

LINGO软件应用

到。

深圳也是我国严重缺水的城市。你们也可取代北京,对深圳水资源短缺风险进行相应的研究。

论文

摘要:针对水资源短缺风险评价中的各风险因子的模糊性和不确定性,本文对水资源短缺风险发生的概率和缺水程度进行综合评价。首先从利用前人已得到国际认可的有关风险的定义出发,构造模糊函数描叙某地区在特定时空条件下水资源系统的模糊性,然后结合风险函数来建立数学模型,划分风险等级,接着引用北京市有关水资源短缺风险数据进行验证和综合评价,最后利用回归模型对北京市水资源的短缺风险进行预测,并提出相应的措施。 1. 研究背景

随着社会经济的发展和环境的变化,水资源短缺问题日益严重,从而引起相关组织对水资源的关注,同时这一热点问题也引起了大量的学者针对这一问题进行探讨,为了寻求对水资源短缺风险评估和优化水资源管理,国内也已有一部分研究成果,如基于熵权的水资源短缺风险模糊综合评价模型及应用,基于模糊综合评价的水资源短缺风险分析,区域水资源短缺风险的SPA-VFS评价模型,以及区域水资源短缺风险决策研究等。

要探讨这一问题,首先应对风险进行定义,根据题意:

35

LINGO软件应用

风险,是指某一特定危险情况发生的可能性和后果的组合。在这里,我们组采取有Kaplan提出的现在最具代表性的风险定义,由于此定义已经得到国际社会的广泛认可,即

Risk={si,pi(ai),pi(xi)}

式中: si为第i个有害事件,ai表示第i个事件发生的频率,pi(ai)表示第i个有害事件发生的可能性为的概率; xi表示第i个事件的结果;pi(xi)表示第i个事件结果为x的概率,风险模型采用向量的表示形式。

这个问题的研究的共同特点都是在于水资源系统是一个复杂多变的存在这随机性和模糊性,我们的目标是寻求一种更接近现象实际数据的模糊模型,进而推出风险评价方程。

2 基于模糊概率的水资源短缺风险评价模型的建立 根据上面引用的风险定义,又由于题意知道:水资源短缺风险,泛指在特定的时空环境条件下,由于来水和用水两方面存在不确定性,使区域水资源系统发生供水短缺的可能性以及由此产生的损失,基于上述理由,我们设计了基于模糊概率的水资源短缺风险评价模型。

(1)基于模糊概率的水资源短缺风险 对于一个地区的水资源系统来说,主要是由水量(来水)W和需水量(用水)决定的,发生事故即W-W小于零,由于水资源系统的的模糊不确定性,我们构造一个函数来描叙供水事故带来的损失。

36

LINGO软件应用

定义模糊集W如下: W={x:0≤P(x)≤1}

式中:x为缺水量,x=W-W;P(x)为缺水量在模糊集上的损失概率函数,构造如下: P(x)=0,x<0 =(x/W),0W

式中:W、W分别为供水量和需水量;W为缺水系列中最大缺水量;p为大于1的正整数。

将水资源短缺风险定义为模糊事件1发生的概率,即模糊概率为 P(1)=

式中:

R2

P1(y)dp

为n维欧式空间;p1(y)为模糊事件1的隶属函数;p为概率测定

P(1)=

∫ P1(y)f(y)dy

R2

其中f(y)是随机变量y的概率密度函数。水资源短缺风险的定义表示为

R=

0

P1(x)f(x)dx

37

LINGO软件应用

从式可知;上述风险的模糊性和随机函数联系在一起,其中,随机不确定

性体现了水资源短缺风险发生的概率,而模糊不确定性侧体现了水资源风

险程度。依据概率密度函数f(x)和隶属函数的形式计算水资源短缺风险R

水资源短缺风险的模拟概率分布 模拟系列的概率分布一般

(5)判别分析 判别分析可用于识别影响水资源短缺风险的敏感因子,能够从诸多表明观测对象特征的自变量中筛选出提供较多信息的变量,且使这些变量之间的相关程度较低。线性判别函数的一般形式为: y=a1x1+a2x2+?+anxn

其中y为判别分数,xi(i=1,2,?,n)为反映研究对象特征的变量,ai(i=1,2,?,n)为各变量的系数,也称判别系数。常用的判别分析方法是进入判别函数,其计算公式如下

研究区:北京市

北京是世界上水资源严重缺乏的大都市之一,其人均水资源占有量不足300m,为全国人均的1/8,世界人均的1/30,属重度缺水地区,附表中所列的数据给出了1979年至2000

38

3

LINGO软件应用

年北京市水资源短缺的状况。北京市水资源短缺已经成为影响和制约首都社会和经济发展的主要因素。政府采取了一系列措施, 如南水北调工程建设, 建立污水处理厂,产业结构调整等。但是,气候变化和经济社会不断发展,水资源短缺风险始终存在。如何对水资源风险的主要因子进行识别,对风险造成的危害等级进行划分,对不同风险因子采取相应的有效措施规避风险或减少其造成的危害,这对社会经济的稳定、可持续发展战略的实施具有重要的意义。

1. 北京市水资源短缺风险影响因子分析 北京市水资源开发利用中存在的问题主要有:(1)上游来水衰减趋势十分明显;(2)长期超采地下水导致地下水位下降(3)水污染加重了水危机(4)人口膨胀和城市化发展加大了生活用水需求等。因此导致北京市水资源短缺的主要原因有资源型缺水和水质型缺水等.影响北京水资源短缺风险的因素可归纳为以下两个方面:(1)自然因素:人口数、入境水量、水资源总量、地下水位埋深(2)社会经济环境因素:污水排放总量、污水处理率、COD排放总量、生活用水量、农业用水量。

39

LINGO软件应用

2.北京市水资源短缺风险评价 Logistic回归模型的建立

由于知道有关北京市1979-2000年的总用水量、农业用水、第三产业及生活等其他用水、水资源总量。根据经验 建立logistic回归模型,

40

LINGO软件应用

关于应对北京市水资源短缺风险的报告

北京市水行政主管部门:

根据我们团队的查阅资料及积极思考,分析出造成北京市水资源短缺的主要风险因子为水资源总量、污水排放、农业用水量、生活用水量。现将北京市水资源慨况报告如下: 如今北京市快速的城市化与工业化,在一定程度上已经影响到了人口、资源、环境与经济协调发展这一原则,根据1979年至2000年北京市水资源短缺的状况表,总结出北京市这些年来基本上处于缺水状态,而也有计算表明,目前北

41

LINGO软件应用

京水资源储量为18.27亿立方米,外地入境水资源19.15亿立方米,合计北京水资源总量为年37.42亿立方米,人均拥有366.8立方米/年,仅占全国平均值的13.8%,在世界120个国家的首都中居百位之后。由于北京地下近似闭合流域,其地下出入境水量为零。北京地表水出境水量经多年观测约占年降水总量的14.28%,即为14.38亿立方,各种损耗为3.32亿立方米,因此北京水资源为实际可用水量仅为19.72亿立方米。所以北京是一座水资源严重短缺的城市。 按照中央确定的发展战略,21世纪中期我国将达到中等发达国家水平,首都北京将建设成为清洁、卫生、优美的一流国际化大都市,实现\碧水蓝天\的环境保护目标,所以,在当前的发展和建设中,一定要量水而行,量水发展,要以水资源条件为基础,严格控制城市规模、人口规模和经济规模,不断调整和完善产业和产品结构。现将一些关于应对北京市水资源短缺风险的建议报告如下:

? 针对北京市严重的水污染问题,我们觉得应该进一步加强长效管理机制和寻找更有效处理方式来控制水污染,主要可通过以下七种方式:

1) 统一和加强污染监测系统。由于某些排污许可证的发放、监控和实施不力,导致污水排放控制制度不能发挥有效的作用,并且受地方和部门利益的影响,缺乏综合的流域管理,地方政府对污染控制的努力不够,

42

LINGO软件应用

为实行有效的污染控制所需要的各种措施,必须提高污染监控能力。目前的水监测系统涉及环保部、水利部、住房和城乡建设部等多个部门,这种分割的系统必须改革。就应加强各监测系统之间的协调,采用统一的监测标准,根据相同的程序、通过同一渠道发布水质信息,采取协调联动的方式,强化联合执法,如有必要,可将这些不同的监测系统加以整合,并由一个独立于各部的第三方机构进行管理。

2) 修订和完善现有与水相关的法律法规。由于现有法律法规不够明确甚至相互矛盾,全国人大应该对现有与水相关的法律法规进行认真审查并加以修订。在此过程中,应特别注意法律法规的实施问题和水资源的综合管理问题。

3) 强化法律的实施,以促使工业企业和其他污染者更好地遵守法律。政府应采用所有可用的手段,包括法制、体制和政策手段,并通过这些手段动员公众、激励私营部门,以保证所有污染控制的要求得到完全服从。同时,由于许多政策问题需要更加详细的分析,比如:提供更可靠、更完备的污染源信息;整合污染控制措施,特别是要采用许可证制度;强化水污染管理方面的现有立法和执法系统的威慑作用;加强日常污染预防,而不是发生事故后的污染治理等等,所以这些需

43

LINGO软件应用

要更好地处理和改进。

4) 强化社会监督,地方各级政府要建立健全的有奖举报制度。

5) 更多地采用基于市场的手段。在污染控制中,应充分利用市场机制,克服减少污染中的市场失灵。应采用严格的经济刺激措施(如排污收费和罚款),为促使污染者服从排放标准和其他环境要求提供强有力的刺激。现行法律中规定的罚款最高额上限应提高。另外,应在流域范围内逐步采用水排放许可证交易制度,以提高污水处理经济效率。

6) 科普宣教。通过多种形式,大力宣传相关法律法规和标准知识、各类违法排污行为及其危害以及严厉惩处的措施,做到各工厂人员应知尽知。

7) 加大对污染处理的投资。国家可以多提供财政支持,创新技术,目前,可以着重发展膜产业,这对循环利用废水有不可替代的作用,可以缓解水资源短缺。 针对北京气候的不确定性及地下水超采严重,我们觉

数学建模竞赛中应当掌握的十类算法:

1. 蒙特卡罗算法。该算法又称随机性模拟算法,是通过计算机仿真来解决问题的算法,同时可以通过模拟来检验自己模型的正确性,几乎是比赛时必用的方法。 2. 数据拟合、参数估计、插值等数据处理算法。比赛中通常会遇到大量的数据需要处理,而处理数据的关键就在于这些算法,通常使用MATLAB 作为工具。

44

LINGO软件应用

3. 线性规划、整数规划、多元规划、二次规划等规划类算法。建模竞赛大多数问题属于最优化问题,很多时候这些问题可以用数学规划算法来描述,通常使用Lindo、Lingo 软件求解。

4. 图论算法。这类算法可以分为很多种,包括最短路、网络流、二分图等算法,涉及到图论的问题可以用这些方法解决,需要认真准备。

5. 动态规划、回溯搜索、分治算法、分支定界等计算机算法。这些算法是算法设计中比较常用的方法,竞赛中很多场合会用到。

6. 最优化理论的三大非经典算法:模拟退火算法、神经网络算法、遗传算法。这些问题是用来解决一些较困难的最优化问题的,对于有些问题非常有帮助,但是算法的实现比较困难,需慎重使用。

7. 网格算法和穷举法。两者都是暴力搜索最优点的算法,在很多竞赛题中有应用,当重点讨论模型本身而轻视算法的时候,可以使用这种暴力方案,最好使用一些高级语言作为编程工具。

8. 一些连续数据离散化方法。很多问题都是实际来的,数据可以是连续的,而计算机只能处理离散的数据,因此将其离散化后进行差分代替微分、求和代替积分等思想是非常重要的。

9. 数值分析算法。如果在比赛中采用高级语言进行编程的话,那些数值分析中常用的算法比如方程组求解、矩阵运算、函数积分等算法就需要额外编写库函数进行调用。

10. 图象处理算法。赛题中有一类问题与图形有关,即使问题与图形无关,论文中也会需要图片来说明问题,这些图形如何展示以及如何处理就是需要解决的问题,通常使用MATLAB 进行处理。

2 十类算法的详细说明 2.1 蒙特卡罗算法

大多数建模赛题中都离不开计算机仿真,随机性模拟是非常常见的算法之一。举,个例子就是97 年的A 题每个零件都有自己的标定值,也都有自己的容差等级,而求解最优的组合方案将要面对着的是一个极其复杂的公式和108 种容差选取方案,根本不可能去求解析解,那如何去找到最优的方案呢?随机性模拟搜索最优方案就是其中的一种方法,在每个零件可行的区间中按照正态分布随机的选取一个标定值和选取一个容差值作为一种方案,然后通过蒙特卡罗算法仿真出大量

45

LINGO软件应用

的方案,从中选取一个最佳的。另一个例子就是去年的彩票第二问,要求设计一种更好的方案,首先方案的优劣取决于很多复杂的因素,同样不可能刻画出一个模型进行求解,只能靠随机仿真模拟。 2.2 数据拟合、参数估计、插值等算法

数据拟合在很多赛题中有应用,与图形处理有关的问题很多与拟合有关系,一个例子就是98 年美国赛A 题,生物组织切片的三维插值处理,94 年A 题逢山开路,山体海拔高度的插值计算,还有吵的沸沸扬扬可能会考的“非典”问题也要用到数据拟合算法,观察数据的走向进行处理。此类问题在MATLAB中有很多现成的函数可以调用,熟悉MATLAB,这些方法都能游刃有余的用好。 2.3 规划类问题算法

竞赛中很多问题都和数学规划有关,可以说不少的模型都可以归结为一组不等式作为约束条件、几个函数表达式作为目标函数的问题,遇到这类问题,求解就是关键了,比如98年B 题,用很多不等式完全可以把问题刻画清楚,因此列举出规划后用Lindo、Lingo 等软件来进行解决比较方便,所以还需要熟悉这两个软件。 2.4 图论问题

98 年B 题、00 年B 题、95 年锁具装箱等问题体现了图论问题的重要性,这类问题算法有很多,包括:Dijkstra、Floyd、Prim、Bellman-Ford,最大流,二分匹配等问题。每一个算法都应该实现一遍,否则到比赛时再写就晚了。 2.5 计算机算法设计中的问题

计算机算法设计包括很多内容:动态规划、回溯搜索、分治算法、分支定界。比如92 年B 题用分枝定界法,97 年B 题是典型的动态规划问题,此外98 年B 题体现了分治算法。这方面问题和ACM 程序设计竞赛中的问题类似,推荐看一下《计算机算法设计与分析》(电子工业出版社)等与计算机算法有关的书。 2.6 最优化理论的三大非经典算法

这十几年来最优化理论有了飞速发展,模拟退火法、神经网络、遗传算法这三类算法发展很快。近几年的赛题越来越复杂,很多问题没有什么很好的模型可以借鉴,于是这三类算法很多时候可以派上用场,比如:97 年A 题的模拟退火算法,00 年B 题的神经网络分类算法,象01 年B 题这种难题也可以使用神经网络,还有美国竞赛89 年A 题也和BP 算法有关系,当时是86 年刚提出BP 算法,89 年就考了,说明赛题可能是当今前沿科技的抽象体现。03 年B 题伽马刀问题也是目前研究的课题,目前算法最佳的是遗传算法。

46

LINGO软件应用

2.7 网格算法和穷举算法

网格算法和穷举法一样,只是网格法是连续问题的穷举。比如要求在N 个变量情况下的最优化问题,那么对这些变量可取的空间进行采点,比如在[a; b] 区间内取M +1 个点,就是a; a+(b-a)/M; a+2 (b- a)/M; ? ; b 那么这样循环就需要进行(M?1)N次运算,所以计算量很大。

比如97 年A 题、99 年B 题都可以用网格法搜索,这种方法最好在运算速度较快的计算机中进行,还有要用高级语言来做,最好不要用MATLAB 做网格,否则会算很久的。

穷举法大家都熟悉,就不说了。 8 一些连续数据离散化的方法

大部分物理问题的编程解决,都和这种方法有一定的联系。物理问题是反映我们生活在一个连续的世界中,计算机只能处理离散的量,所以需要对连续量进行离散处理。这种方法应用很广,而且和上面的很多算法有关。事实上,网格算法、蒙特卡罗算法、模拟退火都用了这个思想。 9 数值分析算法

这类算法是针对高级语言而专门设的,如果你用的是MATLAB、Mathematica,大可不必准备,因为数值分析中有很多函数一般的数学软件是具备的。 10 图象处理算法

01 年A 题中需要你会读BMP 图象、美国赛98 年A 题需要你知道三维插值计算,03 年B 题要求高,不但需要编程计算还要进行处理,而数模论文中也有很多图片需要展示,因此图象处理就是关键。做好这类问题,重要的是把MATLAB 学好,特别是图象处理的部分。

47

本文来源:https://www.bwwdw.com/article/os2r.html

Top