文档介绍:说明:
有了前几节的基础知识,再加上本节的内容,就能够借助于LINGO建立并求解复杂的优化模型。
函数类型(9种):
:算术运算符、逻辑运算符、关系运算符
:三角函数和常规的数学函数
:两种金融函数
:大量概率相关的函数
:定义变量的取值范围
:对集的操作提供帮助
:遍历集的元素,执行一定的操作的函数
:允许模型和外部数据源相联系, 进行数据的输入输出
9. 辅助函数:各种杂类函数
§4 LINGO 函数
基本运算符
算术运算符
二元运算符(五类):^乘方、﹡乘、/除、﹢加、﹣减
取反函数:﹣(唯一的一元算术运算符)
优先级由高到底:
高﹣(取反)
^
﹡/
低﹢﹣
运算次序:从左到右按优先级高低执行。
运算的序可用圆括号“()”改变。
算术运算符示例。
2﹣5/3,(2﹢4)/5等等。
说明:
主要用于集循环函数的条件表达式中,控制在函数中哪些集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。
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#
逻辑运算符示例 2 #gt# 3 #and# 4 #gt# 2,结果为假(0)。
逻辑运算符
说明:主要用在模型中,指定一个表达式的左边是否等于、小于等于、或大于等于右边,形成模型的一个约束条件。
关系运算符与逻辑运算符#eq#、#le#、#ge#区别:截然不同,前者是模型中该关系运算符所指定关系的为真描述,后者仅仅判断一个该关系是否被满足:满足为真,不满足为假。
关系运算符(三种):“=”、“<=”、“>=”。
说明:还能用“<”表示小于等于关系,“>”表示大于等于关系。
不支持严格小于和严格大于关系运算符。
若需要严格小于和严格大于关系,比如让A严格小于B:A<B,
则可把它变成如下的小于等于表达式:
A+ε<=B,ε是一个小的正数,其值依赖于模型中A小于B多少才算不等。
三类操作符的优先级:
高#not# ﹣(取反)
^
﹡/
﹢﹣
#eq# #ne# #gt# #ge# #lt# #le#
#and# #or#
低<= = >=
关系运算符
标准数学函数:
***@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返回-1;否则,返回1
***@floor(x): 返回x的整数部分。 x>=0时,返回不超过x的最大整数; x<0时,返回不低于x的最大整数。
***@smax(x1,x2,…,xn):返回x1,x2,…,xn中的最大值
***@smin(x1,x2,…,xn):返回x1,x2,…,xn中的最小值
数学函数
求最小的正方形相当于求如下的最优化问题:
给定一个直角三角形,求包含该三角形的最小正方形
解:如图所示。
E
C
D
A
B
b
x
a
代码:
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,);
end
函数***@bnd,。
目前LINGO提供了两个金融函数。
1.***@fpa(I,n)
返回