资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,单击此处编辑母版标题样式,*,*,安阳师范学院数学与统计学院,运筹学实验,LINGO,入门,LINGO,的菜单,用,LINGO,编程语言建立模型,LINGO,的运算符和函数,LINGO,的基本用法,1,1.1,LINGO,入门,第一章,LINGO,的基本用法,1.LINGO,的主要功能特色:,(1),既能求解线性规划问题,也有较强的求解非线性规划 问题的能力;,(2),输入模型简练直观;,(3),运行速度快,计算能力强;,(4),内置建模语言,提供几十个内部函数,从而能以较少 语句,较直观的方式描述较大规模的优化模型;,(5),将集合的概念引入编程语言,很容易将实际问题转换 为,LINGO,模型;,(6),能方便地与,Excel,、数据库等其他软件交换数据;,2,建模时需要注意的几个基本问题:,(1),尽量使用实数优化模型,减少整数约束和整数变量的,个数;,(2),尽量使用光滑优化模型,减少非光滑约束的个数;,如:尽量少地使用绝对值函数、符号函数、多个变量求最大(或最小)值、四舍五入函数、取整函数等,.,(3),尽量使用线性优化模型,减少非线性约束和非线性变量的个数(如,x,/,y,5,改为,x,5,y,);,(4),合理设定变量的上下界,尽可能给出变量的初始值;,(5),模型中使用的单位的数量级要适当(如小于,10,3,);,3,【,约束条件,】,2.LINGO,的基本用法,.,例,1.,某工厂有两条生产线,分别用来生产,M,和,P,两种型号的产品,利润分别为,200,元,/,个和,300,元,/,个,生产线的最大生产能力分别为每日,100,和,120,,生产线每生产一个,M,产品需要,1,个劳动日(,1,个工人工作,8,小时为,1,个劳动日)进行调试、检测等工作,而每个,P,产品需要,2,个劳动日,该厂工人每天共计能提供,160,劳动日,假如原材料等其他条件不受限制,问应该如何安排生产计划,才能使获得的利润最大?,解:,设两种产品的生产量分别为,x,1,和,x,2,,则该数学模型为,【,目标函数,】,再用,LINGO,处理,4,输入,LINGO,如下,:,LINGO,处理结果,:,5,LINGO,的语法规定:,(1),求目标函数的最大值和最小值分别用,MAX=,或,MIN=,来表示;,(2),每个语句必须以分号“,;,”,结束,每行,可以,有多个语句,语句,可以,跨行;,(3),变量名称必须以字母,(A,-,Z),开头,由字母、数字,(0,-,9),和下划线“,_,”,组成,长度,不超过,32,个字符,,不区分,大小写;,(4),可以,给语句加上标号,,例如,OBJ MAX=,;,(5),以“,!,”,开头,,以“,;,”,结束的语句是注释语句,;,(6),如果对变量的取值范围没有作特殊说明,则,默认,所有决策变量都,非负,;,(7)LINGO,模型以语句“,MODEL:,”,开头,以“,END,”,结束,对于比较简单的模型,这两句可以省略;,6,LINGO,求解报告,:,缩减成本系数,(,相差值,),松弛或剩余,注,:,最优解中变量的缩减成本系数值自动取零,.,约束条件中,对于,“,=,”,不等式,称之为,剩余,(Surplus),.,不等式左右两边值相等时,松弛和剩余的值为,0,;,如果约束条件无法满足,则松弛和剩余的值为,负,.,影子,(,对偶,),价格,含义,:,如果该生产线最大生产能力增加,1,能使目标函数值增加,50.,7,1.2,了解,LINGO,的菜单,新建,打开,保存,打印,剪切,复制,粘贴,取消,重做,查找,定位,匹配,括号,求解,显示,答案,模型,图示,选项,设置,窗口,后置,关闭所,有窗口,平铺,窗口,在线,帮助,上下文,相关帮助,文件菜单,编辑菜单,LINGO,菜单,窗口菜单,帮助菜单,8,输出特殊格式文件,MPS,格式文件,MPI,格式文件,IBM,开发的数学规划文件,标准格式,LINDO,公司制定的数学规划,文件格式,用户基本信息,该命令弹出一个对话框,要求,输入用户名和密码,(,这些信息,在用,ODBC,函数访问数据库要用到,),9,选择性粘贴,该命令把,Window,剪贴板中的内容插入到光标所在位置,.,插入新对象,链接,修改模型内插入对象的链接性质,.,对象的性质,在模型中选择一个链接或嵌入对象,用本命令可以查看和修改这个对象的属性,.,10,灵敏度分析,该命令产生当前模型的灵敏度分析报告,:,(1),最优解保持不变的情况下,目标,函数的系数变化范围,;,(2),在影子价格和缩减成本系数都,不变的前提下,约束条件右边的,常数变化范围,;,例,.,做下列模型的灵敏度分析,MAX=200*X1+300*X2;,X1=100;,X2=120;,X1+2*X2=160;,11,(,不限,),注,:,灵敏性分析耗费相当多的求解时间,因此当速度很关键时,就没有必要激活它,【,目标函数系数变化范围,】,【,约束条件右边常数的变化范围,】,12,生成模型的展开形式,为当前模型生成一个用代数表达式表示的完整形式,即,LINGO,将所有基于集合的表达式(目标函数和约束条件)扩展成为等价的完全展开的普通数学表达式模型,.,生成图形,由模型生成图形,以矩阵形式显示模型的,系数,.,调试,模型统计资料,调试结果,找到,充分行,(,Sufficient Rows,),和,必要行,(,Necessary Rows,).,查看(以为本方式显示模型内容),13,命令行窗口,主要是为用户交互地测试命令脚本而设计,.,(通常不用),状态窗口,变量,约束,非零系数,内存使用量,已运行时间,求解器状态,扩展求解器状态,14,1.3,用,LINGO,编程语言建立模型,一、,LINGO,模型的基本组成,.,例,2.,某公司有,6,个供货栈,库存货物总数分别为,60,55,51,43,41,52,现有,8,个客户各要一批货,数量分别为,35,37,22,32,41,32,43,38.,各供货栈到,8,个客户处的单位货物运输价见下表,3,4,1,8,2,2,5,5,W6,5,6,2,7,5,9,3,2,W5,1,7,2,9,3,7,6,7,W4,3,3,4,7,9,1,2,5,W3,2,8,5,8,3,5,9,4,W2,9,5,2,4,7,6,2,6,W1,V8,V7,V6,V5,V4,V3,V2,V1,客户,货栈,试确定各货栈到各客户处的货物调运数量,使总的运输费用最小,15,解:,设,x,ij,从第,i,个货栈到第,j,个客户的运货量,c,ij,表示从第,i,个货栈到第,j,个客户的单位货物运价,a,i,表示第,i,个货栈的最大供货量,d,j,表示第,j,个客户的订货量,模型如下,16,1.,集合定义部分,集合,是一组相关对象构成的组合,集合在使用之前需要预先给出定义,初始集合的定义,三要素,:,集合的,名称,集合的,元素,集合的,属性,(,可视为,与该集合有关的变量或常量,).,集合分为,初始,(,基本,原始,),集合,和,衍生,(,派生,),集合,初始集合的定义格式,:,集合的名称,/,集合的元素,/:,集合的属性,;,例,.,定义例,2,的货栈集合,a,i,和,d,j,WH/W1,.,W6/:AI;,VD/V1,.,V8/:DJ;,17,衍生集合的定义,四要素,:,集合的,名称,对应的初始集合,集合的,元素,(,可以省略,),集合的,属性,(,可以没有,).,例,.,定义集合,表示例,3,中从第,i,个货栈到第,j,个客户的运货量,x,ij,和第,i,个货栈到第,j,个客户的单位货物运价,c,ij,.,LINKS,(WH,VD),:,C,X;,注,:,如果集合的,元素省略,不写,则默认衍生集合的元素取它所,对应初始集合的所有可能组合,.,18,2.,数据初始化,.,如何给例,2,中的集合,AI,DJ,C,X,赋值,?,AI=60,55,51,43,41,52;,DJ=35,37,22,32,41,32,43,38;,C=,6,2,6,7,4,2,5,9,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,;,DATA:,ENDDATA,注,:,数据初始化部分以“,DATA:,”,开始,以,ENDDATA,结束,,这两个语句必须,单独成一行,;,数据之间的,逗号,和,空格,可以替换,19,3.,目标函数和约束条件,.,例,2,的目标函数:,用,LINGO,语句表示为:,MIN,=,SUM,(LINKS(I,J):C(I,J)*X(I,J);,注,:,SUM,是,LINGO,提供的内部函数,其作用是对某个集合的所有成员,求指定表达式的和,.,SUM,有两个参数:,集合名称,和,表达式,如果表达式中参与运算的属性属于同一个集合,则,SUM,的索引可以省略,.,即,MIN,=,SUM,(LINKS:C*X);,20,例,2,的约束条件:,用,LINGO,语句表示为:,FOR,(WH(I):,SUM,(VD(J):X(I,J)=AI(I);,注,:,FOR,是,LINGO,提供的内部函数,其作用是对某个集合的所有成员分别生成一个约束表达式,.,FOR,有两个参数:,集合名,和,约束表达式,这里的集合名表示对该集合所有成员生成对应约束表达式,问,:,语句中的,I,J,能不能省略,?,用,LINGO,语句表示为:,FOR,(VD(J):,SUM,(WH(I):X(I,J)=DJ(J);,21,1.4,LINGO,的运算符和函数,一、,LINGO,的常用运算符,.,1.,算术运算符,.,*/+,-,2.,逻辑运算符,.,分 类,运算符,作 用,运算对象是两个数,#EQ#,两个运算对象,相等,时为真,否则为假,#NE#,两个运算对象,不相等,时为真,否则为假,#GT#,左边,大于,右边时为真,否则为假,#GE#,左边,大于或等于,右边时为真,否则为假,#LT#,左边,小于,右边时为真,否则为假,#LE#,左边,小于或等于,右边时为真,否则为假,预算对象是逻辑值或逻辑表达式,#NOT#,单目运算符,,表示对运算对象取反(即真变假,假变真),#AND#,两个运算对象,都真,时为真,否则为假,#OR#,两个运算对象,都假,时为假,否则为真,逻辑运算符优先级别:,#NOT#,最高,,#AND#,和,#OR#,最低,22,3.,关系运算符,.,关系运算符通常用在条件表达式中,用来指定约束条件表达式左边与右边必须满足的关系,.,有以下三种:,=,注:,LINGO,没有单独的“,”,关系,如果出现了单个,“,”,,,LINGO,认为是省略了“,=”.,如果需要严格小(大)于关系,如,A,严格小于,B,,可以表示成:,这里 是一个小的正数,它的值依赖于模型中,A,小于,B,多少才算不等,.,例,.,计算,2#GT#3#AND#4#GT#2,结果为,0,(,FALSE,),23,二、数学函数,.,函 数 名,返 回 值,ABS(X),返回,X,的绝对值,SIN(X),返回,X,的正弦值,COS(X),返回,X,的余弦值,TAN(X),返回,X,的正切值,LOG(X),返回,X,的,自然对数,值,EXP(X),返回,e,X,的值(,e,为自然常数,,e=2.7182818,),SIGN(X),返回,X,的符号值,SMAX(X1,X2,Xn),返回这一系列数中的最大值,SMIN(X1,X2,Xn),返回这一系列数中的最小值,FLOOR(X),返回,X,的整数部分(向最靠近,0,的方向取整),LGM(X),返回,X,的,gamma,函数的自然对数值,MOD(X,Y),返回,X,除以,Y,的余数(,X,和,Y,都是整数),POW(X,Y),返回指数,X,Y,的值(该函数可用,XY,代替),SQR(X),返回,X,的平方值(该函数可用,X2,代替),SQRT(X),返回,X,的正的平方根(该函数可用,X(1/2),代替),24,三、概率函数,.,函 数 名,返 回 值,PSN(X),返回标准正态分布的分布函数,PPS(A,X),返回参数为,A,的泊松分布函数值,当,X,不是整数时,采用线性插值进行计算,PBN(P,N,X),返回参数为,P,N,的二项分布的分布函数值,PHG(POP,G,N,X),返回参数为,POP,G,N,的超几何分布的分布函数值,PFD(N,D,X),返回参数自由度为,N,和,D,的,F,分布的分布函数值,PCX(N,X),返回自由度为,N,的,x,2,分布分布函数值,PTD(N,X),返回自由度为,N,的,t,分布的分布函数值,RAND(SEED),返回,0-1,之间的伪随机数,SEED,为种子,QRAND(SEED),返回,0-1,之间的多个拟均匀随机数,(,只能用在数据段,),PEB(A,X),略,PEL(A,X),PPL(A,X),PFS(A,X,C),PSL(X),25,四、集合操作函数,.,函 数 名,返 回 值,FOR(s:e),该函数常用在约束条件中,表示对集合,s,中的每个成员生成一个约束条件表达式,e,SUM(s:e),对集合,s,中的每个成员,分别得到表达式,e,的值,然后返回所有这些值的和,MAX(s:e),然后返回所有这些值中的最大值,MIN(s:e),然后返回所有这些值中的最小值,PROD(s:e),然后返回所有这些值的乘积,IN(s:e1),如果成员,e1,在集合,s,中,则返返回,1,否则返回,0,SIZE(s),返回集合,s,中的成员个数,INDEX(s:ek),返回成员,ek,在集合中的顺序号,(,索引值,),该值在,1,和集合,s,的成员个数之间,如果集合,s,中没有该元素,则给出出错信息,WRAP(I,N),若,I1,N,返回,I;,否则,返回,J=I,-,N*K(K,为整数,J1,N,),上表中,前五个函数的表示形式为,:,函数名,(,集合名,|,条件,:,表达式,),例,.“FOR(VD(J)|J#NE#5:,表达式,e);”,表示什么含义,?,26,五、变量定界函数,.,函 数 名,返 回 值,BIN(X),限制,X,为,0,或,1.,【,该函数在,0-1,规划中特别有用,】,BND(L,X,U),限制,LX U.,【,可用作约束条件,】,GIN(X),限制,X,为整数,.,【,该函数在整数规划中特别有用,】,FREE(X),取消对变量,X,的限制,(,即,X,可取任意实数值,),注:,BND,函数可以用约束条件代替,但使用,BND,函数表达变量的取值范围比使用约束条件的求解,速度快,且不计入约束条件的数目中,.,FREE(X),的作用是取消对变量,X,的默认非负设置,.,例,.,求函数,z,=(,x,+2),2,+,(,y,-,2),2,的最小值,.,min,=(x+2)2+(y-2)2;,free,(x);,【,请大家上机验证一下有,FREE,和没有的差别,】,27,五、其他函数,.,函 数 名,说 明,WARN(,文字信息,逻辑表达式,),如果逻辑表达式的值为真,则显示指导文字信息,(,用于提示,),IF(,逻辑表达式,表达式为真时的值,表达式为假时的值,),该函数根据逻辑表达式的结果是真还是假,决定返回值,常用来表示分段函数,USER(),该函数允许用户用,C,语言活,FORTRAN,语言编写并编译自己的函数,返回用户函数的计算结果,例,.,用,IF,表示下列函数,.,f,=,IF,(x#LE#500,4*x,500+3*x);,或,f,=,IF,(x#GT#500,500+3*x,4*x);,【,思考,:】,此外还有,:,文件输入输出函数,金融函数,结果报告函数,28,补充,一、稠密集合与稀疏集合,.,SETS:,WH/W1.W6/:AI;,VD/V1.V8/:DJ;,LINKS(WH,VD):C,X;,ENDSETS,省略了成员列表,只是指出它基于两个初始集合的衍生集合,称为,稠密集合,.,如果衍生集合的成员只是稠密集合中的一部分(子集),则,称为,稀疏集合,.,稀疏集合的定义方法有两种:,(1),直接列表法;,(2),元素过滤法,.,29,例,.,有如下工作流程,.,A,B,C,E,F,G,H,I,J,K,D,SETS:,TASK/A B C D E F G H I J K/;,PRED(TASK,TASK),/A,B B,C C,F C,G F,J G,J J,K D,E,E,H E,I H,J I,J/;,ENDSETS,(1),直接列表法;,30,(2),元素过滤法,.,例,.,某公司,8,个职员两两相容度如下表,.,S1,S2,S3,S4,S5,S6,S7,S8,S1,-,9,3,4,2,1,5,6,S2,-,-,1,7,3,5,2,1,S3,-,-,-,4,4,2,9,2,S4,-,-,-,-,1,5,5,2,S5,-,-,-,-,-,8,7,6,S6,-,-,-,-,-,-,2,3,S7,-,-,-,-,-,-,-,4,S8,-,-,-,-,-,-,-,-,SETS:,REN/1.8/;,LINKS(REN,REN),|,&2,#GT#,&1,:C,X;,ENDSETS,注,:,这里,&1,和,&2,表示第一和第二个父集合的,元素索引值,31,二、数据段的几点说明,.,1.,赋值,.,SETS:,SET1/A,B,C/:X,Y;,ENDSETS,例,.,给下列集合赋值,(,法,1)DATA:,X=1,2,3;Y=4,5,6;,ENDDATA,(,法,2)DATA:,X,Y=1,4,2,5,3,6;,ENDDATA,注,:,同一集合的多个属性一起赋值时,LINGO,用,按列赋值,方式进行,.,32,2.,通过键盘输入数据,.,例,.,当,A=125,A=265,时,下列模型的目标函数值是多少,?,Max=98*x1+A*x2-x12,-,0.3*x1*x2,-,2*x22;,x1+x2100;,x1=x2;,GIN(x1);,GIN(x2);,DATA:,A=?,;,ENDDATA,MODEL:,END,33,3.,部分赋值,.,SETS:,WH/W1.W6/:A;,ENDSETS,例,.,给下列集合的第二和第三个元素赋值为,60,和,55,DATA:,A=,60,55,;,ENDDATA,三、初始化段,.,在数据段给变量赋值以后,该变量在整个程序运行阶段都是常量,而不是决策变量,.,如果想对决策变量赋一定初始值,希望该初始值作为寻找最优解的起始值,(,变量本身不是常量,),可以在程序中增加初始段,34,初始化段以语句,INIT:,开头,以语句,ENDINIT,结束,如下程序,INIT:,X=0.99;Y=0.01;,ENDINIT,Y=LOG(X);,X2+Y2=1;,注,:,初始化段,只对非线性模型起作用,在线性模型中不起任何作用,.,35,
展开阅读全文