资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,根据模型中决策变量的取值范围和目标函数以及约束函数的特性,模型可分为以下几类:,LP/ILP/PILP,QP/IQP/PIQP,NLP/INLP/PINLP,(以,I,开头表示,IP,:整数规划,以,PI,开头表示,PIP,:纯整数规划),(,1,)当决策变量的所有分量均为连续数值时,优化模型称为连续优化,也就是所说的数学规划。,若目标函数及约束条件均为线性的称为,LP,(线性规划),,,若目标函数和约束条件至少有一个是非线性函数则为,NLP,(非线性规划),若目标函数是一个二次函数,而约束是线性函数则为,QP,(二次规划),(,2,)当决策变量的一个活多歌分量值取离散数值,则优化模型称为离散优化,或称组合优化。,若一个或多个变量只取整数数值,称为整数规划(,IP,)若所有变量只取整数数值,则称为纯整数规划(,PIP,),部分变量只取整数数值,则为混合整数规划(,MIP,),特别地有,0,1,规(,ZOP,),优化模型的基本类型,后缀,(lg4):LONGO,格式的模型文件,只有能读出它,后缀,(,lng,):,表示文本格式文件,以此格式保存模型文件将会丢失格式信息,后缀,(,ldt,):,表示数据文件,后缀,(,ltf,):,命令脚本文件,后缀,(,lgr,):,报告文件,后缀,(,ltx,):,格式的模型文件,后缀,(mps):,数学规划系统格式的模型文件,除了,(lg4),文件以外,另外几种格式的文件都属于普通文本文件,LINGO,几种不同的文件类型,:,模型的数据部分和初始部分,数据部分以关键字“,data:”,开始,以关键字“,enddata,”,结束。在这里,可以指定集成员、集的属性。其语法如下:,object_list,=,value_list,;,对象列,(,object_list,),包含要指定值的属性名、要设置集成员的集名,用逗号或空格隔开。一个对象列中至多有一个集名,而属性名可以有任意多。如果对象列中有多个属性名,那么它们的类型必须一致。,数值列(,value_list,)包含要分配给对象列中的对象的值,用逗号或空格隔开。注意属性值的个数必须等于集成员的个数。,sets:,set1/A,B,C/:X,Y;,endsets,data:,X=1,2,3;,Y=4,5,6;,enddata,等价地可以写成,:,sets:,set1/A,B,C/:X,Y;,endsets,data:,X,Y=1 4,2 5,3 6;,enddata,模型的数据部分和初始部分,参数,在数据部分也可以指定一些标量变量。当一个标量变量在数据部分确定时,称之为参数。,data:,X=.085;,enddata,也可以同时指定多个参数。,data:,X,Y=.085.03;,enddata,模型的数据部分和初始部分,实时数据处理,在某些情况,模型中的某些数据并不是定值,我们把这种情况称为实时数据处理。,LINGO,可以通过在本该放数的地方输入一个问号(,?,)。,data:,X,Y=.085?;,enddata,每一次求解模型时,,LINGO,都会提示为参数,Y,输入一个值。在,WINDOWS,操作系统下,将会接收到一个对话框,直接输入一个值再点击,OK,按钮,,LINGO,就会把输入的值指定给,Y,,然后继续求解模型。,除了参数之外,也可以实时输入集的属性值,但不允许实时输入集成员名。,模型的数据部分和初始部分,指定属性为一个值,可以在数据声明的右边输入一个值来把所有的成员的该属性指定为一个值。,sets:,days/MO,TU,WE,TH,FR,SA,SU/:needs;,endsets,data:,needs=20;,enddata,LINGO,将用,20,指定,days,集的所有成员的,needs,属性。,sets:,days/MO,TU,WE,TH,FR,SA,SU/:,needs,cost,;,endsets,data:,needs cost=20 100;,enddata,数据部分的未知数值,有时只想为一个集的部分成员的某个属性指定值,而让其余成员的该属性保持未知,以便让,LINGO,去求出它们的最优值。,在数据声明中输入两个相连的逗号表示该位置对应的集成员的属性值未知。两个逗号间可以有空格。,sets:,years/1.5/:capacity;,endsets,data:,capacity=,34,20,;,enddata,属性,capacity,的第,2,个和第,3,个值分别为,34,和,20,,其余的未知。,模型的数据部分和初始部分,模型的初始部分,在初始部分输入的值仅被,LINGO,求解器当作初始点来用,并且仅仅对非线性模型有用。,一个初始部分以“,init:”,开始,以“,endinit,”,结束。,init:,X,Y=0,.1;,endinit,Y=,log(X,);,X2+Y2=1;,模型的数据部分和初始部分,数据内容结束,LINGO,函数,算术运算符,乘方,乘 除 加,减,LINGO,唯一的一元算术运算符是取反函数“,”,。,关系运算符,关系运算符主要是被用在模型中,来指定一个表达式的左边是否等于、小于等于、或者大于等于右边,形成模型的一个约束条件。,LINGO,有三种关系运算符:“,=”,、“,=”,。,LINGO,中还能用“,”,表示大于等于关系。,LINGO,并不支持严格小于和严格大于关系运算符。严格小于为,:A+,=,B,LINGO,函数,逻辑运算符,在,LINGO,中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。,#not#,否定,该操作数的逻辑值,,not,是一个,一元运算符,#,eq,#,若两个运算数,相等,,则为,true,;否则为,flase,#,ne,#,若两个运算符,不相等,,则为,true,;否则为,flase,#,gt,#,若左边的运算符,严格大于,右边的运算符,则为,true,;否则为,flase,#,ge,#,若左边的运算符,大于或等于,右边的运算符,则为,true,;否则为,flase,#,lt,#,若左边的运算符,严格小于,右边的运算符,则为,true,;否则为,flase,#le#,若左边的运算符,小于或等于,右边的运算符,则为,true,;否则,flase,#and#,仅当两个参数,都为,true,时,结果为,true,;否则为,flase,#or#,仅当两个参数,都为,false,时,结果为,false,;否则为,true,下面给出以上三类操作符的优先级:,高,#not#,(取反),#,eq,#,ne,#,gt,#,ge,#,lt,#le#,#and#or#,低,=,LINGO,函数,LINGO,函数,数学函数,LINGO,提供了大量的标准数学函数:,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,时,返回不超过,x,的最大整数;当,x0,时,返回不低于,x,的最大整数。,smax(x1,x2,xn,),返回,x1,,,x2,,,,,xn,中的最大值,smin(x1,x2,xn,),返回,x1,,,x2,,,,,xn,中的最小值,LINGO,函数,金融函数,1,fpa(I,n,),返回如下情形的净现值:单位时段利率为,I,,连续,n,个时段支付,每个时段支付单位费用。若每个时段支付,x,单位的费用,则净现值可用,x,乘以,fpa(I,n,),算得。,例,贷款买房问题 贷款金额,50000,元,贷款年利率,5.31%,,采取分期付款方式(每年年末还固定金额,直至还清)。问拟贷款,10,年,每年需偿还多少元?,LINGO,代码如下:,50000=x*fpa(.0531,10);,答案是,x=6573.069,元,。,2,fpl(I,n,),返回如下情形的净现值:单位时段利率为,I,,第,n,个时段支付单位费用。,概率函数,1,pbn(p,n,x,),二项分布的累积分布函数。当,n,和(或),x,不是整数时,用线性插值法进行计算。,2,pcx(n,x,),自由度为,n,的,2,分布的累积分布函数。,3,peb(a,x,),当到达负荷为,a,,服务系统有,x,个服务器且允许无穷排队时的,Erlang,繁忙概率。,4,pel(a,x,),当到达负荷为,a,,服务系统有,x,个服务器且不允许排队时的,Erlang,繁忙概率。,5,pfd(n,d,x,),自由度为,n,和,d,的,F,分布的累积分布函数。,6,pfs(a,x,c,),当负荷上限为,a,,顾客数为,c,,平行服务器数量为,x,时,有限源的,Poisson,服务系统的等待或返修顾客数的期望值。,a,是顾客数乘以平均服务时间,再除以平均返修时间。当,c,和(或),x,不是整数时,采用线性插值进行计算。,7,phg(pop,g,n,x,),超几何(,Hypergeometric,)分布的累积分布函数。,pop,表示产品总数,,g,是正品数。从所有产品中任意取出,n,(,npop,)件。,pop,,,g,,,n,和,x,都可以是非整数,这时采用线性插值进行计算。,LINGO,函数,概率函数,8,ppl(a,x,)Poisson,分布的线性损失函数,即返回,max(0,z-x),的期望值,其中随机变量,z,服从均值为,a,的,Poisson,分布。,9,pps(a,x,),均值为,a,的,Poisson,分布的累积分布函数。当,x,不是整数时,采用线性插值进行计算。,10,psl(x,),单位正态线性损失函数,即返回,max(0,z-x),的期望值,其中随机变量,z,服从标准正态分布。,11,psn(x,),标准正态分布的累积分布函数。,12,ptd(n,x,),自由度为,n,的,t,分布的累积分布函数。,LINGO,函数,13,qrand(seed,),产生服从,(0,1),区间的拟随机数。,qrand,只允许在模型的数据部分使用,它将用拟随机数填满集属性。通常,声明一个,mn,的二维表,,m,表示运行实验的次数,,n,表示每次实验所需的随机数的个数。,model:,data:,M=4;N=2;seed=1234567;,enddata,sets:,rows/1.M/;,cols/1.N/;,table(rows,cols,):x;,endsets,data:,X=,qrand(seed,);,enddata,end,LINGO,函数,14,rand(seed,),返回,0,和,1,间的伪随机数,依赖于指定的种子。典型用法是,U(I+1)=,rand(U(I,),。注意如果,seed,不变,那么产生的随机数也不变。,model:,sets:,series/1.15/:u;,endsets,u(1)=rand(.1234);,for(series,(I)|I#GT#1:u(I)=rand(u(I-1);,end,LINGO,函数,LINGO,函数,变量界定函数,变量界定函数实现对变量取值范围的附加限制,共,4,种:,bin(x,),限制,x,为,0,或,1,bnd(L,x,U,),限制,LxU,free(x,),取消对变量,x,的默认下界为,0,的限制,即,x,可以取任意实数,gin(x,),限制,x,为整数,在默认情况下,,LINGO,规定变量是非负的,也就是说下界为,0,,上界为,+,。,free,取消了默认的下界为,0,的限制,使变量也可以取负值。,bnd,用于设定一个变量的上下界,它也可以取消默认下界为,0,的约束。,LINGO,函数,集操作函数,1
展开阅读全文