LINGO软件使用培训PPT

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

LINGO软件使用培训PSE课题组中国石油大学(北京)培训人:邓春博士培训时间:2013年3月28日第一章LINGO的基本用法中国石油大学(北京)Lingo软件初级培训§1.1LINGO入门PSE课题组中国石油大学(北京)一、概况LINGO是美国LINDO系统公司(LindoSystemInc)开发的求解数学规划系列软件中的一个(其它软件为LINDO,GINO,What’sBest等等),的主要功能是求解大型线性、非线性和整数规划,目前的版本是13.0.可以从Internet网址,执行该文件即可在计算机内安装LINGO软件系统,首次运行该软件时,要求用户输入密码,如果输入了正确的密码,则该软件就成了正式版,如果密码不对或不输入密码,则该软件就成为演示版.Lingo软件初级培训LINGO的不同版本对模型的变量和约束条件的数量作出不同的限制,如下表所示:版本变量总数非线性变量整数变量约束条件数量Demo3003030150Super20002002001000Hyper80008008004000Industrial320003200320016000ExtendedUnrestrictedUnrestrictedUnrestrictedUnrestrictedLingo软件初级培训LINGO的主要功能特色为:1、输入模型简便直观;2、运行速度很快;3、内置建模语言,提供几十个内部函数,从而能以较少语句,较直观的方式描述较大规模的优化模型;4、把集合的概念引入编程语言,很容易将实际问题转换为LINGO模型;5、能方便地与EXCEL、数据库等其它软件交换数据.Lingo软件初级培训二、LINGO的基本用法启动LINGO后,在主窗口上弹出标题为“LINGOModel-LINGO1”(模型)的窗口,用于输入模型,你可以在该窗口内用基本类似于数学公式的形式输入小型规划模型.通常,模型有以下三部分所组成:1.目标函数(求某个数学表达式的最大值或最小值);2.决策变量,即目标函数值取决于哪些变量;3.约束条件,即对变量附加一些条件限制(等式或不等式).Lingo软件初级培训某工厂有两条生产线,分别用来生产M和P两种型号的产品,利润分别为200元/个和300元/个,生产线的最大生产能力分别为每日100和120,生产线每生产一个M产品需要1个劳动日进行调试、检测等工作,而每个P产品需要2个劳动日,该厂每天只有160个劳动日可用,假如原材料等其它条件不受限制,问应如何安排生产计划,使获得的利润最大?•设两种产品的生产量分别为x1和x2,则该问题的数学模型为:•目标函数:Maxz=200x1+300x2•约束条件:•x1≤100,x2≤120,x1+2x2≤160,x1,x2≥0。•在Model窗口内输入•MAX=200*X1+300*X2;•X1=100;•X2=120;•X1+2*X2=160;注:LINGO默认所有决策变量都大于零,因而变量非负条件可以不必输入.选菜单File|SaveAs(或按F5)将输入的模型存盘,默认文件格式为扩展名.lg4.选File|Print(或按F7)可以在打印机上输出该模型.Lingo软件初级培训例1.1.1:1.求目标函数的最大值或最小值分别用MAX=…或MIN=…来表示;2.每个语句必须以分号“;”结束,语句可以跨行;3.变量名称必须以字母(A—Z)开头,由字母、数字(0-9)和下划线所组成,长度不超过32个字符,不区分大小写;4.可以给语句加上标号,例如:[OBJ]MAX=200*X1+300*X2;5.以!开头的语句是注释语句.6.默认变量非负,用@free(x)可以解除非负限制。7.LINGO模型以语句“MODEL:”开头,以语句“END”结束,对于比较简单的模型,这两个语句可以省略。Lingo软件初级培训LINGO的语法规定:例1.1.2:求函数22)2()2(yxz解:显然,当x=-2,y=2时,z取得最小值0.为了允许变量x取负数,用@free函数,程序如下:MIN=(x+2)^2+(y-2)^2;@free(x);求解得结果为:Localoptimalsolutionfoundatiteration:45Objectivevalue:0.4999617E-12计算误差使得目标函数值非零的最小值Lingo软件初级培训§1.2用LINGO编程语言建立模型PSE课题组中国石油大学(北京)§1.2用LINGO编程语言建立模型前面介绍的基本方法,优点是输入模型较直观,通常的数学表达式(目标函数表达式、约束条件)无须作大的变换即可直接输入.对于规模较小的规划模型,用直接输入的方式是有利的,如果模型的变量和约束条件个数都比较多,若仍然用直接输入方式,虽然也能求解,但是这种做法有明显的不足之处:模型的篇幅很长,不便于分析修改和扩展。例如,目标函数中有求和表达式ΣCijXij(i从1到10,j从1到20),若用直接输入的方式,将有200个系数与200个变量相乘再相加,需要输入长长一大串,既不便于输入,又不便于修改,别人看不懂,可读性较差.LINGO提供了建模语言,能够用较少语句描述目标函数和约束条件,为建立大规模数学规划模型提供了方便.我们以一个运输规划模型为例说明其用法。Lingo软件初级培训LINGO将集合(SET)的概念引入建模语言为建立大规模数学规划模型提供了方便。用LINGO语言编写程序来表达一个实际问题,称之为LINGO模型,下面以一个运输规划模型为例说明LINGO模型的基本组成。例1.2.1:某公司有6个供货栈(仓库),库存货物总数分别为60,55,51,43,41,52,现有8个客户各要一批货,数量分别为35,37,22,32,41,32,43,38.各供货栈到8个客户处的单位货物运输价如表1所示(元/每单位)。试确定各货栈到各客户处的货物调运数量,使总的运输费用最小.一、LINGO模型的基本组成Lingo软件初级培训V1V2V3V4V5V6V7V8W162674259W249538582W352197435W476739271W523957265W655228143表1.单位货物运输价(元)Lingo软件初级培训先建立本问题的数学模型,引入决策变量xij,代表从第i个货栈到第j个客户的货物运量.用符号cij表示从第i个货栈到第j个客户的单位货物运价,ai表示第i个货栈的最大供货量,dj表示第j个客户的订货量,则本问题的数学模型为:目标函数MIN约束条件非负条件xij≥0,i=1,2,…,6,j=1,2,…,86181ijijijxcz61818,,2,1,6,,2,1,ijijjiijjdxiaxLingo软件初级培训LINGO将集合(SET)的概念引入建模语言,集合是一组对象构成的组合,代表模型中的实际事物,并与数学变量及常量联系起来,是实际问题到数学的抽象。例题中6个货栈可以看成是一个集合,8个客户是另一个集合。定义集合时要明确三个方面内容,集合的名称,集合内的成员(组成集合的个体,也称成员),集合的属性(与该集合有关的变量及常量,相当于数组).此处先定义一个集合:WH/W1..W6/:AI;其中WH是集合名称,W1..W6表示集合内的成员共有6个,表示6个供货栈,“..”是特定的省略号(如果不用该省略号,也可以把集合成员一一罗列出来,成员之间用逗号或空格分开),AI是集合的属性,属性可以看成是一个一维数组,它有6个分量,分别表示各货栈现有货物的总数.集合、成员、属性的命名规则与变量相同,可按自己的意愿,用有一定意义的字母数字串来表示,式中“/”和“/:”是规定的语法规则,成员之间的逗号可用空格来代替.1.集合定义部分Lingo软件初级培训VD/V1..V8/:DJ;该集合表示客户,它有8个成员所组成,其属性DJ(有8个分量)表示各客户的需求量.以上两个集合称为初始集合,其属性都是一维数组.为了表示数学模型中的cij和xij,再定义一个表示运输关系(路线)的集合:LINKS(WH,VD):C,X;该集合以初始集合WH和VD为基础,称为衍生集合,类似于矩阵(二维数组),它的行数与集合WH的成员个数相等,它的列数与集合VD的成员个数相等,因而该集合共有48个成员,式中定义了两个属性:C和X,相应地,C和X都相当于二维数组,各有48个分量,C表示货栈i到客户j的单位货物运价,X表示货栈i到客户j的货物运量.再定义集合:Lingo软件初级培训衍生集合的定义语句有如下要素组成:(1)集合的名称;(2)对应的初始集合;(3)集合的成员(可以省略不写明);(4)集合的属性(可以没有).定义衍生集合时可以用罗列的方式将衍生集合的成员一一列出来,如果省略不写,则默认衍生集合的成员取它所对应初始集合的所有可能的组合,上述衍生集合LINKS的定义中没有指明成员,而它对应的初始集合WH有6个成员,VD有8个成员,因此LINKS成员取WH和VD的所有可能组合,即集合LINKS有48个成员完整的集合定义为:SETS:WH/W1..W6/:AI;VD/V1..V8/:DJ;LINKS(WH,VD):C,X;ENDSETS注:集合定义部分以语句SETS:开始,以语句ENDSETS结束,这两个语句必须单独成一行.ENDSETS的后面不加标点符号。Lingo软件初级培训2.数据初始化(数据段)以上集合中属性X(有48个分量)是决策变量,属性AI、DJ、C(分别有6、8、48个分量)都是已知数,需对它们赋以初始值,LINGO通过数据初始化部分来实现,语句格式为:DATA:AI=60,55,51,43,41,52;DJ=35,37,22,32,41,32,43,38;C=6,2,6,7,4,2,5,94,9,5,3,8,5,8,25,2,1,9,7,4,3,37,6,7,3,9,2,7,12,3,9,5,7,2,6,55,5,2,2,8,1,4,3;ENDDATA注:数据初始化部分以语句DATA:开始,以语句ENDDATA结束,这两个语句必须单独成一行.数据之间的逗号和空格可以互相替换.Lingo软件初级培训3.目标函数和约束条件目标函数中的表达式用LINGO语句表示为:MIN=@SUM(LINKS(I,J):C(I,J)*X(I,J));公式中@SUM是LINGO提供的内部函数,其作用是对某个集合的所有成员,求某个表达式的和,该函数需要两个参数,第一个参数为集合名称,指定对该集合的所有成员求和,如果此集合是一个初始集合,它有m个成员,则求和运算对这m个成员进行,第二个参数是一个表达式,表示求和运算对该表达式进行.此处@SUM的第一个参数是LINKS(I,J),表示求和运算对衍生集合LINKS进行,该集合的维数是二,共有48个成员,运算规则是:先对48个成员分别求表达式C(I,J)*X(I,J)的值,然后求和,表达式中的C和X是集合LINKS的两个属性,它们各有48个分量.如果表达式中参与运算的属性属于同一个集合,则@SUM语句中的索引(相当于矩阵或数组的下标)可以省略(隐藏),假如表达式中参与运算的属性属于不同的集合,则不能省略属性的索引.目标函数可以简写为MIN=@SUM(LINKS:C*X)Lingo软件初级培训)8,,2,1(61jdxijij81jijx约束条件Σxij≤ai实际上包含了6个不等式,LINGO语句为:@FOR(WH(I):@SUM(VD(J):X(I,J))=AI(I));语句中的@FOR是LINGO提供的内部函数,它的作用是对某个集合的所有成员各生成一个约束表达式,它有两个参数,第一个参数是集合名,表示对该集合的所有成员来生成约束表达式,此参数现为WH,它表示货栈,共有6个成员,故应生成6个约束表达式,第二个参数是约束表达式的具体内容,这里再调用@SUM函数,表示约束表达式的左边是求和,是对集合VD的8个成员求和,是对表达式X(I,

1 / 111
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功