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#
数学函数
函数 | 解释 |
---|---|
@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返回-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中的最小值 |
变量界定函数
函数 | 解释 |
---|---|
@bin(x) | 限制x为0或1 |
@bnd(L,x,U) | 限制L≤x≤U |
@free(x) | 取消对变量x的默认下界为0的限制,即x可以取任意实数 |
@gin(x) | 限制x为整数 |
在默认情况下,LINGO规定变量是非负的,也就是说下界为0,上界为+∞。
@free取消了默认的下界为0的限制,使变量也可以取负值。
@bnd用于设定一个变量的上下界,它也可以取消默认下界为0的约束。
循环函数
@for
该函数用来产生对集成员的约束。基于建模语言的标量需要显式输入
每个约束,不过@for函数允许只输入一个约束,然后LINGO自动产生
每个集成员的约束。
@sum
该函数返回遍历指定的集成员的一个表达式的和。
@min和@max
返回指定的集成员的一个表达式的最小值或最大值。
输入输出函数
略
辅助函数
略
金融函数
略
常规线性规划
例题切入:加工奶制品的生产计划
1桶牛奶有两种生产方式:(A)12小时/3公斤,获利24元/公斤;(B)8小时/4公斤,获利16元/公斤。
题目需求:50桶牛奶,480小时,至多加工100公斤A。
制定生产计划使每天获利最大。
lingo代码如下
max=72*a+64*b;!获利函数;
a+b<50;!桶数量约束;
12*a+8*b<480;!时间约束;
3*a<100;!a数量约束;
!非负约束;
a>0;
b>0;
结果的相关注解:
对结果进行range分析的步骤
- 在lingo中ctrl+I打开option
- 点击general solveer选项卡,将dual computat属性设置为princeses&ranges
- ctrl+r进行range分析
如图设置
range分析的结果解释