专题资料(2021-2022年)lingo教程2.ppt
《专题资料(2021-2022年)lingo教程2.ppt》由会员分享,可在线阅读,更多相关《专题资料(2021-2022年)lingo教程2.ppt(52页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第二讲第二讲 lingo的运算符和函数的运算符和函数1.1.基本运算符基本运算符 算术运算符算术运算符 算术运算符是针对数值进行操作的。LINGO提供了5种二元运算符:乘方 乘 除 加 减 LINGO唯一的一元算术运算符是取反函数“”。这些运算符的优先级由高到底为:高:(取反),低 运算符的运算次序为从左到右按优先级高低来执行。运算的次序可以用圆括号“()”来改变。如:253,(24)5等等。逻辑运算符逻辑运算符在LINGO中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。LINGOLINGO具有种逻辑运算符:具有种
2、逻辑运算符:#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时,结果为
3、false;否则为true这些运算符的优先级由高到低为这些运算符的优先级由高到低为:高高#not#eq#ne#gt#ge#lt#le#低低#and#or#如逻辑运算符示例2#gt#3#and#4#gt#2,其结果为假(0)。关系运算符关系运算符 在LINGO中,关系运算符主要是被用在模型中,来指定一个表达式的左边是否等于、小于等于、或者大于等于右边,形成模型的一个约束条件。关系运算符与逻辑运算符#eq#、#le#、#ge#截然不同,前者是模型中该关系运算符所指定关系的为真描述,而后者仅仅判断一个该关系是否被满足:满足为真,不满足为假。LINGO有三种关系运算符:“=”、“=”。LINGO中还能
4、用“”表示大于等于关系。LINGO并不支持严格小于和严格大于关系运算符。然而,如果需要严格小于和严格大于关系,比如让A严格小于B:AB,那么可以把它变成如下的小于等于表达式:A+=B,这里是一个小的正数,它的值依赖于模型中A小于B多少才算不等。下面给出以上三类操作符的优先级:高#not#(取反)#eq#ne#gt#ge#lt#le#and#or#低=2、数学函数、数学函数LINGO提供了大量的标准数学函数:abs(x)返回x的绝对值sin(x)返回x的正弦值,x采用弧度制cos(x)返回x的余弦值tan(x)返回x的正切值exp(x)返回常数e的x次方log(x)返回x的自然对数lgm(x)返
5、回x的gamma函数的自然对数sign(x)如果x=0时,返回不超过x的最大整数;当x0时,返回不低于x的最大整数。smax(x1,x2,xn)返回x1,x2,xn中的最大值smin(x1,x2,xn)返回x1,x2,xn中的最小值例:给定一个直角三角形,求包含该三角形的最小正方形。解:如图所示 A B CD Eab xmodel:sets:object/1.3/:f;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
6、);bnd(0,x,1.57);end3、金融函数金融函数 目前LINGO提供了两个金融函数。fpa(I,n)返回如下情形的净现值:单位时段利率为I,连续n个时段支付,每个时段支付单位费用。若每个时段支付x单位的费用,则净现值可用x乘以fpa(I,n)算得。fpa的计算公式为净现值就是在一定时期内为了获得一定收益在该时期初所支付的实际费用。例贷款买房问题贷款金额50000元,贷款年利率5.31%,采取分期付款方式(每年年末还固定金额,直至还清)。问拟贷款10年,每年需偿还多少元?(50000=x*fpa(.0531,10);答案是x=6573.069元).fpl(I,n)返回如下情形的净现值:
7、单位时段利率为I,第n个时段支付单位费用。fpl(I,n)的计算公式为两个函数间的关系:4、概率函数概率函数1pbn(p,n,x):二项分布的累积分布函数。当n和(或)x不是整数时,用线性插值法进行计算。2pcx(n,x):自由度为n的2分布的累积分布函数。3peb(a,x):当到达负荷为a,服务系统有x个服务器且允许无穷排队时的Erlang繁忙概率。4pel(a,x):当到达负荷为a,服务系统有x个服务器且不允许排队时的Erlang繁忙概率。5pfd(n,d,x):自由度为n和d的F分布的累积分布函数。6pfs(a,x,c):当负荷上限为a,顾客数为c,平行服务器数量为x时,有限源的Pois
8、son服务系统的等待或返修顾客数的期望值。a是顾客数乘以平均服务时间,再除以平均返修时间。当c和(或)x不是整数时,采用线性插值进行计算。7phg(pop,g,n,x):超几何分布的累积分布函数。pop表示产品总数,g是正品数。从所有产品中任意取出n(npop)件。pop,g,n和x都可以是非整数,采用线性插值进行计算。8ppl(a,x):Poisson分布的线性损失函数,即返回max(0,z-x)的期望值,随机变量z服从均值为a的Poisson分布。9pps(a,x):均值为a的Poisson分布的累积分布函数。当x不是整数时,采用线性插值进行计算。10psl(x):单位正态线性损失函数,即
9、返回max(0,z-x)的期望值,其中随机变量z服从标准正态分布。11psn(x):标准正态分布的累积分布函数。12ptd(n,x):自由度为n的t分布的累积分布函数。13qrand(seed):产生服从(0,1)区间的拟随机数。qrand只允许在模型的数据部分使用,它将用拟随机数填满集属性。通常,声明一个mn的二维表,m表示运行实验的次数,n表示每次实验所需的随机数的个数。在行内,随机数是独立分布的;在行间,随机数是非常均匀的。这些随机数是用“分层取样”的方法产生的。model:data:M=4;N=2;seed=1234567;enddatasets:rows/1.M/;cols/1.N/
10、;table(rows,cols):x;endsetsdata:X=qrand(seed);enddataend如果没有为函数指定种子,则LINGO用系统时间构造种子。14rand(seed)返回0和1间的伪随机数,依赖于指定的种子。典型用法是U(I+1)=rand(U(I)。注意如果seed不变,那么产生的随机数也不变。例例.利用rand产生15个标准正态分布的随机数和自由度为2的t分布的随机数。model:!产生一列正态分布和t分布的随机数;sets:series/1.15/:u,znorm,zt;endsets!第一个均匀分布随机数是任意的;u(1)=rand(.1234);!产生其余的
11、均匀分布的随机数;for(series(I)|I#GT#1:u(I)=rand(u(I-1);for(series(I):!正态分布随机数;psn(znorm(I)=u(I);!和自由度为2的t分布随机数;ptd(2,zt(I)=u(I);!ZNORM和ZT可以是负数;free(znorm(I);free(zt(I););end5、变量界定函数、变量界定函数变量界定函数实现对变量取值范围的附加限制,共4种:bin(x)限制x为0或1bnd(L,x,U)限制LxUfree(x)取消对变量x的默认下界为0的限制,即x可以取任意实数gin(x)限制x为整数在默认情况下,LINGO规定变量是非负的,也
12、就是说下界为0,上界为+。free取消了默认的下界为0的限制,使变量也可以取负值。bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。例例.求函数z=(x+2)2+(y-2)2的最小值(free(x)函数的用法)例例.背包问题背包问题.某人打算外出旅游,路途远,考虑要带许多必要的旅游和生活用品n件,重量分别为wi,而受航空行李重量及个人体力的限制,能带走的行李总重量为b,n件物品的总重量超过了b,需要裁减。假设现有8件物品Weight:13 4331510(kg)Price:2938106410总量不超过15kg,试决定带哪些物品,使所带的物品总价值最大。6、集操作函数、集操作函数
13、LINGO提供了几个函数帮助处理集。1in(set_name,primitive_index_1,primitive_index_2,)如果元素在指定集中,返回1;否则返回0。例例全集为I,B是I的一个子集,C是B的补集。sets:I/x1.x4/;B(I)/x2/;C(I)|#not#in(B,&1):;endsets2index(set_name,primitive_set_element)该函数返回在集set_name中原始集成员primitive_set_element的索引。如果set_name被忽略,那么LINGO将返回与primitive_set_element匹配的第一个原始集
14、成员的索引。如果找不到,则产生一个错误。例例.如何确定集成员(B,Y)属于派生集S3。sets:S1/ABC/;S2/XYZ/;S3(S1,S2)/AX,AZ,BY,CX/;endsetsX=in(S3,index(S1,B),index(S2,Y);看下面的例子例子,表明有时为index指定集是必要的。sets:girls/debble,sue,alice/;boys/bob,joe,sue,fred/;endsetsI1=index(sue);I2=index(boys,sue);I1的值是2,I2的值是3。我们建议在使用index函数时最好指定集。3wrap(index,limit)该函
15、数返回j=index-k*limit,其中k是一个整数,取适当值保证j落在区间1,limit内。该函数相当于index模limit再加1。该函数在循环、多阶段计划编制中特别有用。4size(set_name)该函数返回集set_name的成员个数。在模型中明确给出集大小时最好使用该函数。它的使用使模型更加数据中立,集大小改变时也更易维护。5.集循环函数集循环函数遍历整个集进行操作。其语法为function(setname(set_index_list)|conditional_qualifier:expression_list);function相应于下面罗列的四个集循环函数之一;setnam
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 专题 资料 2021 2022 lingo 教程
限制150内