Lingo 软件的使用 数学建模 司守奎
作者:互联网
Lingo 软件的使用 数学建模 司守奎
1. Lingo 软件的基本语法
1.1集合
集合部分的语法
sets:
集合名称1/成员列表1/:属性1_1,属性1_2,…,属性1_n1;
集合名称2/成员列表2/:属性2_1,属性2_2,…,属性2_n2;
派生集合名称(集合名称1,集合名称2):属性3_1,…,属性3_n3;
endsets
例如
sets:
product/A B/;
machine/M N/;
week/1…2/;
allowed(product,machine,week):x;
endsets
1.2 数据
数据部分的语法
data:
属性 1= 数据列表;
属性 2= 数据列表;
enddata
1.3 数据计算段
数据计算段部分不能含有变量,必须为已知数据的计算
calc:
b=0;
a=a+1;
endcalc
1.4 变量初始化
主要用于非线性问题赋初始值
例如
init:
x,y=0,.1;
endinit
!LINGO函数,后做解释;
y=@log(x);
x^2+y^2<=1;
注意:
- Lingo中是不区分大小写字符的
- Lingo中数据部分不能使用分式,例如数据部分不能使用1/3
- Lingo中注释是使用"!"引导
- Lingo中默认所有变量都是非负
- Lingo中矩阵数据逐行存储,Matlab中数据逐列存储
2. Lingo函数
2.1 算术运算符
^ 乘方
* 乘
/ 除
+ 加
- 减
2.2 逻辑运算符
九种逻辑运算符
#not# 否定该操作数的逻辑值,#not#是一个一元运算符。
#eq# 若两个运算数相等,则为 true;否则为 false。
#ne# 若两个运算符不相等,则为 true;否则为 false。
#gt# 若左边的运算符严格大于右边的运算符,则为 true;否则为 false。
#ge# 若左边的运算符大于或等于右边的运算符,则为 true;否则为 false。
#lt# 若左边的运算符严格小于右边的运算符,则为 true;否则为 false。
#le# 若左边的运算符小于或等于右边的运算符,则为 true;否则为 false。
#and# 仅当两个参数都为 true 时,结果为 true;否则为 false。
#or# 仅当两个参数都为 false 时,结果为 false;否则为 true。
2.3 关系运算符
Lingo有三种关系运算符:"="、"<=“和”>="。
Lingo不支持严格小于和严格大于关系运算符,因此“<”也表示小于等于,“>”也表示大于等于。
2.4 数学函数
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 函数的自然对数。
@mod(x,y)返回 x 除以 y 的余数。
@sign(x)如果 x0 时返回 1,当 x=0 时返回 0。
@floor(x)返回 x 的整数部分。当 x>=0 时,返回不超过 x 的最大整数;当 x<0 时,返回不低于 x 的最大整数。
@smax(x1,x2,…,xn)返回 x1,x2,…,xn 中的最大值。
@smin(x1,x2,…,xn)返回 x1,x2,…,xn 中的最小值。
2.5 变量界定函数
实现对变量取值范围的附加限制,有4种:
@bin(x)限制 x 为 0 或 1;
@bnd(L,x,U)限制 L≤x≤U,L可以取负数,此时取消了变量x默认下界为零的约束;
@free(x)取消对变量 x 的默认下界为 0 的限制,即 x 可以取任意实数;
@gin(x)限制 x 为整数。
2.6 集循环函数
@for:该函数用来产生对集成员的约束。
@sum:该函数返回遍历指定的集成员的一个表达式的和。
@min 和@max:返回指定的集成员的一个表达式的最小值或最大值。
!@for程序示例;
model:
sets:
number/1..5/:x;
endsets
@for(number(I): x(I)=I^2);
end
!@sum程序示例;
model:
data:
N=6;
enddata
sets:
number/1..N/:x;
endsets
data:
x = 5 1 3 4 6 10;
enddata
s=@sum(number(I) | I #le# 5: x);
end
!@sum @max 程序示例
model:
data:
N=6;
enddata
sets:
number/1..N/:x;
endsets
data:
x = 5 1 3 4 6 10;
enddata
minv=@min(number(I) | I #le# 5: x);
maxv=@max(number(I) | I #ge# N-2: x);
end
2.7 概率函数
2.8 集操作函数
3.对输出做一些简单解释
以简单的线性规划问题为例,求解程序如下
model:
max=72*x1+64*x2;
x1+x2<=50;
12*x1+8*x2<=480;
3*x1<=100;
end
Reduced Cost:变量变动时目标函数值的变化率
Slack or Surplus:最优解下的约束剩余值
Dual Price:约束变动时的目标函数值的变化率
Allowable Increase:最优解不变的允许最大变化值
Allowable Decrease:最优解不变的允许最小变化值
求解器状态窗口界面
学习了Lingo基本语法之后,读懂建模示例程序文件,再进一步自主应用。
标签:返回,false,函数,司守奎,建模,运算符,true,Lingo 来源: https://blog.csdn.net/weixin_45775472/article/details/113444331