建模
变量
ai表示第i个工厂的加工量
bj表示第j个门市部的销量
cij表示运价,从第i个加工厂到第j个门市部运送一吨糖果的价格
决策变量:xij 从第i个加工厂到第j个门市部的糖果数量
一般形式
m i n z = ∑ ∑ c i j ∗ x i j s . t . { ∑ j x i j = a i ∑ i x i j = b j x i j ≥ 0 min z = \sum \sum cij * xij\\ s.t. \left\{ \begin{matrix} \sum_j xij = ai\\ \sum_i xij = bj\\ xij \geq 0 \end{matrix} \right. minz=∑∑cij∗xijs.t.⎩ ⎨ ⎧∑jxij=ai∑ixij=bjxij≥0
矩阵形式
A = [ 7 4 9 ] B = [ 3 6 5 6 ] C = [ 3 11 3 10 1 8 2 8 7 4 10 5 ] X = [ x 11 x 12 x 13 x 14 x 21 x 22 x 23 x 24 x 31 x 32 x 33 x 34 ] A = [\begin{matrix}7&4&9\end{matrix}] \\ B= [\begin{matrix}3&6&5&6\end{matrix}] \\ C=\left [ \begin{matrix} 3&11&3&10\\ 1&8&2&8\\ 7&4&10&5 \end{matrix} \right]\\ X = \left [ \begin{matrix} x_{11}&x_{12}&x_{13}&x_{14}\\ x_{21}&x_{22}&x_{23}&x_{24}\\ x_{31}&x_{32}&x_{33}&x_{34}\\ \end{matrix} \right] A=[749]B=[3656]C= 317118432101085 X= x11x21x31x12x22x32x13x23x33x14x24x34
Lingo 建立模型
方法
定义集合
给常量赋值
目标函数的表达
约束条件的表达
模型求解
定义集合
! 建立加工厂集合及产量;
factory/1..3/:A;
! 建立门市部集合及产量;
shop/1..4/:B;
!建立联系集合及运价和运量,派生集合,双下标变量;
LINK(factory,shop):C,X;
给常量赋值
DATA:
A = 7 4 9;
B = 3 6 5 6;
C =
3 11 3 10
1 9 2 8
7 4 10 5;
ENDDATA
目标函数的表达
m i n z = ∑ ∑ c i j ∗ x i j min z = \sum \sum cij * xij minz=∑∑cij∗xij
MIN = @SUM (LINK(i,j): C(i,j) * X(i,j));
约束条件的表达
1.产量约束
∑
j
x
i
j
=
a
i
\sum_j xij = ai
∑jxij=ai
@for(factory(i): @sum(shop(j): x(i,j)) = A(i));
2.销量约束
∑
i
x
i
j
=
b
j
\sum_i xij = bj
∑ixij=bj
@for(shop(j): @sum(factory(i): x(i,j)) = b(j));
3.自身约束
x
i
j
≥
0
xij \geq 0
xij≥0
lingo 默认非负
完整代码
MODEL:
SETS:
factory/1..3/:A;
shop/1..4/:B;
LINK(factory,shop):C,X;
ENDSETS
DATA:
A = 7 4 9;
B = 3 6 5 6;
C =
3 11 3 10
1 9 2 8
7 4 10 5;
ENDDATA
MIN = @SUM (LINK(i,j): C(i,j) * X(i,j));
@for(factory(i): @sum(shop(j): x(i,j)) = A(i));
@for(shop(j): @sum(factory(i): x(i,j)) = b(j));
END