参考一:LINGO软件入门_第1页
参考一:LINGO软件入门_第2页
参考一:LINGO软件入门_第3页
参考一:LINGO软件入门_第4页
参考一:LINGO软件入门_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章LINGO软件入门7.1LINGO软件基本用法LINGO软件简介:LINGO软件是一套专门用于求解最优化问题的软件包.LINGO可用于求解线性规划(LP),二次规划(QP),非线性规划(NLP),整数规划(IP),动态规划,多目标规划等,特别是对于变量或约束条件较复杂的大规模模型,提供了较好的选择.LINGO还是最优化问题的一种建模语言,包括许多常用的数学函数可以调用,并可以接受其他数据文件(如文本文件、Excel电子表格文件、数据库文件等),同时LINGO提供了与电子表格软件(如Excel等)的接口,能够直接集成到电子表格中使用.即使对优化方面知识了解不多的用户,也能够方便地建模和输入、有效地求解.LINGO基本用法:启动LINGO后,在主窗口上弹出标题为LINGOModel-LINGO1的窗口,称^LINGO的模型窗口,建立的模型都要在该窗口内编码实现.目标函数98x+277x-X2—0.3xx-2X2;约束条件 气+x2<100;x<2x;x,xeN;输入模型窗口LINGO1后的形式见下图.请注意以下几点:(1) LINGO总是根据“MAX=”或“MIN=”语句寻找目标函数,而其他语句都是约束条件(除注释语句和TITLE语句),所以语句顺序不重要.(2) LINGO中模型以“MODEL:”开始,以“END”结束.对简单的模型,这俩个语句也可以省略.(3) LINGO模型是由一系列语句组成,每个语句都以分号“;”结尾.(4) LINGO中不分大小写字母;其变量和行名由不超过32个字符(数字和字母)组成,且以字母开头;(5) 乘号不能省略,即系数与变量之间要加运算符“*”.(6) “!”开头的是注释行(注释语句),可以省略.(7) “口”为用户自定义的行号或行名,放在每行之前,可以省略(8) LINGO中以“@”都是函数调用,@GIN表示变量取正整数.默认情况下,LINGO规定变量是非负的.(我们将在后面详细介绍函数)(9) “TITLE”后加名字,可对此模型命名,可以省略现在我们用LINGO来解这个模型.点击工具条上的按钮◎,或从菜单中选择LINGO|Sovle即可.(若模型编译有错,会有提示)求解时会显示下图:

