导图社区 LIngo的快速入门
可以让你快速看懂Lingo中的各种语法,理解其含义,并可以简单用其编写线性规划和非线性规划问题。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
LIngo
注意事项
所有符号都是英文格式下,变量字母,数字,下划线(数字不开头)
Lingo不区分大小写
objection value 目标值
注释:以 '!' 开头以 ';' 结尾
语句结尾用;
Lingo变量:默认所有变量为大于等于0的数字,所以非负条件可以不必多写。
Lingo语言原理是一个一个的方程。
线性规划基础
一个线性规划中只含有一个目标方程。(两个及以上是多目标线性规划,Lingo无法直接求解)
求目标方程最大最小值,分别用 max=... / min=... 来表示
线性规划和非线性规划的本质区别是目标函数是否线性,其余都一样,故在Lingo中不予区分
基础语法
矩阵的创建
sets:
//创建矩阵起始标志
//因为Lingo不是一行一行读取代码的,故加起始标志可以区分先后
matrix1 /1..6/:a,b;
//创建了a,b两个矩阵,它们是1X6的矩阵(前面的matrix1算是自己定义的类型名,matrix1是一个1X6矩阵的类型。)
matrix2 /1..3/:x,y;
//创建了x,y两个矩阵,它们是1X3的矩阵
//没赋值前矩阵a,b,x,y的每个元素会有一个默认值1.234568
cooperation(matrix1,matrix2):w,z;
//二维矩阵的建立,建立了一个matrix1Xmatrix2的矩阵,也就是6X3的二维矩阵
//赋值时w(i,j) i=1,2,3,4,5,6 j=1,2,3
endsets
//创建矩阵结束标志
矩阵的赋值
data:
a=1,2,3,4,5,6;
//整数赋值
b=1.0,2.0,3.0,4.0,5.0,6.0;
//小数赋值
x=10,20,30;
y=40,50,60;
enddata
//矩阵赋值要赋满,不能多也不能少
//不是每个矩阵都要赋值,有些矩阵正是我们要求解的变量
循环
@for(matrix1(i):s=a(i)*x(i))
//相当于建立了一个matrix1型,也就是1X6型的变量i。意味着这要循环1X6次:i=1,2,3,4,5,6
@sum(matrix(i):a(i))=5000
//同上,建立了一个1X6的循环,相当于a(1)+a(2)+a(3)+a(4)+a(5)+a(6)=5000
条件
@if(表达式,真,假)
常用于分段函数
y=
4x 0<=x<=500
500+3x 500<x<=1000
1500+2x x>1000
例如@if(x#le#500,4*x,@if(x#gt#1000,1500+2*x,500+3*x))
if的嵌套使用。也就是如果x小于等于500,则4*x。否则如果x大于1000,则为1500+2*x,否则为500+3*x
运算符
关系运算符
=
>=
//没有单独的>或<如果这样用Lingo会默认你省略了=
<=
//可以用加附加精度来达到>或<的目的
例如:x<5 可以写成
e=0.00001
x<=5+e
x-e>=5
逻辑运算符
两个变量之间
a#eq#b
a,b相等为真 equal
a#ne#b
a,b不相等为真 no equal
a#gt#b
a大于b为真 greater than
a#ge#b
a大于等于b为真 greater equal
a#lt#b
a小于b为真 less than
a#le#b
a小于等于b为真 less equal
两个逻辑表达式之间
#and# :与
#or# :或
#not# :非
变量定界函数
@bin(x):限制x只能取0或者1(01规划的时候用)
@gin(x):限制x为整数(整数规划的时候用)
@bnd(a,x,b):限制a<=x<=b,可以用它直接替换两个约束条件
@free(x):取消对x非负的限制(因为Lingo默认值都是非负的)
数学函数
三角函数
@sin(x)
@cos(x)
@tan(x)
返回x的正弦,余弦,正切值
指数对数函数
@log(x):返回x的自然对数(其它底数用换底公式)
@exp(x):返回e的x次方(因为e无法直接敲如而产生)
其它公式
@abs(x):x的绝对值
sigh(x):符号函数,大于0为1,小于0为-1
@floor(x):靠近0的一边取整
@smax(x1,x2...xn):返回其中最大值
@smin(x1,x2...xn):返回其中最小值
集合操作函数
@prod(matrix1:a):求积
返回值为6X5X4X3X2X1
@max(matrix1:a):求其中最大值
@min(matrix1:a):求其中最小值
@in(matrix1:c):判断常数c是否在集合中,存在返回1
@size(matrix1):返回matrix1的长度
复合语句
model:
......
end
//相当于复合语句{......}把model:和end之间当成一个语句