数学建模 数学规划模型及LINGO讲义汇总ppt课件.ppt

上传人:牧羊曲112 文档编号:1917817 上传时间:2022-12-25 格式:PPT 页数:80 大小:226KB
返回 下载 相关 举报
数学建模 数学规划模型及LINGO讲义汇总ppt课件.ppt_第1页
第1页 / 共80页
数学建模 数学规划模型及LINGO讲义汇总ppt课件.ppt_第2页
第2页 / 共80页
数学建模 数学规划模型及LINGO讲义汇总ppt课件.ppt_第3页
第3页 / 共80页
数学建模 数学规划模型及LINGO讲义汇总ppt课件.ppt_第4页
第4页 / 共80页
数学建模 数学规划模型及LINGO讲义汇总ppt课件.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《数学建模 数学规划模型及LINGO讲义汇总ppt课件.ppt》由会员分享,可在线阅读,更多相关《数学建模 数学规划模型及LINGO讲义汇总ppt课件.ppt(80页珍藏版)》请在三一办公上搜索。

1、数学规划模型及LINGO讲义,黄志勇 河南科技大学数学与统计学院 ,2,一 数学规划引论,数学规划是运筹学中的重要的一个大分支。所研究的问题来源于军事、经济、管理等领域的实际问题。数学规划主要包括线性规划、非线性规划、整数规划、动态规划、多目标规划等,3,数学规划主要解决两个方面的问题: 一、对于给定的人力、物力和财力,怎样才能发挥他们的最大效益; 二、对于给定的任务,怎样才能用最少的人力、物力和财力去完成它。,4,从目标函数和约束条件的表达形式分为线性和非线性;从变量形式可分为非负(正)的、自由的、整数的变量;从时间 上可分为静态的和动态的;从目标函数的要求上可以分为单目标和多目标。而在数学

2、建模竞赛中可能建立的模型是综合的。,5,例1 某工厂在计划期内要安排生产、两种产品,已知生产单位产品所需的设备台时,A、B两种原料的消耗见下表:该厂每生产一件产品可获利2元,每生产一件产品可获利3元。 问:应如何安排生产计划使该厂获利最多?,6,设x1 , x2表示计划期内产品、的产量。计划期内的利润:设备台时数的限制条件:原材料A、B的限制条件:根据实际意义:产品的产量均非负,故,7,所以该问题的数学模型为: 目标函数:满足约束条件:,8,Q:如何求解此问题的最优解?,9,对于如此简单的线性规划问题可以利用图解法、单纯形法等求得最优解。也可以利用LINDO、LINGO等软件求解。,10,Q:

3、数学建模竞赛中所建模型会简单么?显然是不可能的。如果建模中建立的是规划模型,那肯定是综合的规划模型。,11,借助上面的例子,可以有以下几种变形:整数规划模型:,12,非线性规划模型:,13,目标规划模型:,14,Q:这些模型如何求解呢?我们可以利用LINGO软件进行求解。,15,二 LINGO软件介绍,1 LINGO入门当在windows下开始运行LINGO系统时,会得到类似下面的一个窗口:,16,外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGO Model LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编

