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));