Min
𝑧
=
𝑛
𝑖
=
1
𝑚
𝑗
=
1
𝑥1
𝑖𝑗
𝑐1
𝑖𝑗
+
𝑚
𝑗
=
1
𝑝
𝑘
=
1
𝑥2
𝑗𝑘
𝑐2
𝑗𝑘
+
𝑚
𝑗
=
1
𝑛
i
=
1
𝑥1
𝑖𝑗
+
𝑝
𝑘
=
1
𝑥2
𝑗𝑘
𝑐3
𝑗
①
𝑚
𝑗
=
1
𝑥1
𝑖𝑗
≤
𝑃𝑎
𝑖
②
𝑚
𝑗
=
1
𝑥2
𝑗𝑘
=
𝑑
k
③
𝑛
i
=
1
𝑥1
𝑖𝑗
=
𝑝
𝑘
=
1
𝑥2
𝑗𝑘
④
𝑥1
𝑖𝑗
≥
0,
𝑥2
𝑗𝑘
≥
0
⑤
①目标函数是求用最小的费用使工厂的产品经过一个或多个仓库运
到顾客处;最少运费为这个过程的运送量与对应的运费的乘积之和加
上中转费②从每个工厂到各个仓库的运送量要不超过工厂的产量;③
各个仓库到每个顾客的运送量等于顾客的需求量;④对每个仓库来说,
运进量和运出量相等;⑤工厂到仓库、仓库到顾客的运送量要满足非
负约束
代码
model:
sets:
row1/1..3/:pa;
row2/1..3/:c3;
row3/1..5/:d;
link1(row1,row2): c1,x1 ;
link2(row1,row3): c2,x2 ;
endsets
data:
pa=8 7 6;
d=3 3 4 5 3;
c1=7 3 5
3 4 3
0 3 5;
c2=5 7 2 5 4
7 6 7 0 3
6 5 4 4 3;
c3=0.3 0.4 0.4;
enddata
min = @sum(row1(i):@sum(row2(j):x1(i,j)*c1(i,j)))+
@sum(row2(j):@sum(row3(k):x2(j,k)*c2(j,k)))+
@sum(row2(j):(@sum(row1(i):x1(i,j))*c3(j)+@sum(row3(k):x2(j,k))*c3(
j)));
@for(row1(i):@sum(row2(j):x1(i,j))<=pa(i));
@for(row3(k):@sum(row2(j):x2(j,k))=d(k));
@for(row2(j):@sum(row1(i):x1(i,j))=@sum(row3(k):x2(j,k)));
end