您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 02-第二章-Lingo基础
主讲人:雒兴刚东北大学系统工程研究所Email:luoxinggang@ise.neu.edu.cnTel:83682292优化软件与应用第二章Lingo基础简介美国芝加哥(Chicago)大学的LinusSchrage教授于1980年前后开发,后来成立LINDO系统公司(LINDOSystemsInc.),网址:(V6.1)LINGO:LinearINteractiveGeneralOptimizer(V8.0)LINDOAPI:LINDOApplicationProgrammingInterface(V2.0)演示(试用)版、学生版、高级版、超级版、工业版、扩展版…(求解问题规模和选件不同)可以求解的数学模型LINGOLINDO优化模型线性规划(LP)非线性规划(NLP)二次规划(QP)连续优化整数规划(IP)第二章Lingo基础Lingo求解过程LPQPNLPIP全局优化(选)ILPIQPINLPLINDO/LINGO预处理程序线性优化求解程序非线性优化求解程序分枝定界管理程序1.确定常数2.识别类型1.单纯形算法2.内点算法(选)1、顺序线性规划法(SLP)2、广义既约梯度法(GRG)(选)3、多点搜索(Multistart)(选)第二章Lingo基础Lingo基本知识简介LINGO有两种命令格式:一种是常用的Windows模式,通过下拉式菜单命令驱动LINGO运行,界面是图形式的,使用起来也比较方便;另一种是命令行(Command-Line)模式,仅在命令窗口(CommandWindow)下操作,通过输入行命令驱动LINGO运行。由于其使用字符方式输入,初学者往往不太容易掌握。在这里,我们主要介绍在菜单驱动模式下LINGO的使用方法。第二章Lingo基础入门:一个简单的例子1桶牛奶3公斤A112小时8小时4公斤A2或获利24元/公斤获利16元/公斤x1桶牛奶生产A1x2桶牛奶生产A2获利24×3x1获利16×4x2原料供应5021xx劳动时间48081221xx加工能力10031x决策变量目标函数216472xxzMax每天获利约束条件非负约束0,21xx线性规划模型(LP)时间480小时至多加工100公斤A150桶牛奶每天第二章Lingo基础入门:一个简单的例子打开Lingo界面:外层是主框架窗口,包含了所有菜单命令和工具条,其它所有的窗口将被包含在主窗口之下。在主窗口内的标题为LINGOModel–LINGO1的窗口是LINGO的默认模型窗口,建立的模型都都要在该窗口内编码实现。第二章Lingo基础入门:一个简单的例子参照数学模型,在Lingo的模型窗口中输入模型代码:Max=72*x1+64*x2;X1+x2=50;12*x1+8*x2=480;3*x1=100;5021xx48081221xx10031x216472xxzMax0,21xx然后点击工具条上的执行按钮即可。第二章Lingo基础入门:一个简单的例子执行结果:使用的内存计算时间非零系数个数约束个数变量个数模型类型求解状态目标值迭代次数第二章Lingo基础入门:一个简单的例子执行结果:当该非基变量增加一个单位时目标函数减少的量(最优解时,=0)最优解约束条件左面和右面的差值,“资源”剩余为零的约束为紧约束(有效约束),这里第3个约束(加工能力)有剩余。影子价格:最优解下“资源”增加1单位时“效益”的增量。原料增1单位,利润增48时间加1单位,利润增2能力增减不影响利润•Q1:35元可买到1桶牛奶,要买吗?•Q2:聘用临时工人付出的工资最多每小时几元?第二章Lingo基础入门:一个简单的例子如果说明一个变量X是整型,可以用函数:@GIN(X);如果说明一个变量X是0-1型,可以用函数:@BIN(X);第二章Lingo基础练习1:用简单模型实现线性规划用Lingo简单来实现线性规划建模(第一章的生产门和窗例子);Maximziez=300x1+500x2SubjecttoX1=4;2X2=12;3x1+2x2=18;x1,x2=0;Max=300*x1+500*x2;X1=4;2*x2=12;3*x1+2*x2=18;x2=0;x1=0;某工厂要生产两种产品:门和窗;每扇门需要在车间1加工1小时,车间3加工3小时;每扇窗需要在车间2加工2小时,车间3加工2小时;车间用于生产这两种产品的时间:车间1为4小时,车间2为12小时,车间3为18小时;每扇门的利润300元,窗的利润500元;如何确定产品周生产计划,使总利润最大?第二章Lingo基础练习2:用简单模型实现线性规划用Lingo简单模型来实现线性规划建模(上一章的新产品选择问题);Maxz=5*x1+7*x2+3*x3s.t.y1+y2+y3=2;x1=7*y1;x2=5*y2;x3=9*y3;3*x1+4*x2+2*x3=30+M*y;4*x1+6*x2+2*x3=40+M*(1-y);x1,x2,x3=0;y1,y2,y3=1or0;y=1or0;Max=5*x1+7*x2+3*x3;M=255;y1+y2+y3=2;x1=7*y1;x2=5*y2;x3=9*y3;3*x1+4*x2+2*x3=30+M*y;4*x1+6*x2+2*x3=40+M*(1-y);@BIN(y1);@BIN(y2);@BIN(y3);@BIN(y);例:某公司的新产品选择问题。某公司开发了三种新产品,相关数据如表。管理层决定,选择其中两种产品进行生产,且两个工厂中必须选出一个专门生产新产品,那么如何选择产品、工厂并确定各种产品的周产量,使得总利润最大。工厂单位产品的生产时间(小时)每周的可用生产时间(小时)产品1产品2产品3工厂134230工厂246240单位利润(千)573每周可销售量769第二章Lingo基础练习3:实现非线性规划max=x*y;2*(x+y)=400;参看上一章的面积最大例子,用简单模型语言表示:给定400米长的绳子,用来围成一个矩形菜地,问长和宽各为多少时面积最大。第二章Lingo基础Lingo的文件保存类型“LG4”表示LINGO格式的模型文件,是一种特殊的二进制格式文件,保存了我们在模型窗口中所能够看到的所有文本和其他对象及其格式信息,只有LINGO能读出它,用其他系统打开这种文件时会出现乱码“LDT”表示数据文件“LTF”表示命令脚本文件“LGR”表示报告文件“MPS”:TheMPSfileformatisanindustrystandardformatdevelopedbyIBM除“LG4”文件外,这里的另外几种格式的文件其实都是普通的文本文件,可以用任何文本编辑器打开和编辑第二章Lingo基础用Lingo编程语言建立模型Lingo的基本模型语法的优点和缺点优点:直观,简单缺点:模型变量和约束很多怎么办?和Excel的比较下面通过一个例子来说明。10020011ijijijcx第二章Lingo基础用Lingo编程语言建立模型某公司有6个仓库,库存货物分别为(605551434152),现有8个客户各要一批货,数量分别为(3537223241324338),各仓库到8个客户的单位货物运输价格如表。试确定各仓库到各客户处的货物调运数量,使总的运输费用最小。第二章Lingo基础用Lingo编程语言建立模型第二章Lingo基础用Lingo编程语言建立模型6811minijijijzcx811,2,...6ijijxai61,1,2,...8ijjixdjijx第i个仓库到第j个客户的货运量对每个仓库,运出的货物总量不超库存对每个顾客,收到的货物总量必须等于订货数量数学模型:第二章Lingo基础用Lingo编程语言建立模型集合简介Lingo使用集合(Set)的概念;集合是一组相关对象的组合,可与数学变量和常量联系起来;例如,例中6个仓库、8个顾客均可认为是集合;集合的定义使用集合必须定义;定义的三要素:名称;成员(组成集合的个体是?);属性(与集合有关的变量或常量,相当于数组);第二章Lingo基础用Lingo编程语言建立模型集合的定义例如,例中的仓库集合可定义为:WH/W1..W6/:AI;名称成员是W1,W2,W3,W4,W5,W6,两个点表示省略号;也可以全部列出。集合属性,可以看作一个一维数组,有6个分量,表示仓库现有货物的数量类似,客户集合定义为:VD/V1..V8/:DJ;各客户对于现有货物的需求量注意:也可以写成WH/1..6/:AI;WH/1,2,3,4,5,6/:AI;WH/1,5,6/:AI;WH/a..c/:AI;H/a,k,c/:AI;等写法不支持WH/0..5/:AI;试试运行(加SETS:和ENDSETS)VD/V1..V8/:DJ,K;第二章Lingo基础用Lingo编程语言建立模型集合的定义为表示仓库到客户的运输关系,定义:LINKS(WH,VD):C,X;LINKS(WH,VD)表示一个派生集合,名字叫做LINKS,成员是两个现有Set的组合,因此共有48个成员,对应WH行,VD列,与二维数组类似。属性有2个,即C和X(语法:逗号隔开)。C和X都相当于一个二维数组(6×8),C表示价格矩阵,X表示决策变量矩阵。一般语句后加分号第二章Lingo基础用Lingo编程语言建立模型集合的定义因此,本例的集合定义为:SETS:WH/W1..W6/:AI;VD/V1..V8/:DJ;LINKS(WH,VD):C,X;ENDSETS集合定义以SETS开始,ENDSETS结束。二者必须单独成行,前者后面加冒号,后者后面不加标点。SETS不区分大小写,建议用大写。后面的保留字同第二章Lingo基础用Lingo编程语言建立模型数据初始化例中,属性X是决策变量,AI,DJ,C是已知常量,初始化语句为:DATA:AI=605551434152;DJ=3537223241324338;C=626742954953858252197433767392712395726555228143;ENDDATA数据中间也可以用逗号同样,初始化以DATA开始,ENDDATA结束。二者必须单独成行,前者后面加冒号,后者后面不加标点。第二章Lingo基础用Lingo编程语言建立模型目标函数例中,目标函数可表示为:MIN=@SUM(LINKS(I,J):C(I,J)*X(I,J));Min表示对右端表达式求最小值;求最大值用Max;@sum是Lingo内部函数,功能是对集合的所有成员求和。该函数有两个参数,中间用冒号隔开第一个是集合名称,即LINKS(I,J),求和对其集合成员进行第二个是表达式,表示求和运算对该表达式进行;I和J是语句中的索引,相对于矩阵的下标;第二章Lingo基础C(1,1)*X(1,1)+C(1,2)*X(1,2)+…+C(6,8)*X(6,8)用Lingo编程语言建立模型约束例中,库存约束可表示为:@FOR(WH(I):@SUM(VD(J):X(I,J))=AI(I));@FOR是Lingo内部函数,功能是对某个集合的所有成员分别生成一个约束表达式;该函数有两个参数,中间用冒号隔开第一个是集合名称,表示对其所有成员生成一个约束。这里WH有6个成员,故能生成6个约束;第二个是表达式,表示约束表达式,这里嵌套调用了@sum;第二章Lingo基础约束1:X(1,1)+X(1,2)+..X(1,8)=AI(1);约束2:X(2,1)+X(2,2)+..X(2,8)=AI(2);…约束6:X(6,1)+X(6,2)+..X(6,8)=AI(6);用Lingo编程语言建立模型约束类似地,需求量约束可表示为:@FOR(VD(J):@SUM(WH(
本文标题:02-第二章-Lingo基础
链接地址:https://www.777doc.com/doc-4815146 .html