常用指令

标量线性规划

步骤:

  1. 确定集合
  2. 输入已知数据
  3. 输入模型

除了\(C_{ij}\)其余都是已知的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sets:
S/1..6/: a, b, d;
T/1,2/: e, x, y;
U(S,T): c;
endsets

data:
a=1.25 8.75 0.5 5.75 3 7.25;
b=1.25 0.75 4.75 5 6.5 7.75;
d=3 5 4 7 6 11;
x=5 2;
y=1 7;
e=20 20;
enddata

min= @sum(T(j): @sum(S(i):
c(i,j) * @sqrt( (x(j) - a(i))^2 + (y(j) - b(i))^2 )
));

@for( S(i): @sum(T(j): c(i,j)) = d(i) );
@for( T(j): @sum(S(i): c(i,j)) <= e(j) );

矩阵线性规划

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sets:
A/1..6/: scap;
B/1..8/: bcap;
C(A, B): cost, vol;
endsets

data:
scap = 60 55 51 43 41 52;
bcap = 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

min = @sum(C: cost * vol);

@for(B(J): @sum(A(I): vol(I, J)) = bcap(J));
@for(A(I): @sum(B(J): vol(I, J)) <= scap(I));

非线性规划

1
2
3
4
5
min = x1 ^ 2 + x2 ^2 + 8;
x1 ^ 2 - x2 >= 0;
-x1 -x2 ^ 2 + 2 = 0;
x1 >= 0;
x2 >= 0;

整数规划

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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));

0-1规划

1
2
3
4
5
6
7
8
9
max = 3 * x1 - 2 * x2 + 5 * x3;

x1 + 2 * x2 - x3 <= 2;
x1 + 4 * x2 + x3 <= 4;
x1 + x2 <= 3;
4 * x2 + x3 <= 6;
@bin(x1);
@bin(x2);
@bin(x3);

本文参考:LINGO求解规划问题代码