语言"/>
现代生产与物流运作管理(运输安排问题)Cplex求解,OPL语言
问题描述
某市郊区有个仓库均储存有一种药品,仓库编号分别为. 各仓库储存该药品的储存量分别为. 市区的家医院均需要此种药品,医院的编号分别为. 各医院需求量分别为. 所有仓库的储存总量等于所有医院的需求量。假定从仓库向医院运输单位物品的费用为,求怎样调配才能使总运费最小?
参数设置
i 仓库编号(i=1,2,···,m)
j 医院编号(j=1,2,···,n)
cij 从仓库i(i=1,2,···,m)向医院j(j=1,2,···,n)运输单位药品的费用
xij 从仓库i(i=1,2,···,m)向医院j(j=1,2,···,n)运输药品量
模型建立
表示总运输成本最小:
表示每个仓库运出的药品总量等于其储藏量:
表示每家医院接受的药品总量等于其需求量:
约束每条路线上的运输量非负:
所有仓库的储存总量等于所有医院的需求量:
案例数据
运货量 | 医院1 | 医院2 | 医院3 | 医院4 | 存储量 |
仓库1 | 3 | 11 | 3 | 10 | 7 |
仓库2 | 1 | 9 | 2 | 8 | 4 |
仓库3 | 7 | 4 | 10 | 5 | 9 |
需求量 | 3 | 6 | 5 | 6 |
代码
/*********************************************
* OPL 12.8.0.0 Model
* Author: Sealand
* Creation Date: 2022年11月12日 at 上午10:58:48
*********************************************/
int m = 3;
int n = 4;
int a[1..m] = [7,4,9];
int b[1..n] = [3,6,5,6];
int c[1..m][1..n] =
[[3,11,3,10],
[1,9,2,8],
[7,4,10,5]];
dvar int+ x[1..m][1..n];
dvar float totalcost ;
minimize totalcost;
subject to {
forall(i in 1..m)
sum(j in 1..n) x[i][j] == a[i];
forall(j in 1..n)
sum(i in 1..m) x[i][j] == b[j];
sum(i in 1..m) a[i] == sum(j in 1..n) b[j];
totalcost == sum(i in 1..m,j in 1..n) x[i][j] * c[i][j];
}
求解结果
最小总运费:totalcost = 85;
总运费最小时调度安排:
单位运输成本 | 医院1 | 医院2 | 医院3 | 医院4 |
仓库1 | 2 | 0 | 5 | 0 |
仓库2 | 1 | 0 | 0 | 3 |
仓库3 | 0 | 6 | 0 | 3 |
更多推荐
现代生产与物流运作管理(运输安排问题)Cplex求解,OPL语言
发布评论