建立多产品的模型,并且需要满足两点间的运输量不能超过两点间车辆的运载量条件
已知条件
(1)两点间车辆运载量默认625
(2)三种产品Bands Coils Plate的单位运费如下
三种产品不同两点间的运输费率:
bands产品运费率:
FRA DET LAN WIN STL FRE LAF
GARY 30 10 8 10 11 71 6
CLEV 22 7 10 7 21 82 13
PITT 19 11 12 10 24 83 15
(3)mode模型
set ORIG; #起始点
set DEST; #目的点
set prod; #三种产品
param supply {ORIG,prod} >= 0; #和始发站及产品有关,不同产品供应量不一样的
param demand {DEST,prod} >= 0; #不同目的站,不同产品的需求不一样
#运载量限制条件
param limit; #运载量是和两点间有关的
param cost {ORIG,DEST,prod} >= 0;
var Trans {ORIG,DEST,prod} >= 0;
minimize Total_Cost:
sum {i in ORIG,j in DEST,p in prod} cost[i,j,p] * Trans[i,j,p];
#不同始发站不同产品发往所有目的站,不能超过对应的产品的供应量
subject to Supply {i in ORIG,p in prod}:
sum {j in DEST} Trans[i,j,p] <= supply[i,p];
subject to Demand {j in DEST,p in prod}:
sum {i in ORIG} Trans[i,j,p] <= supply[i,p];
subject to capacity_limit{}i in ORIG,j in DEST:
sum {p in prod} Trans[i,j,p] <= limit;
set ORIG;#
set DEST;
set LINKS:= {i in ORIG,j in DEST};
param supply {ORIG} >= 0;
param demand {DEST} >= 0;
param cost {LINKS} >= 0;
var Trans {LINKS} >= 0;
minimize Total_Cost:
sum {(i,j) in LINKS} cost[i,j] * Trans[i,j];
subject to Supply {i in ORIG}:
sum {(i,j) in LINKS} Trans[i,j] <= supply[i];
subject to Demand {j in DEST}:
sum {(i,j) in LINKS} Trans[i,j] = demand[j];
(4)data模型
set ORIG := GARY CLEV PITT ;
set DEST := FRA DET LAN WIN STL FRE LAF ;
set prod := bands coils plate ;
param supply (tr): GARY CLEV PITT :=
bands 400 700 800
coils 800 1600 1800
plate 200 300 300 ;
param demand (tr): FRA DET LAN WIN STL FRE LAF :=
bands 300 300 100 75 650 225 250
coils 500 750 400 250 950 850 500
plate 100 100 0 50 200 100 250 ;
param limit :=625 ;
param cost :=
[*,*,bands]: FRA DET LAN WIN STL FRE LAF :=
GARY 30 10 8 10 11 71 6
CLEV 22 7 10 7 21 82 13
PITT 19 11 12 10 25 83 15
[*,*,coils]: FRA DET LAN WIN STL FRE LAF :=
GARY 39 14 11 14 16 82 8
CLEV 27 9 12 9 26 95 17
PITT 24 14 17 13 28 99 20
[*,*,plate]: FRA DET LAN WIN STL FRE LAF :=
GARY 41 15 12 16 17 86 8
CLEV 29 9 13 9 28 99 18
PITT 26 14 17 13 31 104 20 ;
Go 学习路线,更多文件已被GitHub收录https://github.com/metashops/GoFamily