Lingo线性规划教程

974 阅读2分钟

「这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战」。

 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分析的步骤

  1. 在lingo中ctrl+I打开option
  2. 点击general solveer选项卡,将dual computat属性设置为princeses&ranges
  3. ctrl+r进行range分析

如图设置

range分析的结果解释