钢管订购和运输

题目描述

要铺设一条输送天然气的主管道如图1,图1中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km)。

图1 天然气输送主管道

1km主管道钢管称为1单位钢管,一个钢厂如果承担制造某种钢管,至少要生产500个单位。每个钢厂在指定期限内能生产该钢管的最大数量和钢管出厂销售1单位钢管价格均已给出。1000km以上每增加1至100km,运价增加5万元。公路运输费用为1单位钢管每公里0.1万元(不足整公里部分按整公里计算)。钢管可由铁路、公路运往铺设地点(不只是运到点,而是管道全线)。1单位钢管的铁路运价如表1:

表1 钢管铁路运价表

里程(km)

≤300

301~350

351~400

401~450

451~500

501~600

601~700

701~800

801~900

901~1000

运价(万元)

20

23

26

29

32

37

44

50

55

60

  1. 制定主管道钢管的订购和运输计划,使总费用最小并给出总费用。
  2. 就问题一的模型分析——哪个钢厂钢管的销价的变化对购运计划和总费用影响最大,哪个钢厂钢管的产量的上限的变化对购运计划和总费用的影响最大,并给出相应的数字结果。
  3. 如果要铺设的管道是一个树形图,铁路、公路和管道构成网络,请提出一种解决办法,并对图2按(1)的要求给出模型和结果。

图2 管道树形

题目代码

clc,clear

NN1=strcat('S',cellstr (int2str([1:7]')));

NN2=strcat('A',strtrim(cellstr((int2str([1:15]')))));

NN3=strcat('B',strtrim(cellstr(int2str([1:17]'))));

NN={NN1{:},NN2{:},NN3{:}};

G = graph;G =addnode (G,NN);

L1={‘B1’,’B3’,450;‘B2’, ‘B3’,1150

'B5','B8',1100;'B4','B6',306; 'B6','B7',195

's1','B7',20; 'S1','B8',202;'s2','B8',1200

'B8','B9',720; 'S3','B9',690; 'B9','B10',520

'B10','B12',170;'s4','B12',690;'S5','B11',462

'B11','B12',88;'B12','B14',160;'B13','B14',70

'B14','B15',320; 'B15','B16',160; 'S6','B16',70

'B16','B17',290; 'S7','B17',30 };

G1 =addedge(G,L1(:,1),L1(:,2),cell2mat(L1(:,3)));

d1 = distances(G1);  %求所有点对之间的最短距离

c1 = inf * ones (size(d1));

c1(d1==0)=0;c1((d1>0) & (d1<=300))=20;

c1((d1>300) & (d1<=350))=23;

c1((d1>350) & (d1<=400))=26;

c1((d1>400) & (d1<=450))=29;

c1((d1>450) & (d1<=500))=32;

c1((d1>500) & (d1<=600))=37;

c1((d1>600) & (d1<=700))=44;

c1((d1>700) & (d1<=800))=50;

c1((d1>800) & (d1<=900))=55;

c1((d1>900) & (d1<=1000))=60;

ind=(d1>1000)&(d1<inf);

c1(ind)=60+5 * ceil (d1 (ind)/100-10);

L2 = {'A1','A2',104; 'A2','B1',3; 'A2','A3',301

'A3','B2',2;'A3','A4',750;'A4','B5',600

'A4','A5',606;'A5','B4',10;'A5','A6',194

'A6','B6',5;'A6','A7',205;'A7','B7',10

'S1','A7',31; 'A7','A8',201; 'A8','B8',12

'A8','A9',680; 'A9','B9',42; 'A9','A10',480

'A10','B10',70;'A10','A11',300;'A11','B11',10

'A11','A12',220;'A12','B13',10;'A12','A13',210

'A13','B15',62;'A13','A14',420;'S6','A14',110

'A14','B16',30; 'A14','A15',500; 'A15','B17',20

'S7','A15',20};

G2 =addedge(G,L2(:,1),L2(:,2),cell2mat (L2(:,3)));

w2 = full (adjacency (G2,'weighted'));   %导出权重邻接矩阵

w2 (w2= =0) = inf;                  %把0替换为inf

w3 = min(c1,0.1 *w2 );              %对应元素取最小值

G3 = graph (w3); c3 = distances(G3);

c4 = c3 (1:7,8:22)                  %提出7行15列的运费数据

writematrix(c4,'anli6_1.xlsx')

s = [800,800,1000,2000,2000,2000,3000]';

p = [160,155,155,160,155,150,160]';

b = [104,301,750,606,194,205,201,680,...

480,300,220,210,420,500]';

c=p+c4                          %利用矩阵广播,求购运费用

prob =optimproblem;

x =optimvar('x',7,15, 'LowerBound',0 ) ;

y =optimvar ('y',15, 'LowerBound',0);

z =optimvar ('z',15, 'LowerBound',0 );

obj = sum(sum(c.*x))+0.05 * sum(y. ^2+y+z.^2+z) ;

prob.0bjective = obj;

prob.Constraints.con1 = sum(x,2)<=s;

prob.Constraints.con2 = sum(x) = =y'+z'

prob.Constraints.con3 = y(2:end)+z(1:end-1)==b;

prob.Constraints.con4 = [y(1)==0;z(15)==0];

[sol,fval, flag, out] = solve (prob)

Check1 = sum(sol.x,2)

Prob1 = prob; prob2 = prob; prob3=prob; prob4=prob;

Prob1.Constraints.con5 = [sum(x(4,:))==0;sum(x(7,:))==0];

[sol1, fval1,flag1, out1] = solve(prob1)

prob2.Constraints.con5 = [sum(x(4,:))>=500; sum(x(7,:))>=500];

[sol2,fval2,flag2,out2] = solve(prob2)

prob3.Constraints.con5 = sum(x(4,:))>=500;

prob3.Constraints.con6 = sum(x(7,:))==0;

[sol3,fval3,flag3,out3] = solve(prob3)

prob4.Constraints.con5 = sum(x(4,:))==0;

prob4.Constraints.con6 = sum(x(7,:))>=500;

[sol4,fval4,flag,out4] = solve (prob4)

Sol1.x,sx = sum(sol1.x,2)

tx = round(sol1.x),tsx =sum(tx,2)        %取整后的解

writematrix([sum(sol1.x,2),sol1.x],'anli6_1.x1sx','Sheet',2)

writematrix([tsx,tx], 'anli6_1.xlsx', 'Sheet', 2, 'Range', 'A9')

我的总结

1.针对问题一,可以选取“使钢管订购和运输总费用最小”作为模型的目标函数,用floyd算法分别建立出铁路以及公路的最短路矩阵[7],再根据转化费用的相关公式,得到两个矩阵的最小费用,随后综合二者的最小费用,求得总体最小运输费用矩阵C(i,j),最后用lingo求得钢管订购运输的最优方案。

针对问题二,可以根据题目要求,改变钢厂钢管的销价和产量上限,用lingo求解,分析改变条件后总运费及方案受到的影响。

针对问题三,考虑到问题三与问题一很相似,不同之处在于问题三中的钢管铺设路线变成了树形,因此本文仍然采用问题一的建模思路,对于特殊之处进行修改。采用图论中的floyd算法,求得总体最小运输费用矩阵C(i,j),最后用lingo求解得到最优的钢管订购运输方案。

2.Floyd算法能够找到图中任意两个顶点之间的最短路径,而不仅仅是从一个起点到一个终点的最短路径。 它通过对每对顶点进行逐步优化,得到了全局最优解。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值