03-第三章-Lingo基本函数

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

主讲人:雒兴刚东北大学系统工程研究所Email:luoxinggang@ise.neu.edu.cnTel:83682292优化软件与应用Lingo有9种类型的函数:1.基本运算符:包括算术运算符、逻辑运算符和关系运算符2.数学函数:三角函数和常规的数学函数3.金融函数:Lingo提供的两种金融函数4.概率函数:Lingo提供了大量概率相关的函数5.变量界定函数:这类函数用来定义变量的取值范围6.集操作函数:这类函数为对集的操作提供帮助7.集循环函数:遍历集的元素,执行一定的操作的函数8.数据输入输出函数:这类函数允许模型和外部数据源相联系,进行数据的输入输出9.辅助函数:各种杂类函数第三章Lingo基本函数基本运算符---算数运算符算术运算符是针对数值进行操作的。LINGO提供了5种二元运算符:^乘方﹡乘/除﹢加﹣减Lingo唯一的一元算术运算符是取反函数“﹣”。优先级:-,^,*and/,+and-算术运算符示例:2﹣5/3,(2﹢4)/5等等。第三章Lingo基本函数基本运算符---逻辑运算符逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。(#not#否定该操作数的逻辑值,#not#是一个一元运算符)运算符为TRUE时条件运算符为TRUE时条件#eq#若两个运算数相等#ne#若两个运算符不相等#gt#若左边的运算符严格大于右边的运算符#ge#若左边的运算符大于或等于右边的运算符#lt#若左边的运算符严格小于右边的运算符#le#若左边的运算符小于或等于右边的运算符#and#仅当两个参数都为true时#or#仅当两个参数都为true时第三章Lingo基本函数基本运算符---逻辑运算符这些运算符的优先级由高到低为:高#not##eq##ne##gt##ge##lt##le#低#and##or#逻辑运算符示例:2#gt#3#and#4#gt#2,其结果为假(0)。第三章Lingo基本函数基本运算符---关系运算符(1)Lingo有三种关系运算符:“=”、“=”和“=”。(2)Lingo并不支持严格小于和严格大于关系运算符。(3)Lingo中还能用“”表示小于等于关系,“”表示大于等于关系。(4)如让A严格小于B,那么:A+ε=B这里ε是一个小的正数,它的值依赖于模型中A小于B多少才算不等。第三章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)如果x0返回-1;否则,返回1@floor(x)返回x的整数部分。当x=0时,返回不超过x的最大整数;当x0时,返回不低于x的最大整数。@smax(x1,x2,…,xn)返回x1,x2,…,xn中的最大值@smin(x1,x2,…,xn)返回x1,x2,…,xn中的最小值Lingo提供了大量的标准数学函数:第三章Lingo基本函数数学函数ABCDEabx,sincos,cos,sinxbxaDExbADxaCE例:给定一个直角三角形,求包含该三角形的最小正方形。其中:求最小的正方形就相当于求如下的最优化问题:},,max{min20DEADCEx第三章Lingo基本函数数学函数Lingo代码如下:MODEL:SETS:object/1..3/:f;!对应CE,AD,DE;ENDSETSDATA:a,b=3,4;!两个直角边长,修改很方便;ENDDATAf(1)=a*@sin(x);f(2)=b*@cos(x);f(3)=a*@cos(x)+b*@sin(x);min=@smax(f(1),f(2),f(3));@bnd(0,x,1.57);!限制0≤x≤1.57,即pi/2;END第三章Lingo基本函数金融函数1.@fpa(I,n)返回如下情形的净现值(净现值就是在一定时期内为了获得一定收益在该时期初所支付的实际费用):单位时段利率为I,连续n个时段支付,每个时段支付单位费用。若每个时段支付x单位的费用,则净现值可用x乘以@fpa(I,n)算得。@fpa的计算公式为:IIInnkk)1(1)1(11例:贷款买房问题贷款金额50000元,贷款年利率5.31%,采取分期付款方式(每年年末还固定金额,直至还清)。问拟贷款10年,每年需偿还多少元?LINGO代码如下:50000=x*@fpa(.0531,10);答案是x=6573.069元。I=0.0531,n=10第三章Lingo基本函数金融函数2.@fpl(I,n)返回如下情形的净现值:单位时段利率为I,第n个时段支付单位费用。@fpl(I,n)的计算公式为:实际上:nI)1(nkkIfplnIfpa1),(@),(@第三章Lingo基本函数概率函数1.@pbn(p,n,x)二项分布的累积分布函数当n和(或)x不是整数时,用线性插值法进行计算。2.@pcx(n,x)自由度为n的分布的累积分布函数。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不是整数时,采用线性插值进行计算。2x第三章Lingo基本函数概率函数7.@phg(pop,g,n,x)超几何(Hypergeometric)分布的累积分布函数。pop表示产品总数,g是正品数。从所有产品中任意取出n(n≤pop)件。pop,g,n和x都可以是非整数,这时采用线性插值进行计算。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只允许在模型的数据部分使用,它将用拟随机数填满集属性。通常,声明一个m×n的二维表,m表示运行实验的次数,n表示每次实验所需的随机数的个数。在行内,随机数是独立分布的;在行间,随机数是非常均匀的。这些随机数是用“分层取样”的方法产生的。MODEL:DATA:M=4;N=2;seed=1234567;ENDDATASETS:rows/1..M/;cols/1..N/;table(rows,cols):x;ENDSETSDATA:X=@qrand(seed);ENDDATAEND如果没有为函数指定种子,那么LINGO将用系统时间构造种子。第三章Lingo基本函数概率函数14.@rand(seed)返回0和1间的伪随机数,依赖于指定的种子。典型用法是U(I+1)=@rand(U(I))。注意如果seed不变,那么产生的随机数也不变。MODEL:SETS:series/1..15/:u,znorm;ENDSETS!第一个均匀分布随机数是任意的;u(1)=@rand(.1234);!产生其余的均匀分布的随机数;@for(series(I)|I#GT#1:u(I)=@rand(u(I-1)));@for(series(I):!正态分布随机数;@psn(znorm(I))=u(I);!ZNORM和ZT可以是负数;@free(znorm(I)););END例:利用@rand产生15个标准正态分布的随机数。SolveX:thevaluereturnedby@PSN(X)istheareaunderthecurvetotheleftofthepointontheordinateindicatedbyX取消对变量x的默认下界为0的限制第三章Lingo基本函数集操作函数LINGO提供了几个函数帮助处理集。1.@in(set_name,primitive_index_1[,primitive_index_2,…])如果元素在指定集中,返回1;否则返回0;常用来产生补集。例:全集为I,B是I的一个子集,C是B的补集。SETS:I/x1..x4/:x;B(I)/x2/:y;C(I)|#not#@in(B,&1):z;ENDSETS2.@index([set_name,]primitive_set_element)该函数返回在集set_name中原始集成员primitive_set_element的索引。如果set_name被忽略,那么LINGO将返回与primitive_set_element匹配的第一个原始集成员的索引。如果找不到,则产生一个错误。C的第一个原始集,即I。翻译过来就是:I里的成员,同时又不属于集合B第三章Lingo基本函数集操作函数例:如何确定集成员(B,Y)属于派生集S3。SETS:S1/ABC/;S2/XYZ/;S3(S1,S2)/AX,AZ,BY,CX/;ENDSETSX=@in(S3,@index(S1,B),@index(S2,Y));例:确定成员的indexSETS:girls/debble,sue,alice/;boys/bob,joe,sue,fred/;ENDSETSI1=@index(sue);I2=@index(boys,sue);注意S1和S2是S3的原始集第三章Lingo基本函数集操作函数3.@wrap(index,limit)该函数返回j=index-k*limit,其中k是一个整数,取适当值保证j落在区间[1,limit]内。该函数相当于index“模limit再加1”。该函数在循环、多阶段计划编制中特别有用。参见后面的例子4.@size(set_name)该函数返回集set_name的成员个数。在模型中明确给出集大小时最好使用该函数。它的使用使模型更加数据中立,集大小改变时也更易维护。第三章Lingo基本函数集循环函数集循环函数遍历整个集进行操作。其语法为@function(setname[(set_index_list)[|conditional_qualifier]]:expression_list);@function相应于后面罗列的四个集循环函数之一(for,sum,min,max);setname是要遍历的集;set_index_list是集索引列表;conditional_qualifier是用来限制集循环函数的范围,当集循环函数遍历集的每个成员时,LINGO都要对conditional_qualifier进行评价,若结果为真,则对该成员执行@function操作,否则跳过,继续执行下一次循环。expression_list是被应用到每个集成员的表达式列表,当用的是@for函数时,expression_list可以包含多个表达式,其间用逗号隔开。这些表达式将被作为约束加到模型中。当使用除for外的三个集循环函数时,expression_list只能有一个表达式。第三章Lingo基本函数集循环函数1.@for该函数用来产生对集成员的约束。基于建模语言的标量需要显式输入每个约束,不过@for函数允许只输入一个约束,然后LINGO自动产生每个集成员的约束。例:产生序列{1,4,9,16,25}MODEL:SETS:number/1..5/:

1 / 35
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功