资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,1,、,目标函数以“,max”,或“,min”,开头,,max,(或,min,)与目标函数表达式之间不能有“,=”,。,lindo,常用的基本语法,2,、,变量名的长度不超过,8,个字符,,并且必须以英文字母开头。,英文字母不区分大小写,。,3,、,目标函数与约束条件之间必须用“,st”,分开,,并且“,st,”,单独一行。,4,、目标函数、各约束条件都必须以“回车键”结束,并且都应该是,经过化简后的表达式,,所有字符必须是英文状态下输入的。,5,、,lindo,软件已规定所有的决策变量均为非负数。,1,2024/11/22 周五,6,、,变量与其系数之间可以有空格,乘号必须省略,式中不能有括号,;,约束条件的右端不能有决策变量,左端不能有常数项,;没有下标,式中不能有分母,,式中不能有“逗号”和“句号”等,(说明语句除外),。,常用的基本语法,7,、约束条件中的符号“,”用“,=,”,表示,,“”,用“,”,和“,=,”,或“,”,表示,“,”用“,=,”,或“,”,表示。,(7),计算机把输入程序中的第一行默认为目标函数,其它各约束条件可以用,_1,_2,标明它的行号。,(8),虽然决策变量可以放在约束条件的右端,但为了提高,Lingo,的求解效率,应尽可能采用,线性表达式,定义目标函数和约束条件。,(9),在,lingo,中以感叹号“,!,”开始的是,说明语句,,并且说明语句也需要以分号“,;,”结束,并且除了“,!,”和“,;,”之外,说明语句中的其它字符可以是任何字符。,7,2024/11/22 周五,LINGO,软件的使用规则(,4,),(10)lingo,模型是由一系列语句组成的,即每个语句是组成,lingo,模型的基本部分,每个语句(目标、约束、说明语句等)都是以分号“,;,”结尾的,编写程序时应注意保持模型的可读性。,例如:,虽然,lingo,允许每行写多个语句,也允许一个语句写成几行,,但最好一行只写一个语句,,并且按照语句的嵌套关系对语句安排适当的缩进,增强层次感。,8,2024/11/22 周五,LINGO,软件的,使用规则,(,5,),(11),在,lingo,中,以“,”,开头的都是函数调用,,其中有:整型变量函数(,bin,表示,0-1,变量,,,gin,表示,整数变量,),和上下界限定等函数(,free,表示去掉非负限制,,bnd,限定变量的上限、下限)。,这些变量的限制要,放在“,end”,之前,,否则这些变量的限制将不起作用,。,9,2024/11/22 周五,如果,x,1,是整数变量,则应在,end,之前,写命令:,gin,(x1);,如果,x,1,是,0-1,变量,则应在,end,之前,写命令:,bin,(x1);,如果所有的决策变量共有,6,个,并且所有的决策变量都是整数,,不能写命令,:,bin(6);,等其它的命令,如果,x,1,,,x,2,都是整数变量,并且不是所有的变量都是整数变量,则要写成,gin,(x1);,gin,(x2);,不能写成,gin,(x1,x2),或其它的命令,10,2024/11/22 周五,练习:,分别用,lindo,、,lingo,编写下列数学模型的程序,11,2024/11/22 周五,(,1,)可以用于求,线性规划,及,非线性规划,问题,包括非线性整数规划问题。,2,、,lingo,的优点,(,2,),lingo,包含内置的建模语言(常称矩阵生成器),允许以简练、直观的方式描述较大规模的优化模型(成千万个约束条件和变量),,模型中所需的数据可以用一定格式保存在独立的文件中,需要时再读取数据。,12,2024/11/22 周五,在,lindo,中的目标函数最优值、最优解与灵敏度分析是一起显示出来,,3,、,lingo,中的灵敏度分析,而在,lingo,中,最优解、最优值与灵敏度分析是分别用不同的命令显示出来。,lingo,中的灵敏度分析的数据输出结果与,lindo,中的灵敏性分析中输出结果是相同的。,因为,lingo,的求解结果中是没有灵敏度分析的,所以如果需要灵敏度分析的数据,可以通过修改选项来实现。,13,2024/11/22 周五,先修改系统选项,启动灵敏度分析,通过修改选项得到灵敏度分析数据的步骤:,执行“,LINGO/options”,菜单命令弹出“选项”对话框,在“,General,solver,”,选项卡中,,将其中左边列的第二个选项“,Dual compulations,”,(对偶计算)选项的默认设置“,prices,”,改为“,prices and Ranges,”,(价格及范围)后,,先对规划问题求解一次。,执行“,LINGO/Range”,菜单命令,运行后计算机则显示只有灵敏度分析的数据。,14,2024/11/22 周五,一般情况下,,lingo,得到的都是局部最优解,要得到全局最优解,,激活全局最优求解程序的步骤,则要激活全局最优求解程序,,方法如下:,执行“,LINGO,/,Options,”,菜单命令弹出“选项框”对话框,,在“,Global Solver,”,选项卡上选择“,Use Global Solver,”,点确定即可。,由于全局最优求解程序花费的时间可能是很长的,所以为了减少计算工作量,我们应该尽量对变量等做进一步的限制。,15,2024/11/22 周五,1,、运算符,4.2.2,运算符及优先级,(,1,)算术运算符:,+,加,-,减,*,乘,/,除,乘方(开方),(,2,),逻辑运算符:,逻辑运算结果只有,真与假,,在,lingo,中用,1,和,0,表示,逻辑运算符(表达式)通常作为,过滤条件,使用。,#and#,与,,#or#,或,,#not#,非,#eq#,等于,,#ne#,不等于,,#gt#,大于,,#ge#,大于等于,,#lt#,小于,,#le#,小于等于,即:,g,大于,e,等于,l,小于,t,不等于,16,2024/11/22 周五,(,3,)关系运算符,2,、运算符的优先级,(或,(,或,=),#not#(,负号,),*,/,+(,减法,),#eq#,,,#ne#,,,#gt#,,,#ge#,,,#lt#,,,#le#,#and#,与,,#or#,=,高,低,17,2024/11/22 周五,sqrt(x),4.2.3,常用的函数,在,Lingo,中,所有的系统函数都必须是以“,”,开头。,1,、数学函数,abs(x),求绝对值函数,,返回,x,的绝对值,cos(x),求余弦函数,返回,x,的余弦值,,x,的单位是弧度,exp(x),计算,e,x,的值,log(x),计算,ln,x,的值,pow(x,y),计算,x,y,的值,sqr(x),计算,x,的平方,计算,x,的平方根,size(A),求矩阵,A,的元素个数,18,2024/11/22 周五,2,、,集合循环函数,集合循环函数是指对集合中的所有元素,(,下标,),进行循环操作的函数,如,sum,,,for,等。,具体的使用格式:,循环函数名,(,循环变量所在的集,(,循环变量,),过滤条件:循环表达式,),其中,如果在操作过程中没有过滤条件,可以省略过滤条件;如果表达式是对集合的所有循环变量进行操作,循环变量也可以省略。,19,2024/11/22 周五,集合循环函数:,for,是对集合的每个元素独立地操作一次表达式,通常用于优化问题的,约束条件,;,sum,是求集合中表达式的和;,prod,是求集合中表达式的乘积;,max,是求集合中表达式的最大值;,min,是求集合中表达式的最小值;,但如果是,求目标函数的最大、最小值,,则是用“,max=,目标函数表达式,”,“,min=,目标函数表达式,”,而不用写,。,20,2024/11/22 周五,(,1,),for,该函数用来产生对集成员的约束。,for,函数允许只输入一个约束条件,然后由,lingo,自动产生每个集成员的约束条件。,例,4-2,产生序列,1,,,4,,,9,,,16,,,25,model:sets:number/1.5/:x;,!,此命令产生一个变量,x,,,是单下标变量,其下标有,5,个取值,;,endsets for(number(i):x(i)=i2);,!,此命令是对所有的下标,i,,分别求,i,2,;,end,21,2024/11/22 周五,(,2,),sum,该函数返回遍历指定的集成员的一个表达式的和。,例,4-3,求向量,5,,,1,,,3,,,4,,,6,,,10,前,5,个数的和。,model:sets:number/1.,6,/:x;endsetsdata:x=5 1 3 4 6 10;,!,此命令给变量,x,具体的取值,;,enddatas=sum(number(i)|i#le#5:x(i);,end,22,2024/11/22 周五,3,、变量定界函数,变量定界函数是对变量的取值范围附加限制。,bnd(A,x,B),:,是指限定变量,x,的取值为,A,x,B,(,在,LINDO,中无此函数,),gin(x),:,限定变量,x,的取值为整数;,bin(x),:,限定变量,x,为,0-1,变量,,free(x),:,取消变量,x,的非负限制,即,x,可以取负数、,0,或正数,因为,lingo,原来默认所有的变量非负取值。,在,lindo,是用,命令,int,,而在,lingo,中没有,int(,x,),;,23,2024/11/22 周五,4.2.4 lingo,计算输出的结果,lingo,计算的,输出结果与,lindo,计算的输出结果是完全相同的,只是输出的命令不相同。,在,lindo,中,最优值、最优解,影子价格与灵敏度分析的数据可以同时输出。,而在,lingo,中,灵敏度分析的数据只有通过修改选项才能输出。,24,2024/11/22 周五,lingo,计算输出结果,例,4-1,的数学模型:,model:max,=32*x1+30*x2;3*x1+4*x2=36;5*x1+4*x2=40;9*x1+8*x2=76;,end,输出结果:,Global optimal solution found.Objective value:282.6667 Total solver iterations:3,Variable Value Reduced Cost X1 1.333333 0.000000 X2 8.000000 0.000000,Row Slack or Surplus Dual Price 1 282.6667 1.000000 2 0.000000 1.166667 3 1.333333 0.000000,4 0.000000 3.166667,25,2024/11/22 周五,4.2.5,关于,lingo,程序中的段,一般来说,,lingo,中建立的优化模型可以由五部分来组成,或称为五段。下面介绍常用的三段:,集合段,数据段,目标和约束段,1,、集合段(,sets,):,这部分要以“,sets:,”,开始,以“,endsets,”,结束。,作用在于定义必要的集合及其元素。,属性,相当于变量或数组,,集合的成员,相当于下标。,26,2024/11/22 周五,1,、集合段(,sets,):,具体使用格式是:,集合名,/,集的成员,/:,属性;,ABD/1,2,3,4,5,6/:x,y;,显式罗列所有的成员,ABD/1,.,6/:x,y;,隐式罗列所有的成员,中间的成员系统自动产生,只要列出集合的第一个和最后一个成员就行,但所有的成员必须是有规律的。,不同的成员及不同的属性之间,用“,”,分隔。集合的属性相当于以集合的元素为下标的数组,即属性相当于变量,成员相当于下标。,27,2024/11/22 周五,具体来说,,ABD/1,2,3,4,5,6/:x,y,;,其集合名为,ABD,,属性为,x,y,成员为,1,,,2,,,3,,,4,,,5,,,6,定义以,x,y,为变量,下标分别为,1,,,2,,,3,,,4,,,5,,,6,的变量,即,x,1,x,2,x,3,x,4,x,5,x,6,y,1,y,2,y,3,y,4,y,5,y,6,属性(变量)的具体值如果是常数,则应在数据段中输入具体数据;,如果是未知数(即决策变量),则在数据段中不能输入数据,但可以在初始段输入初值。,集合的成员和属性可以在定义时省略,随后在数据段中输入。,28,2024/11/22 周五,关于集合的一些说明:,myfile/1.5/:,a,;,定义原始集合,myfile,,属性,a,的成员有5个元素,即定义,a,是单下标变量,下标有5个取值,,即,a,1,a,2,a,3,a,4,a,5,。,myfoes/1.6/:,b,;,定义原始集合,myfoes,,属性,b,的成员有6个元素,即定义,b,是单下标变量,下标有6个取值,,即,b,1,b,2,b,3,b,4,b,5,b,6,。,myido(myfoes,myfile):x,c;,定义派生集合,myido,,属性,x,和,c,的成员有,30,个元素,即定义,x,和,c,是双下标变量,第1个下标有6个取值,第2个下标有5个取值。其中,myfoes,和,myfile,称为派生集合的父集。,29,2024/11/22 周五,例,4-4,model:,sets:,myfile/1.5/:,a,;,myfoes/1.6/:b;,myido(myfile,myfoes):x,c;,endsets,data:,c=1,2,-2,5,6,-4,2,3,-4,6,9,3,2,5,-1,5,-2,0,-5,6,7,9,10,-10,33,4,6,6,7,9;,a,=100,200,100,100,400;,b=100,200,100,150,150,200;,enddata,min,=,sum,(myido(i,j):c(i,j)*x(i,j);,!,产销平衡运输问题的目标函数,;,for,(myfile(i):,sum,(myfoes(j):x(i,j)=,a,(i);,!,产销平衡运输问题产地的产量约束,;,for,(myfoes(j,):,sum(myfile(i,):x(i,j)=b(j);,!,产销平衡运输问题销地的销量约束,;,end,30,2024/11/22 周五,2,、数据段(,data,):,以“,data:,”,开始,以“,enddata,”,结束,作用在于对集合的属性(数组或变量)输入必要的常数数据。,具体的使用格式为:,属性(或变量),=,常数列表;,在常数列表中,数据之间用“,,,”分隔,也可以,空格,分开(“,ctrl+,回车,”的作用也等价于一个空格),即变量(或属性)是取等号右边的常数,31,2024/11/22 周五,model:sets:,ABD/1,2,3,4,5,6/:x,y;,endsets,data:,x=1,3,0,5,6,-7;y=-3,4,29,58,3,10;,enddata,end,在数据段中输入数据时,可以分别输入每个变量对应的数据,也可以同时输入多个同维的变量的数据值。,两种输入方法得到的结果相同,例,4-5,等同于,x,y,=1,-3,3,4,0,29,5,58,6,3,-7,10;,32,2024/11/22 周五,3,、目标和约束段:,这部分实际上是定义目标函数、约束条件等,但这部分并没有段的开始及结束的标记。,lingo,的目标函数和约束条件,一般要用到循环函数:如求和函数,sum,和循环函数,for,等。,目标函数是求最大值或最小值,.,max,=,目标函数,;,或,min,=,目标函数,;,约束条件的标志是:,for,(,约束条件,);,目标函数,的标志是:,33,2024/11/22 周五,例如:,sets:,ABD/1,2,3,4,5,6/:X;AB/1.3/:Y,D;,endsets,(,1,)如程序中有约束条件:,在,lingo,程序中应该表示为,:,for(AB(j):sum(ABD(,i,):x(i)*y(j)=d(j);,(,2,)如程序中有约束条件:,在,lingo,程序中应该表示为,:,for(AB(i):sum(ABD(j):x(i)*y(j)=d(i);,循环变量:,循环变量:,先计算变量,j,,,再计算变量,i.,先计算变量,i,,,再计算变量,j.,34,2024/11/22 周五,model:,sets:,myfile/1.5/:a;,myfoes/1.6/:b;,myido(myfile,myfoes):x,c;,endsetsdata:,c=1,2,-2,5,6,-4 2,3,-4,6,9,3 2,5,-1,5,-2,0 -5,6,7,9,10,-10 33,4,6,6,7,9;a=100,200,100,100,400;,b=100,200,100,150,150,200;,enddatamin,=,sum,(myido(i,j):c(i,j)*x(i,j);,for,(myfile(i):,sum,(,myfoes(j):x(i,j),),=a(i);,for,(myfoes(j):,sum,(,myfile(i):x(i,j),),=b(j);,end,分析用,lingo,编写的程序,35,2024/11/22 周五,例,4-6,写出下面规划问题的,lingo,中用集合编写的求解程序。如果线性规划问题有最优解,请写出最优解。,36,2024/11/22 周五,解:,要写出用,lingo,中集合的方法求解的程序,,则应该先把规划模型化为用求和形式表示的模型,,其中:,37,2024/11/22 周五,则该规划问题的用求和形式表示的模型为:,38,2024/11/22 周五,用求和形式表示的模型,39,2024/11/22 周五,讨论用集合表示的模型:,其中:,(1,)变量,c,x,是单下标,下标有,3,个取值;变量,b,是单下标,下标有,4,个取值。,对于单下标的变量,只要直接定义集合即可,即要定义两个集合,一个有,3,个取值的,另一个有,4,个取值的。,由于变量,c,b,a,已经有具体的数值,故必须在数据段中给出具体的取值;,变量,x,没有具体的数值,它是决策变量,故不能在数据段中给出具体的取值。,40,2024/11/22 周五,讨论用集合表示的模型:,(,2,)变量,a,是双下标变量,下标共有,4,3,个取值,第,1,个,i,下标有,4,个取值,第,2,个下标,j,有,3,个取值。,对于双下标的变量,必须定义派生集合。,它第,1,个父集是有,4,个取值,第,2,个父集是有,3,个取值。,变量,a,已经有具体的数值,它不是决策变量,故必须在数据段中给出具体的取值。,41,2024/11/22 周五,上述数学模型用集合编写的求解程序为:,集合段,sets:,endsets,ab/1,2,3/:x,c;,abc/1,2,3,4/:b;,abcd(abc,ab):a;,数据段,data:,enddata,c=8,10,2;,b=70,80,15,50;,a=2,1,3 4,2,2 3,0,1 2,2,0;,42,2024/11/22 周五,目标函数,max,=,sum,(ab(j):c(j)*x(j);,约束条件,for,(abc(i):,sum,(ab(j):a(i,j)*x(j)=b(i);,ab/1,2,3/:x,c;,abc/1,2,3,4/:b;,abcd(abc,ab):a;,43,2024/11/22 周五,用集合表示的程序为:,model:sets:,ab/1,2,3/:x,c;abc/1,2,3,4/:b;abcd(abc,ab):a;,endsetsdata:,c=8,10,2;b=70,80,15,50;a=2,1,3,4,2,2,3,0,1,2,2,0;,enddatamax,=,sum,(ab(j,):c(j)*x(j);,for,(abc(i):,sum,(ab(j,):a(i,j)*x(j)=b(i);,end,44,2024/11/22 周五,model:sets:,ab/1,2,3/:x,c;abc/1,2,3,4/:b;abcd(abc,ab):a;,endsetsdata:,c=8,10,2;b=70,80,15,50;a=2,1,3,4,2,2,3,0,1,2,2,0;,enddatamax,=,sum,(ab(j,):c(j)*x(j);,for,(abc(i):,sum,(ab(j,):a(i,j)*x(j)=b(i);,end,Global optimal solution found.,Objective value:280.0000,Total solver iterations:2,Variable Value Reduced Cost,X(1)0.000000 2.666667,X(2)25.00000 0.000000,X(3)15.00000 0.000000,利用软件计算,可知:,该数学规划模型的最优解为,最优值为:,45,2024/11/22 周五,(,2,),把规划问题化为用求和形式表示的模型,,其中:,46,2024/11/22 周五,该规划问题用求和形式表示的模型为:,47,2024/11/22 周五,该规划问题用集合编写的程序为:,集合段,sets:,endsets,ab/1,2,3,4,5/:x,c;,abc/1,2,3/:b;,abcd(abc,ab):a;,数据段,data:,enddata,c=3,-1,-1,0,0;,b=11,3,1;,a=1,-2,1,1,0 -4,1,2,0,-1 -2,0,1,0,0;,48,2024/11/22 周五,目标函数,max,=,sum,(ab(j):c(j)*x(j);,约束条件,for,(abc(i):,sum,(ab(j):a(i,j)*x(j)=b(i);,ab/1,2,3,4,5/:x,c;,abc/1,2,3/:b;,abcd(abc,ab):a;,49,2024/11/22 周五,model:sets:,ab/1,2,3/:b;abc/1,2,3,4,5/:c,x;,abcd(ab,abc):a;,endsetsdata:,c=3,-1,-1,0,0;b=11,3,1;a=1,-2,1,1,0,-4,1,2,0,-1,-2,0,1,0,0;,enddatamax,=,sum,(ab(j):c(j)*x(j);,for,(abc(i):,sum,(ab(j):a(i,j)*x(j)=b(i);,end,用集合表示的程序为:,50,2024/11/22 周五,model:sets:,ab/1,2,3/:b;abc/1,2,3,4,5/:c,x;,abcd(ab,abc):a;,endsetsdata:,c=3,-1,-1,0,0;b=11,3,1;a=1,-2,1,1,0 -4,1,2,0,-1 -2,0,1,0,0;,enddatamax,=,sum,(abc(j):c(j)*x(j);,for,(ab(i):,sum,(abc(j):a(i,j)*x(j)=b(i);,end,Global optimal solution found.,Objective value:2.000000,Total solver iterations:0,Variable Value Reduced Cost,X(1)4.000000 0.000000,X(2)1.000000 0.000000,X(3)9.000000 0.000000,X(4)0.000000 0.3333333,X(5)0.000000 0.3333333,利用软件计算可知:,该数学规划模型的最优解为,最优值为:,2,51,2024/11/22 周五,用,LINGO,求解运输问题,:,某产品有,5,个产地,A,1,A,2,A,3,A,4,A,5,它的产品供应,6,个销地,B,1,B,2,B,3,B,4,B,5,B,6,产地的产量、销地的销量及产品从各产地运往各销地的单位运价如下表:,产地销地,B,1,B,2,B,3,B,4,B,5,B,6,产量,A,1,1,2,2,5,6,4,100,A,2,2,3,4,6,9,3,200,A,3,2,5,1,5,2,0,100,A,4,5,6,7,9,10,10,100,A,5,33,4,6,6,7,9,400,销量,100,200,100,150,150,200,900,应如何调运,可使总的运输费用最少?,52,2024/11/22 周五,该产销平衡运输问题的数学模型为,:,设决策变量,x,ij,为产地,A,i,运往销地,B,j,的运输量,i,=1,2,m,;,j,=1,2,n,53,2024/11/22 周五,该产销平衡运输问题的数学模型用求和符号表示,:,54,2024/11/22 周五,55,2024/11/22 周五,56,2024/11/22 周五,数学模型用求和符号表示,:,57,2024/11/22 周五,model:,sets:,myfile/1.5/:,a,;myfoes/1.6/:b;myido(myfile,myfoes):x,c;,endsets,用,lingo,编写的程序,min,=,sum,(myido(i,j):c(i,j)*x(i,j);,for,(myfile(i):,sum,(myfoes(j):x(i,j)=,a,(i);,for,(myfoes(j):,sum,(myfile(i):x(i,j)=b(j);,end,data:,c=1,2,-2,5,6,-4 2,3,-4,6,9,3 2,5,-1,5,-2,0 -5,6,7,9,10,-10 33,4,6,6,7,9;,a,=100,200,100,100,400;b=100,200,100,150,150,200;,enddata,计算机计算的结果,Global optimal solution found.Objective value:250.0000 Total solver iterations:6 Variable Value Reduced Cost X(1,6)100.0000 0.000000 X(2,1)100.0000 0.000000 X(2,3)100.0000 0.000000 X(3,5)100.0000 0.000000 X(4,6)100.0000 0.000000 X(5,2)200.0000 0.000000 X(5,4)150.0000 0.000000 X(5,5)50.00000 0.000000,58,2024/11/22 周五,
展开阅读全文