写在开头:
- LINGO默认所有变量是非负的。
- LINGO中没有严格的
<
和>
,<
代表<=
,>
代表>=
。 - LINGO不区分变量的大小写。
- LINGO的注释用
!
开头,;
结尾。
线性规划
标量线性规划
求解下列问题:
代码:
model:
min=2*x1+3*x2;
x1+x2>350;
x1>100;
2*x1+x2<600;
end
矩阵线性规划
代码:
model:
sets:
warehouses/wh1..wh6/: capacity;
vendors/v1..v8/: demand;
links(warehouses,vendors): cost, volume;
endsets
!目标函数;
min=@sum(links: cost*volume);
@for(vendors(J):@sum(warehouses(I): volume(I,J))=demand(J));
@for(warehouses(I):@sum(vendors(J): volume(I,J))<=capacity(I));
data:
capacity=60 55 51 43 41 52;
demand=35 37 22 32 41 32 43 38;
cost=6 2 6 7 4 2 9 5
4 9 5 3 8 5 8 2
5 2 1 9 7 4 3 3
7 6 7 3 9 2 7 1
2 3 9 5 7 2 6 5
5 5 2 2 8 1 4 3;
enddata
end
非线性规划
无特殊限制
model:
min=(x1)^2+(x2)^2+8;! 目标函数;
x1^2-x2>=0;
-x1-x2^2+2=0;
x1>=0;
x2>=0;! 约束条件;
end
整数规划
model:
sets:
row/1..4/:b;
col/1..5/:c1,c2,x;
link(row,col):a;
endsets
data:
c1=1,1,3,4,2;
c2=-8,-2,-3,-1,-2;
a=1 1 1 1 1
1 2 2 1 6
2 1 6 0 0
0 0 1 1 5;
b=400,800,200,200;
enddata
max=@sum(col:c1*x^2+c2*x);
@for(row(i):@sum(col(j):a(i,j)*x(j))<b(i));
@for(col:@gin(x)); !表示x为整数
@for(col:@bnd(0,x,99));
end
01规划
通常是一类特殊的线性规划,只是变量值只能为0或1。
model:
max=3*x1-2*x2+5*x3;
x1+2*x2-x3<2;
x1+4*x2+x3<4;
x1+x2<3;
4x2+x3<6
@bin(x1);@bin(x2);@bin(x3);
end
P.s 不知道为啥复制过去就老是报语法错误,手打就没有这个问题QAQ。