其他分享
首页 > 其他分享> > Lingo 软件的使用 数学建模 司守奎

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;

注意:

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