好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

专题资料(2021-2022年)lingo教程2.ppt

52页
  • 卖家[上传人]:王****
  • 文档编号:238589873
  • 上传时间:2022-01-12
  • 文档格式:PPT
  • 文档大小:340KB
  • / 52 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 第二讲 lingo的运算符和函数1.基本运算符 算术运算符 算术运算符是针对数值进行操作的LINGO提供了5种二元运算符: 乘方 乘 除 加 减 LINGO唯一的一元算术运算符是取反函数“” 这些运算符的优先级由高到底为:高:(取反), , ,低 运算符的运算次序为从左到右按优先级高低来执行运算的次序可以用圆括号“()”来改变 如:253,(24)5等等逻辑运算符在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#如逻辑运算符示例2#gt#3#and#4#gt#2,其结果为假(0)。

      关系运算符 在LINGO中,关系运算符主要是被用在模型中,来指定一个表达式的左边是否等于、小于等于、或者大于等于右边,形成模型的一个约束条件关系运算符与逻辑运算符#eq#、#le#、#ge#截然不同,前者是模型中该关系运算符所指定关系的为真描述,而后者仅仅判断一个该关系是否被满足:满足为真,不满足为假 LINGO有三种关系运算符:“=”、“=”LINGO中还能用“”表示大于等于关系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)返回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);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)返回如下情形的净现值:单位时段利率为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时,有限源的Poisson服务系统的等待或返修顾客数的期望值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):单位正态线性损失函数,即返回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/;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);!产生其余的均匀分布的随机数;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规定变量是非负的,也就是说下界为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 、集操作函数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匹配的第一个原始集成员的索引如果找不到,则产生一个错误例.如何确定集成员(B,Y)属于派生集S3sets: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)该函数返回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相应于下面罗列的四个集循环函数之一;setname是要遍历的集;set_index_list是集索引列表;conditional_qualifier是用来限制集循环函数的范围,当集循环函数遍历集的每个成员时,LINGO都要对conditional_qualifier进行评价,若结果为真,则对该成员执行function操作,否则跳过,继续执行下一次循环。

      expression_list是被应用到每个集成员的表达式列表,当用的是for函数时,expression_list可以包含多个表达式,其间用逗号隔开这些表达式将被作为约束加到模型中当使用其余的三个集循环函数时,expression_list只能有一个表达式如果省略set_index_list,那么在expression_list中引用的所有属性的类型都是setname集1)for该函数用来产生对集成员的约束基于建模语言的标量需要显式输入每个约束,不过for函数允许只输入一个约束,然后LINGO自动产生每个集成员的约束例产生序列1,4,9,16,25model:sets:number/1.5/:x;endsetsfor(number(I):x(I)=I2);end(2)sum该函数返回遍历指定的集成员的一个表达式的和例. 求向量5,1,3,4,6,10前5个数的和model:data:N=6;enddatasets:nu。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.