§4 LINGO函数 说明: 有了前几节的基础知识,再加上本节的内容,就能够借助于LⅠNGO 建立并求解复杂的优化模型。 函数类型(9种) 1.基本运算符:算术运算符、逻辑运算符、关系运算符 2.数学函数:三角函数和常规的数学函数 3.金融函数:两种金融函数 4.概率函数:大量概率相关的函数 5.变量界定函数:定义变量的取值范围 6,集操作函数:对集的操作提供帮助 7.集循环函数:遍历集的元素,执行一定的操作的函数 8.数据输入输岀函数:允许模型和外部数据源相联系, 进行数据的输入输出 9.辅助函数:各种杂类函数
说明: 有了前几节的基础知识,再加上本节的内容,就能够借助于LINGO 建立并求解复杂的优化模型。 函数类型(9种): 1.基本运算符:算术运算符、逻辑运算符、关系运算符 2.数学函数:三角函数和常规的数学函数 3.金融函数:两种金融函数 4.概率函数:大量概率相关的函数 5.变量界定函数:定义变量的取值范围 6.集操作函数:对集的操作提供帮助 7.集循环函数:遍历集的元素,执行一定的操作的函数 8.数据输入输出函数:允许模型和外部数据源相联系, 进行数据的输入输出 9. 辅助函数:各种杂类函数 §4 LINGO 函数
4.1基本运算符 4.1.1算术运算符 二元运算符(五类):^乘方、*乘、/除、+加、-减 取反函数:-(唯一的一元算术运算符) 优先级由高到底: 高-(取反) 低 运算次序:从左到右按优先级高低执行。 运算的序可用圆括号“()”改变。 例4.1算术运算符示例。 2-5/3,(2+4)/5等等
4.1 基本运算符 4.1.1 算术运算符 二元运算符(五类):^乘方、﹡乘、/除、﹢加、﹣减 取反函数:﹣(唯一的一元算术运算符) 优先级由高到底: 高 ﹣(取反) ^ ﹡/ 低 ﹢﹣ 运算次序:从左到右按优先级高低执行。 运算的序可用圆括号“()”改变。 例4.1 算术运算符示例。 2﹣5/3,(2﹢4)/5等等
4.1.2逻辑运算符 说明: 主要用于集循环函数的条件表达式中,控制在函数中哪些集成员被包含, 哪些被排斥。在创建稀疏集时用在成员资格过滤器中 9种逻辑运算符: #not#否定该操作数的逻辑值,一元运算符 #eq#若两个运算数相等,为true;否则为 flase #ne#若两个运算符不相等,为true;否则为 flase #gt#若左边运算符严格大于右边运算符,为true;否则为 flase #ge#若左边运算符大于或等于右边的运算符,为true;否则为 flase #1t#若左边运算符严格小于右边运算符,为true;否则为 flase #le#若左边运算符小于或等于右边运算符,为true;否则为 flase #and#仅当两个参数都为true时,结果为true;否则为 flase #or#仅当两个参数都为 false时,结果为 false;否则为true 运算符的优先级由高到低: 高井not #ea##ne##gt##ge##lt##le# 低井and##Or# 例4.2逻辑运算符示例2#gt#3#and#4#gt#2,结果为假(0)
说明: 主要用于集循环函数的条件表达式中,控制在函数中哪些集成员被包含, 哪些被排斥。在创建稀疏集时用在成员资格过滤器中。 9种逻辑运算符: #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# 例4.2 逻辑运算符示例 2 #gt# 3 #and# 4 #gt# 2,结果为假(0)。 4.1.2 逻辑运算符
41.3关系运算符 说明:主要用在模型中,指定一个表达式的左边是否等于、小于等于 或大于等于右边,形成模型的一个约束条件。 关系运算符与逻辑运篁符井eq#、#e#、#ge排区别:截然不同,前者是模 型中该关系运算符所指定关系的为真描述,后者仅仅判断一个该关系是 否被满足:满足为真,不满足为假。 关系运算符(三种):“=”、“=”。 说明:还能用“<”表示小于等于关系,“”表示大于等于关系。 不支持严格小于和严格大于关系运算符 若需要严格小于和严格大于关系,比如让A严格小于B:A<B, 则可把它变成如下的小于等于表达式 A+ε<=B,ε是一个小的正数,其值依赖于模型中A小于B多少才算不等。 三类操作符的优先级: 高#nOt# (取反) #eg##ne##gt##ge##lt##le# #and##or# 低
说明:主要用在模型中,指定一个表达式的左边是否等于、小于等于、 或大于等于右边,形成模型的一个约束条件。 关系运算符与逻辑运算符#eq#、#le#、#ge#区别:截然不同,前者是模 型中该关系运算符所指定关系的为真描述,后者仅仅判断一个该关系是 否被满足:满足为真,不满足为假。 关系运算符(三种):“ = ” 、 “=” 。 说明:还能用“”表示大于等于关系。 不支持严格小于和严格大于关系运算符。 若需要严格小于和严格大于关系,比如让A严格小于B:A= 4.1.3 关系运算符
42数学函数 标准数学函数: @abs( 返回x的绝对值 @sin(x 返回x的正弦值,x采用弧度制 @ COS (X): 返回x的余弦值 @tan(x 返回x的正切值 @exp(x): 返回常数e的x次方 @|og(x): 返回x的自然对数 @Igm x): 返回x的 ganna函数的自然对数 (即(x-1)!的自然对数) @sign(x: 如果x=0时,返回不超过x的最大整数; x<0时,返回不低于x的最大整数 @smax(x1,x2,…,xn):返回x1,x2,…,xn中的最大值 @smin(x1,x2,,xn):返回x1,x2,…,xn中的最小值
标准数学函数: @abs(x): 返回x的绝对值 @sin(x): 返回x的正弦值,x采用弧度制 @cos(x): 返回x的余弦值 @tan(x): 返回x的正切值 @exp(x): 返回常数e的x次方 @log(x): 返回x的自然对数 @lgm(x): 返回x的gamma函数的自然对数 (即(x-1)!的自然对数) @sign(x): 如果x=0时,返回不超过x的最大整数; x<0时,返回不低于x的最大整数。 @smax(x1,x2,…,xn):返回x1,x2, … ,xn中的最大值 @smin(x1,x2,…,xn):返回x1,x2, … ,xn中的最小值 4.2 数学函数
例4.3给定一个直角三角形,求包含该三角形的最小正方形 解:如图所示。 CE=asinx AD=bcosx DE=acosx+bsinx 求最小的正方形相当于求如下的最优化问题: min maxCE. AD, DE E 0≤X a A
求最小的正方形相当于求如下的最优化问题: 例4.3 给定一个直角三角形,求包含该三角形的最小正方形 解:如图所示。 0 2 min max , , x CE AD DE CE a x = sin AD b x = cos DE a x b x = + cos sin C E A D b B x a
代码: mode l sets: object/1.3/: fi endsets data a,b=3,4;!两个直角边长,修改很方便 enddata f(1)=a x @sin(x)i f(2)=b*@cos(x); f(3)=a x cos(x)+ b* sin(x)i min=@smax(f(1),f(2),f(3)); ebnd(0,x,1.57); end 函数@bnd,详情见4.5节
代码: model: sets: object/1..3/: f; endsets data: a, b = 3, 4; !两个直角边长,修改很方便; enddata f(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); end 函数@bnd,详情见4.5节
43金融函数 目前 LINGO提供了两个金融函数。 1. @fpa(I, n) 返回如下情形的浄现值:单位时段利率为,连续π个时段支付,每 个时段支付单位费用。若每个时段支付x单位的费用,则净现值可 用x乘以@fpa(I,n)算得。计算公式: 1-(1+ k=1(1+ 即在一定时期内为了获得一定收益在该时期初所支付的实际费用。 例4.4贷款买房问题 贷款金额50000元,贷款年利率5.31%,采取分期付款方式(每年年 末还固定金额,直至还清)。问拟贷款10年,每年需偿还多少元? 代码: 50000=x*@fpa(.0531,10); 答案:x=6573.069元
目前LINGO提供了两个金融函数。 1.@fpa(I,n) 返回如下情形的净现值:单位时段利率为I,连续n个时段支付,每 个时段支付单位费用。若每个时段支付x单位的费用,则净现值可 用x乘以@fpa(I,n)算得。计算公式: 即在一定时期内为了获得一定收益在该时期初所支付的实际费用。 例4.4 贷款买房问题 贷款金额50000元,贷款年利率5.31%,采取分期付款方式(每年年 末还固定金额,直至还清)。问拟贷款10年,每年需偿还多少元? 代码: 50000 = x * @fpa(.0531,10); 答案:x=6573.069元。 4.3 金融函数 ( ) ( ) 1 1 1 1 1 n n k k I I I − = − + = +
2. @fpif, n)- 返回如下情形净现值:单位时段利率为I,第n个时段支付单位费用 计算公式:(1+D) 两个函数间的关系: @加p(,m)=∑@加l(,k) =1
2.@fpl(I,n) 返回如下情形净现值:单位时段利率为I,第n个时段支付单位费用 计算公式: 两个函数间的关系: (1 ) n I − + ( ) ( ) 1 @ , @ , n k fpa I n fpl I k = =
44概率函数 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(,x,c):当负荷上限为a,顾客数为,平行服务器数量 为x时,有限源的 Poisson服务系统的等待或返修顾客数的期望值。a 是顾客数乘以平均服务时间,再除以平均返修时间。当c和(或)x 不是整数时,采用线性插值进行计算 7.@phg(pop,g,n,x):超几何( yper geometrIc)分布的分布函数 pop是产品总数,g是正品数。从所有产品中任意取出n(m≤pop) 件。pop,g,n和x都可以是非整数,采用线性插值进行计算
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):超几何(Hyper geometric)分布的分布函数 。pop是产品总数,g是正品数。从所有产品中任意取出n(n≤pop) 件。pop,g,n和x都可以是非整数,采用线性插值进行计算。 4.4 概率函数