即可.(若模型编译有错,会有提示)求解时会显示下图:域名含义可能的显示ModelClass当前模型的类型〔诺参阅本书第1章)LP,QP>ILP,IQP+PILE,PIQP,NLP,INLP,PINLP〔以I开头表示IP.以口开头表示FIF)State当前解的状态^GlobalOptimum^, LocalOptimum*,^Feasible*7,^Infeasible*7(不可行),^Unbounded^C无界),Interrupted#(中断),^Undetermined*7(未确定)Objective当前解的目标函数值实数Infeasibility当前约束不满足的总量(不是不满足的约束的个数)实数〔即使该值=0,当前解也可能不可行.因为这个量中没有考虑用上下界形式给出的约束)Iterations目前为止的选代次数非仇格数域名含义可能的显示SolverType使用的特殊求解程序B-and-B(分枝定界法)Global(全局最优求解)Multistart(用多个初始点求解)BestObj目前为止找到的可行解的最佳目标函数值实数ObjBound目标函数值的界实数Steps特殊求解程序当前运行步数:分枝数(对B-and-B程序);子问题数(对Global程序);初始点数〔对Multistart程序)非务惬数Active有效步数非务收数关闭窗口,得到运行结果:Localoptimalsolutionfoundatiteration:找到最优解时迭代的次数.Objectivevalue:表示所求的最优目标值(11077.50).Variable:变量名Value:最优解中各变量(Variable)的值.Row:约束条件行名.ReducedCost:当该非基变量增加一个单位时(其他非基变量保持不变)目标函数减少的量(对max型问题)SlackorSurplus:约束对应得松弛变量的值.(第三行取0,对于最优解来讲,第三个约束取等号,为紧约束)DualPrice:对偶价格的值.表示当对应约束有微小变动时,目标函数的变化率,若其数值为X,表示对应约束中不等式右端项若增加一个单位,目标函数将增加X个单位(max型问题).7.1.3在LINGO中使用集合:1、 LINGO模型的基本组成LINGO也是一种建模语言,称为矩阵生成器,通过集合的引入,它可使输入较大规模问题的过程得到简化.LINGO模型由5段组成:(1) 、集合段:是用于定义变量.以“SETS:”开始,以“ENDSETS”结束.定义集合变量,元素,和属性.集合名/元素/:属性元素:类似于数组的下标.属性:定义集合的变量,类似于数组.属性之间必须用逗号或空格隔开.(2) 、目标与约束段:定义目标函数,约束条件.(3) 、数据段:用于给变量赋值.以“DATA:”开始,以“ENDDATA”结束.对集合的属性(数组)输入必要的常数数据.attributelist(属性)=value_list;(常数列表)(value_list)中数据用逗号或空格隔开.*在此段也可引入参数,“变量名=?”在运行时才对参数赋值.但这仅用于单个变量赋值,而不能用于属性变量(数组).(4) 、初始段:以'init:”开始,以轮ndinit”结束.对集合的属性(数组)定义初值(5) 、计算段:以“CALC:”开始,以“ENDCALA”结束.对一些原始数据进行“预处理”.*计算段中语句是顺序执行,不能交换位置.*计算段中只能直接使用赋值语句.2、 集合的定义:变量使用之前需先定义,而LINGO中的变量是通过集合来定义的,变量皆为向量或由向量生成的二维数组.如:Demand/1..6/:a,b,d:集合名为Demand,共6个元素,a,b,d为属于此集合的变量,其为含6个元素的向量.Supply/1,2/:x,y,e:集合名为Supply,共2个元素,x,y,e为属于此集合的变量,其为含2个元素的向量. 基本集合Link(demand,supply):c:集合link是由集合demand和supply生成的新集合,为二维数组,其元素由demand和supply的笛卡尔积构成,即

