Lingo主要用于求解非线性规划及一些线性和非线性方程组的求解等,功能十分强大,是求解优化模型的最佳选择;
提供有十几个内部函数,允许决策变量是整数(即整数规划,包括0-1整数规划)
逻辑运算符
(通常出现于for、sum、if中)
#not# 否定该操作数的逻辑值 #eq# 若两个运算数相等 #ne# 若两个运算符不相等 #gt# 若左边的运算符严格大于右边的运算符 #ge# 若左边的运算符大于或等于右边的运算符 #lt# 若左边的运算符严格小于右边的运算符 #le# 若左边的运算符小于或等于右边的运算符 #and# 仅当两个参数都为true时,结果为true #or# 仅当两个参数都为false时,结果为false
常用数学函数
@abs(x)
@exp(x)
@sin(x)
@log(x)
@cos(x)
@tan(x) @lgm(x) 返回x的gamma函数的自然对数 @sign(x) 如果x<0则返回-1;否则返回1 @smax(x1,x2,….,xn) 返回x1,x2,….,xn中的最大值 @smin(x1,x2,….,xn) 返回x1,x2,….,xn中的最小值 @prod 求积 @floor(x) 返回x的整数部分,当x>=0时,返回不超过x的最大整数,当x<0时,返回不低于x的最大整数
用lingo解优化模型时默认所有变量非负
@free(x) 使得x可以取到任意实数 @gin(x) 表示让x变量取整数 @bin(x) 表示让x变量取0或1 @bnd(b,n,d) 表示n的取值范围在b和d之间
集合
1 sets: 2 factory /1..6/ :a,b; 3 plant /1..3/ :x,y; 4 endsets
data: a = 1,2,3,4,5,6; b = 3,4,5,6,7,8; x = 9,8,7; enddata
@for(factory(i) : s = a(i)*x(i));
@sum(factory(i) : x(i)) = 5000;
矩阵合并
表示C,X为6行8列

1 sets: 2 factory1 /1..6/ : a; 3 factory2 /1..8/ : d; 4 coor(factory1,factory2) : c,x; 5 endsets 6 7 data: 8 a = 60,55,51,43,41,52; 9 d = 35,37,22,32,41,32,43,38; 10 c = 6,2,6,7,4,2,5,8 11 4,9,5,3,8,5,8,2 12 5,2,1,9,7,4,3,3 13 7,6,7,3,9,2,7,1 14 2,3,9,5,7,2,6,5 15 5,5,2,2,8,1,4,3; 16 enddata 17 18 min = @sum(coor(i,j) : c(i,j)*x(i,j)); 19 @for(factory1(i) : @sum(factory2(j) : x(i,j))<=a(i)); 20 @for(factory2(j) : @sum(factory1(i) : x(i,j))=d(j));
分段函数
x = 1500; y = @if(x#le#500,4*x,@if(x#le#1000,500+3*x,1500+2*x));