4、码实现。,17,下面举两个例子例1.1求解前面介绍的LP问题,18,在模型窗口中输入如下代码: max=2*x1+3*x2; x1+2*x2=8; 4*x1=16; 4*x2=12;然后点击工具条上的按钮 即可。或者按ctr+s,19,例1.2 使用LINGO软件计算6个发点8个收点的最小费用运输问题。产销单位运价表如下所示:,20,21,使用LINGO软件,编制程序如下:model:sets: cd/1.6/: a; xd/1.8/: b;links(cd,xd): c, x;endsetsmin=sum(links: c*x);for(xd(j): sum(cd(i): x(i,j)=b(

5、j);,22,for(cd(i) sum(xd(j): x(i,j)=a(i);data: a=60 55 51 43 41 52; b=35 37 22 32 41 32 43 38; c= 6 2 6 7 4 2 9 5 4 9 5 3 8 5 8 2 5 2 1 9 7 4 3 3 7 6 7 3 9 2 7 1 2 3 9 5 7 2 6 5 5 5 2 2 8 1 4 3;enddataend,23,2 LINGO中的集,集是LINGO建模语言的基础,是程序设计最强有力的基本构件。借助于集,能够用一个单一的、长的、简明的复合公式表示一系列相似的约束,从而可以快速方便地表达规模较大的模

6、型。,24,集是一群相联系的对象,这些对象也称为集的成员。一个集可能是一系列产品、卡车或雇员。每个集成员可能有一个或多个与之有关联的特征,我们把这些特征称为属性。属性值可以预先给定,也可以是未知的,有待于LINGO求解。例如,产品集中的每个产品可以有一个价格属性;卡车集中的每辆卡车可以有一个牵引力属性;雇员集中的每位雇员可以有一个薪水属性,也可以有一个生日属性等等。,25,LINGO有两种类型的集:原始集(primitiveset)和派生集(derived set)。一个原始集是由一些最基本的对象组成的。一个派生集是用一个或多个其它集来定义的,也就是说,它的成员来自于其它已存在的集。,26,集

7、部分是LINGO模型的一个可选部分。在LINGO模型中使用集之前,必须在集部分事先定义。集部分以关键字“sets:”开始,以“endsets”结束。一个模型可以没有集部分,或有一个简单的集部分,或有多个集部分。一个集部分可以放置于模型的任何地方,但是一个集及其属性在模型约束中被引用之前必须定义它们。,27,如何定义原始集 为了定义一个原始集,必须详细声明: 集的名字 可选,集的成员 可选,集成员的属性定义一个原始集,用下面的语法:setname/member_list/:attribute_list; 注意:用“”表示该部分内容可选。,28,Setname是你选择的来标记集的名字,最好具有较强

8、的可读性。集名字必须严格符合标准命名规则:以拉丁字母或下划线(_)为首字符,其后由拉丁字母(AZ)、下划线、阿拉伯数字(0,1,9)组成的总长度不超过32个字符的字符串,且不区分大小写。,29,Member_list是集成员列表。如果集成员放在集定义中,那么对它们可采取显式罗列和隐式罗列两种方式。如果集成员不放在集定义中,那么可以在随后的数据部分定义它们。 当显式罗列成员时,必须为每个成员输入一个不同的名字,中间用空格或逗号搁开,允许混合使用。,30,例2.1 可以定义一个名为students的原始集,它具有成员John、Jill、Rose和Mike,属性有sex和age:sets: stud

9、ents/John Jill, Rose Mike/: sex, age;endsets,31, 当隐式罗列成员时,不必罗列出每个集成员。可采用如下语法:setname/member1.memberN/:attribute_list; 这里的member1是集的第一个成员名,memberN是集的最末一个成员名。LINGO将自动产生中间的所有成员名。LINGO也接受一些特定的首成员名和末成员名,用于创建一些特殊的集。列表如下:,32,33, 集成员不放在集定义中,而在随后的数据部分来定义。例2.2sets: students:sex,age;endsetsdata: students,sex,a

10、ge= John 1 16 Jill 0 14 Rose 0 17 Mike 1 13;enddata,34,如何定义派生集为了定义一个派生集,必须详细声明:集的名字 父集的名字 可选,集成员 可选,集成员的属性可用下面的语法定义一个派生集:setname(parent_set_list)/member_list/:attribute_list;,35,setname是集的名字。parent_set_list是已定义的集的列表,多个时必须用逗号隔开。如果没有指定成员列表,那么LINGO会自动创建父集成员的所有组合作为派生集的成员。派生集的父集既可以是原始集,也可以是其它的派生集。,36,例2.

11、3sets: product/A B/; machine/M N/; week/1.2/; allowed(product,machine,week):x;endsets,37,成员列表被忽略时,派生集成员由父集成员所有的组合构成,这样的派生集成为稠密集。如果限制派生集的成员,使它成为父集成员所有组合构成的集合的一个子集,这样的派生集成为稀疏集。,38,如何生成稀疏集?有两种方式生成:显式罗列;设置成员资格过滤器。 使用前面的例子,显式罗列派生集的成员:allowed(product,machine,week)/A M 1,A N 2,B N 1/;,39,如果需要生成一个大的、稀疏的集,那么

12、显式罗列就很讨厌。幸运地是许多稀疏集的成员都满足一些条件以和非成员相区分。我们可以把这些逻辑条件看作过滤器,在LINGO生成派生集的成员时把使逻辑条件为假的成员从稠密集中过滤掉。,40,例2.4sets: students/John,Jill,Rose,Mike/:sex,age; linkmf(students,students)|sex(enddata,41,用竖线(|)来标记一个成员资格过滤器的开始。#eq#是逻辑运算符,用来判断是否“相等”,可参考4. &1可看作派生集的第1个原始父集的索引,它取遍该原始父集的所有成员;&2可看作派生集的第2 个原始父集的索引,它取遍该原始父集的所有成

13、员;&3,&4,以此类推。,42,注意如果派生集B的父集是另外的派生集A,那么上面所说的原始父集是集A向前回溯到最终的原始集,其顺序保持不变,并且派生集A的过滤器对派生集B仍然有效。因此,派生集的索引个数是最终原始父集的个数,索引的取值是从原始父集到当前派生集所作限制的总和。,43,总的来说,LINGO可识别的集只有两种类型:原始集和派生集。不同集类型的关系见下图。,44,3 模型的数据部分和初始部分,在处理模型的数据时,需要为集指派一些成员并且在LINGO求解模型之前为集的某些属性指定值。为此,LINGO为用户提供了两个可选部分:输入集成员和数据的数据部分(Data Section)和为决策

14、变量设置初始值的初始部分(InitSection)。,45,3.1 模型的数据部分 数据部分以关键字“data:”开始,以关键字“enddata”结束。在这里,可以指定集成员、集的属性。其语法如下: object_list = value_list;,46,例3.1sets: set1/A,B,C/: X,Y;endsetsdata: X=1,2,3; Y=4,5,6;enddata 在集set1中定义了两个属性X和Y。X的三个值是1、2和3,Y的三个值是4、5和6。也可采用如下例子中的复合数据声明(data statement)实现同样的功能。,47,例3.2sets: set1/A,B,C

15、/: X,Y;endsetsdata: X,Y=1 4 2 5 3 6;enddata,48,实时数据处理 在某些情况,对于模型中的某些数据并不是定值。譬如模型中有一个通货膨胀率的参数,我们想在2%至6%范围内,对不同的值求解模型,来观察模型的结果对通货膨胀的依赖有多么敏感。我们把这种情况称为实时数据处理(what if analysis)。LINGO有一个特征可方便地做到这件事。 在本该放数的地方输入一个问号(?)。,49,例3.5data: interest_rate,inflation_rate = .085 ?;enddata 每一次求解模型时,LINGO都会提示为参数inflatio

16、n_rate输入一个值。在WINDOWS操作系统下,将会接收到一个类似下面的对话框:,50,直接输入一个值再点击OK按钮,LINGO就会把输入的值指定给inflation_rate,然后继续求解模型。,51,指定属性为一个值 可以在数据声明的右边输入一个值来把所有的成员的该属性指定为一个值。看下面的例子。例3.6sets: days /MO,TU,WE,TH,FR,SA,SU/:needs;endsetsdata: needs = 20;enddata,52,例3.7sets: days /MO,TU,WE,TH,FR,SA,SU/:needs,cost;endsetsdata: needs

17、cost = 20 100;enddata,53,数据部分的未知数值例3.8sets: years/1.5/: capacity;endsetsdata: capacity = ,34,20, , ;enddata属性capacity的第2个和第3个值分别为34和20,其余的未知。,54,模型的初始部分 对实际问题的建模时,初始部分并不起到描述模型的作用,在初始部分输入的值仅被LINGO求解器当作初始点来用,并且仅仅对非线性模型有用。一个初始部分以“init:”开始,以“endinit”结束。,55,例3.9init: X, Y = 0, .1;endinitY=log(X);X2+Y2=1;

18、好的初始点会减少模型的求解时间。,56,4 LINGO函数,LINGO有9种类型的函数:1 基本运算符:包括算术运算符、逻辑运算符和关系运算符2 数学函数:三角函数和常规的数学函数3 金融函数:LINGO提供的两种金融函数4 概率函数:LINGO提供了大量概率相关的函数5 变量界定函数:这类函数用来定义变量的取值范围6 集操作函数:这类函数为对集的操作提供帮助7 集循环函数:遍历集的元素,执行一定的操作的函数8 数据输入输出函数:这类函数允许模型和外部数据源 相联系,进行数据的输入输出9 辅助函数:各种杂类函数,57,基本运算符 算术运算符 算术运算符是针对数值进行操作的。LINGO提供了5种

19、二元运算符:乘方乘除加减,58,LINGO唯一的一元算术运算符是取反函数“”。这些运算符的优先级由高到底为: 高(取反) 低例4.1 算术运算符示例。 253,(24)5,59,逻辑运算符 LINGO具有种逻辑运算符:#not# 否定该操作数的逻辑值,not是一个一元运算符#eq#若两个运算数相等,则为true;否则为flase#ne# 若两个运算符不相等,则为true;否则为flase#gt# 若左边的运算符严格大于右边的运算符,则为true; 否则为flase#ge# 若左边的运算符大于或等于右边的运算符,则为 true;否则为flase,60,#lt# 若左边的运算符严格小于右边的运算符

20、,则为true;否则为flase#le# 若左边的运算符小于或等于右边的运算符,则为true;否则为flase#and# 仅当两个参数都为true时,结果为true;否则为flase#or# 仅当两个参数都为false时,结果为false;否则为true,61,这些运算符的优先级由高到低为:高 #not# #eq# #ne# #gt# #ge# #lt# #le#低 #and# #or#例4.2 逻辑运算符示例2 #gt# 3 #and# 4 #gt# 2,其结果为假(0),62,关系运算符 LINGO有三种关系运算符:“=”、“=”。LINGO中还能用“”表示大于等于关系。LINGO并不支持

21、严格小于和严格大于关系运算符。如果需要严格小于和严格大于关系,比如让A严格小于B:AB,那么可以把它变成如下的小于等于表达式:A+=B,这里是一个小的正数,它的值依赖于模型中A小于B多少才算不等。,63,数学函数LINGO提供了大量的标准数学函数:abs(x) 返回x的绝对值sin(x) 返回x的正弦值,x采用弧度制cos(x) 返回x的余弦值tan(x) 返回x的正切值exp(x) 返回常数e的x次方log(x) 返回x的自然对数,64,lgm(x) 返回x的gamma函数的自然对数sign(x) 如果x=0时,返回不超过x的最大整数;当x0时,返回不低于x的最大整数。smax(x1,x2,xn) 返回x1,x2,xn中的最大值smin(x1,x2,xn) 返回x1,x2,xn中的最小值,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号