变量c即为6*2的矩阵 派生集合例、某公司有6个建筑工地,位置坐标为(ai,bi)(单位:公里),水泥日用量di(单位:吨)i123456a1.258.750.55.7537.25b1.250.754.7556.57.75d3547611现有2料场,位于A(5,1),B(2,7),记(xj,yj),j=1,2,日储量ej各有20吨.r1r1)r1*11*2)22*12*23(1 2)=3*13*244*14*255*15*2"J(6*16*2j共6*2=12个元素假设从料场到工地之间均有直线道路相连,试制定每天的供应计划,即从A,B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小.解:设决策变量:c(料场j到工地i的运量)则其为12维.则规划模型为ijminEEc[(x-a)2+(y一b)2]i/2ij jijij=1i=1s.t Ec=d,i=16j=iE:e.,j=1,2i=1其LINGO模型为:(1)集合段:我们定义需求点demand和供应点supply两个集合,分别有6个和2个元素,Demand/1..6/:a,b,d; 其中a为该集合的属性(变量),表示6个工地位置的横坐标的集合,是一个有6个元素的向量.Supply/1,2/:x,y,e; 其中x该集合的属性(变量),表示2个料场位置的横坐标的集合,是一个有2个元素的向量.运送量c的集合是一个6*2的矩阵,它需要利用集合demand和supply,定义一个新集合,ij定义c^为这个新集合的属性:Link(demand,supply):c;数据段:给已知变量赋值.如a,b=1.25,1.25,8.75,0.75,0.5,4.75,5.75,5,3,6.5,7.25,7.75;也可写成a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;注LINGO对数据是按列赋值的,而不是按行.分割数据可用空格,逗号,回车.目标与约束段:目标函数min盘6c[(x-a)2+(y-b)2]1/2用lingO语句表示为:ij jijij=1i=1min=@sum(link(i,j):c(i,j)*((x(j)-a(i))”2+(y(j)-b(i))"2)”(1/2));@sum:求和函数.这个函数的功能是对语句中冒号“:”后面的的表达式,按照“:”前面的集合指定的下标进行求和.“@sum”相当于“£”,“link(i,j)”相当于“i,jElink”约束条件s.t 22c「=气,i=16用LINGO语旬表示为:j=i•••@for(demand(i):@sum(supply(j):c(i,j))=d(i););@for:循环函数.意思是对冒号“:”前面的集合的每个元素(下标),对于“:”后面的约束关系式都要成立.注@for和@sum可以嵌套使用.@free函数取消了变量x,y非负限制.初始段:“X,Y=5,1,2,7;”语旬的实际赋值顺序是X=(5,2),Y=(1,7).作为寻找最优解的起始值.模型如下:MODEL:TitleLocationProblem;sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:!locationsforthedemand(需求点的位置);a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;!quantitiesofthedemandandsupply(供需量);d=3,5,4,7,6,11;e=20,20;enddatainit:!initiallocationsforthesupply(初始点);x,y=5,1,2,7;endinit!Objectivefunction(目标);[OBJ]min=@sum(link(i,j):c(i,j)*((x(j)-a(i))“2+(y(j)-b(i))“2)"(1/2));!demandconstraints(需求约束);@for(demand(i):@sum(supply(j):c(i,j))=d(i););!supplyconstraints(供应约束);@for(supply(i):@sum(demand(j):c(j,i))<=e(i););@for(supply:@bnd(0.5,X,8.75);@bnd(0.75,Y,7.75););END运行,得局部最优解X(1)=7.249997,X(2)=5.695940,Y(1)=7.749998,Y(2)=4.928524,,最小运量=89.8835(吨公里).NLP中局部最优解不一定就是全局最优解,可通过“LINGO|Options|GlobalSolver|UseGlobalSolver”菜单命令激活全局最优求解程序.7.1.4LINGO的运算符和函数:在此我们主要介绍前六种函数1、算术运算符及其优先级:算术运算符:+(加法),一(减法或负号),*(乘法),/(除法)八求幕)关系运算符:<(即<=,小于等于),二(等于),>(即>二,大于等于)逻辑运算符:#AND#(与),#OR#(或),#NOT#(非),#EQ#(等于),#NE#(不等于),#GT#(大于),#GE#(大于等于),#LT#(小于),#LE#(小于等于).结果只有“真”(1)和“假”(0)两个值。(用在循环语句中,及过滤条件)优先级运算符最高#not#一(负号)A*/+-#EQ##NE##GT##GE##LT##LE##AND#,#OR#最低< = >2、数学函数:@abs(x)返回x的绝对值@sin(x)返回x的正弦值,x采用弧度制@cos(x)返回x的余弦值@tan(x)返回x的正切值@exp(x)返回常数e的x次方@log(x)返回x的自然对数@lgm(x)返回x的gamma函数的自然对数@sign(x)如果x<0返回-1;否则,返回1@floor(x)返回x的整数部分.当x>=0时,返回不超过x的最大整数;当x<0时,返回不低于x的最大整数.@smax(x1,x2,…,xn)返回x1,x2,…,xn中的最大值@smin(x1,x2,…,xn)返回x1,x2,…,xn中的最小值例求向量[5,1,3,4,6,10]前5个数的最小值,后3个数的最大值.model:data:N=6;enddatasets:number/1..N/:x;endsetsdata:x=5134610;enddataV=@min(number(I)|I#le#5:x);W=@max(number(I)|I#ge#N-2:x);end@sqr(x):平方函数,返回x的平方值@sqrt(x):开方根函数,返回x的开方根值3、 变量界定函数变量界定函数实现对变量取值范围的附加限制,共4种:@bin(x)限制x为0或1@bnd(L,x,U)限制LWxWU@free(x)取消对变量x的默认下界为0的限制,即乂可以取任意实数@gin(x)限制x为整数4、 集和操作函数集循环函数遍历整个集进行操作.其语法为@function(slc:e);©function相应于下面罗列的四个集循环函数之一;s是要遍历的集;c是用逻辑表达式描述的过滤条件.e可以包含多个表达式,其间用逗号隔开.这些表达式将被作为约束加到模型中.@for(集合元素的循环函数):对集合s的每个元素独立地生成表达式,表达式由e描述.@min(集合属性的最小值函数):返回指定的集合s的一个表达式的最小值.@max(集合属性的最大值函数):返回指定的集合,的一个表达式的最大值.@sum(集合属性的求和函数):返回集合s的一个表达式的和.@prod((集合属性的求和函):返回集合s的一个表达式的积.@in(s:el):如果元素el在指定集s中,返回1;否则返回0.@index(s:ek):返回成员ek在集s中的索引值(顺序号).@size(s):该函数返回集s的成员个数.5、 输入和输出函数@ole函数:是从EXCEL中引入或输出数据的接口函数,它是基于传输的OLE技术.6、 其它函数@if(逻辑表达式,表达式为真时的值,表达式为假时的值)'4x,0<x<100例f(x)=]10+3x,100<x<200、5+2x,x>200用LINGO语句表示为:f=@if(x#le#100,4*x,@if(x#le#200,10+3*x,5+2*x));7.2LINGO与Excle的链接在实际中模型中所需的数据可能以一定的格式保存在独立的文件中,同时也可能要求将计算的结果输入到指定文件中保存下来.LINGO与外部文件的输入输出的三种方法:Edit|PasteSpecial@File:输入数据 @Text:输出结果@ole:与电子表格的链接在此仅介绍第3种,与Excle的链接.LINGO通过@OLE函数与Excle链接,该函数只能在LINGO模型的集合段,数据段,初始段使用,其格式为:@OLE(‘文件名.xls’,‘数据的单元范围’)Excle到LINGO:.集合段:直接引用“@OLE(„.)”.数据段,初始段:变量(或属性)="@OLE(„.)”将LINGO结果输到Excle:数据段:"@OLE(„.)”=变量(或属性)注:‘文件名.xls’应包括完整的路径名(字符不超过64),但当该Excle文件打开时,可以省略路径,默认为当前文件.例现在WW(WirelessWidgets)公司拥有6个仓库,向其8个销售商供应它的产品.要求每个仓库供应不能超量,每个销售商的需求必须得到满足.WW公司需要决策具体的从每个仓库运输多少产品到每个销售商.以使得所花的运输费用最少?并将结果返回到文件“BOOK1”中.数据见文件cname▼A1ABCDEFGHI1仓库编号产品库存量销售商编专产品需求量21601353I2I55237435132254434326541541766328743983310每件产品运输费用11销售商[右]vlv2v3v4v5v6v7v8121626425981324958582314352174336154767927171652397265417655281435解:建立模型变量%:第i个仓库到第顶个销售商的运量 a「运费b—第i个仓库的库存量 c-第个销售商的需求量i j目标函数minz=金8axi=1j=1约束条件:仓库供应不能超量£x<bj=1满足销售商的需求:£x<C.i=1为了能将LINGO与Excle间传递数据,需对文件“BOOK1”中的数据进行命名.具体做法:用鼠标选中表格A2:A7所在的6个单元格,然后选择Excle的“插入|名称|定义”,弹出一对话框,输入名称“cname”.同理将B

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论