离散型配送中心选址鲍姆尔沃尔夫算法.docx
- 文档编号:3671871
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:13
- 大小:33.34KB
离散型配送中心选址鲍姆尔沃尔夫算法.docx
《离散型配送中心选址鲍姆尔沃尔夫算法.docx》由会员分享,可在线阅读,更多相关《离散型配送中心选址鲍姆尔沃尔夫算法.docx(13页珍藏版)》请在冰豆网上搜索。
离散型配送中心选址鲍姆尔沃尔夫算法
离散型配送中心选址鲍姆尔-沃尔夫算法
1、原理
所谓离散型配送中心选址,就是配送中心的地址是不能任意选择的,只能限制在预先给定的几个备选地点。
在很多情况下,配送中心地址选址是有限制的,如在原有的大仓库、大货场等,还有的地点可能在自然条件不允许选用的地方等等。
所以在实际应用中,大部分采用离散型模型,离散型配送中心的选址算法,更具有应用价值。
鲍姆尔-沃尔夫模型是一种简明的配送中心选址模型。
如图1所示的是从几个工厂经过几个仓库向用户输送物资的选址模型,对此问题一般只考虑运费最小的运输规划,而鲍姆尔-沃尔夫选址算法所要考虑的问题是,各个工厂向哪些仓库运输多少物资?
各个仓库向哪些用户发送多少物资?
然后根据物流量的大小,来决定仓库的容量。
工厂(k)仓库(i)用户(j)
k=1
2
3
...
...
.
m
图1鲍姆尔-沃尔夫选址模型
2、操作步骤
1.求初始解。
要求最初的工厂到用户(k,j)间的运输费用相对最小,也就是说,要求工厂到仓库间的运输费率和仓库到用户间的发货费率hij之和为最小,即
Cki0=min(Ckj0+hij)
设所有的(k,j)取最小费率Ckj0,仓库序号是Ikj0。
这个结果决定了所有工厂到用户间的费用。
如果工厂的生产能力和用户的需要量已知。
按希契科克运输问题求解,使费用函数∑Cki0xkj为最小时,{Xki0}就为初始解。
2.二次解。
根据初始解,仓库i的通过量可按下式计算:
Wi0=∑{所有的k,j如Ikj0=i}Xkj0
用通过量反过来计算仓库的可变费用:
在这个阶段中,对于所有的(k,j)取下式:
Chj2的仓库序号设为hhj2。
再次按希契科克运输问题求解,使费用函数∑Chj2xni为最小时,就为二次解。
3.n次解。
设n-1次的解为,则仓库的通过量如下:
是n-1次解得到的所使用仓库的序号。
n-1次解可使仓库通过量反映到可变费用上,因此求得n次解,就可得到仓库的新的通过量。
4.最终解。
把n-1次解的仓库通过量
和n次解的仓库通过量
进行比较,如果完全相等就停止计算;如果不等,再继续反复计算。
也就是说,当
=
时,
为最终解。
3.部分程序说明
3、1输入已知条件
i=5;%表示仓库的个数;
j=8;%表示用户的个数;
k=2;%表示工厂的个数;
%ckh表示最小运输费率所通过的仓库号;
gcck=[7781211;
1412968];%工厂仓库之间的单位运输费率;
ckkbfyxs=[75,80,75,80,70];%仓库可变费用系数;
ckyh=[511385101111
1416894744
1011352595
15139672102
973265128];
ckh=ones(k,j);%工厂用户之间的中转的仓库号码;
gcyh=zeros(k,j);%工厂用户之间的运输费率;
3、2最小元素法求初调方案
ylb=zeros(2,10);%设一个2行、10列的零运量表
wqgcyhwq=gcyhwq;
fori=1:
k+j-1%i表示仓库个数,k表示工厂个数,j表示客户个数
min=999;
form=1:
2%m表示从第一个工厂到第二个工厂的循环
forn=1:
10%n表示十个客户的循环
ifmin>gcyh(m,n)
min=gcyh(m,n);
hzb=m;
zzb=n;%判断工厂到用户的运输费用是不是最小,如果是最小就把工厂m赋予hzb,用户n赋予zzb
end
end
end
min;
hzb;
zzb;
ifgcyhwq(hzb,11)>gcyhwq(3,zzb)
ylb(hzb,zzb)=gcyhwq(3,zzb);
gcyh(:
zzb)=gcyh(:
zzb)*10000;
gcyhwq(hzb,11)-ylb(hzb,zzb);
gcyhwq(hzb,11)=gcyhwq(hzb,11)-ylb(hzb,zzb);%如果行中的生产能力大于需求能力,就将最小的客户所需要的需求量全部满足。
elseifgcyhwq(hzb,11) ylb(hzb,zzb)=gcyhwq(hzb,11); gcyh(hzb,: )=gcyh(hzb,: )*10000; gcyhwq(3,zzb)-ylb(hzb,zzb); gcyhwq(3,zzb)=gcyhwq(3,zzb)-ylb(hzb,zzb);%如果行中的生产能力小于需求能力,用该行的生产能力减去该行工厂为用户提供的需求量,剩下的数即为此行对用户提供的运量。 elseifgcyhwq(hzb,11)==gcyhwq(3,zzb) ylb(hzb,zzb)=gcyhwq(3,zzb); gcyh(: zzb)=gcyh(: zzb)*10000; gcyh(hzb,: )=gcyh(hzb,: )*10000;%如果行中的生产能力等于需求能力,不再考虑此行任何用户的需求量。 end ylb; gcyh; end ylb gcyhwq; 3、3用位势法判断是否最优 %用位势法判断是否最优; %x=[u1u2v1v2v3v4v5v6v7v8]'; a=zeros(9,9);%检验数的系数; b=zeros(9,1);%检验数的常数; jys=zeros(2,8);%检验数; zyjbz=0;%最优解的标志,zyjbz=0表示不是运输问题的最优解,zyjbz=1表示是运输问题的最优解。 i=0; form=1: k forn=1: j ifylb(m,n)~=0 i=i+1; m; n; gcyh(m,n); a(i,m)=1; a(i,n+2)=1; b(i,1)=wqgcyhwq(m,n); fprintf(1,'u(%d)+v(%d)=%d\n',m,n,wqgcyhwq(m,n)); end end end a; fori=1: 9 forj=1: 9 aa(i,j)=a(i,j+1); end end aa xx=[0;inv(aa)*b];%inv表示逆 fori=1: 2 u(i)=xx(i); end forj=1: 8 v(j)=xx(j+2); end v form=1: 2 forn=1: 8 ifylb(m,n)==0 jys(m,n)=wqgcyhwq(m,n)-u(m)-v(n); end end end jys ifjys>=0 disp('此调运方案就是运输问题的最优解') 四、运行结果 gcyh= 1218101310131111 17151110118168 ckh= 15153322 55553424 运输平衡问题的费用表 gcyhwq= 121810131013111140 1715111011816850 10101015515101590 此问题是运输平衡问题 ylb= 10510050100 05015015015 u (1)+v (1)=12 u (1)+v (2)=18 u (1)+v(3)=10 u (1)+v(5)=10 u (1)+v(7)=11 u (2)+v (2)=15 u (2)+v(4)=10 u (2)+v(6)=8 u (2)+v(8)=8 aa= 010000000 001000000 000100000 000001000 000000010 101000000 100010000 100000100 100000001 u= 0-3 v= 1218101310111111 jys= 00000200 80404080 此调运方案就是运输问题的最优解 ysf= 935 ckh= 15153322 55553424 ylb= 10510050100 05015015015 ww= [] yes ww= 201053025 ckf= 1.5443e+003 zfy= 2.4793e+003 第一次运算结束 ===================================================================================================================================================== ckkbfy2= 8131777 gcckzf= 00000 00000 gcckzf= 1520251918 2225261315 gcyh= 2025182020212421 2422181720152315 ckh= 15151424 55554444 运输平衡问题的费用表 gcyhwq= 202518202021242140 242218172015231550 10101015515101590 此问题是运输平衡问题 ylb= 10510050100 05015015015 u (1)+v (1)=20 u (1)+v (2)=25 u (1)+v(3)=18 u (1)+v(5)=20 u (1)+v(7)=24 u (2)+v (2)=22 u (2)+v(4)=17 u (2)+v(6)=15 u (2)+v(8)=15 aa= 010000000 001000000 000100000 000001000 000000010 101000000 100010000 100000100 100000001 u= 0-3 v= 2025182020182418 jys= 00000303 70303020 此调运方案就是运输问题的最优解 ysf= 935 ckh= 15151424 55554444 ylb= 10510050100 05015015015 ww= yes ww= 251003025 ckf= 1.4162e+003 zfy= 2.3512e+003 第二次运算结束 ===================================================================================================================================================== ckkbfy3= 813077 gcckzf3= 00000 00000 gcckzf3= 2333252625 3038262022 gcyh= 2025182020212421 2422181720152315 ckh= 15151424 55554444 运输平衡问题的费用表 gcyhwq= 202518202021242140 242218172015231550 10101015515101590 此问题是运输平衡问题 ylb1= 10510050100 05015015015 u (1)+v (1)=20 u (1)+v (2)=25 u (1)+v(3)=18 u (1)+v(5)=20 u (1)+v(7)=24 u (2)+v (2)=22 u (2)+v(4)=17 u (2)+v(6)=15 u (2)+v(8)=15 aa= 010000000 001000000 000100000 000001000 000000010 101000000 100010000 100000100 100000001 u= 0-3 v= 2025182020182418 jys= 00000303 70303020 此调运方案就是运输问题的最优解 ysf= 935 ckh= 15151424 55554444 ylb= 10510050100 05015015015 ww= yes ww= 251003025 ckf= 03 zfy= 2.3512e+003 第三次运算结束 五、结果分析 本次课程设计主要是运用MATLAB软件,运用配送中心鲍姆尔—沃尔夫计算方法来计算出运输费用和仓库费用,再算出总费用。 多次迭代进行对比找出最优解。 第一次求解: 由已知条件,将工厂到仓库间单位运输费率行与仓库到用户间的单位发送费用的列一一对应相加,取其最小即为最小运费,同时注明通过的仓库号。 采用位势法计算初始方案每个空格的闭合回路的检验数,经计算得知该方案的检验数均是正数,因此,该出事方案可行。 第二次求解: 根据初始解求第二次解。 将可变费用加上已知条件的工厂到仓库见的单位运输费,同初始解的计算一样,计算出最小运输费率,根据最小运输费加上发送费结合最小元素法分配工厂向用户提供的需求量,用位势法去判断是否是最优解。 在这过程中出现检验数存在负数。 因此,要闭合回路进行调整将负数变成零,对角线处奇数位加检验数,偶数位减去检验数,当检验数均为正时重新带入求出运量表,计算各仓库的通过量,重复上述步骤,直到检验数均为正,停止,计算出的结果可视为最优解。 第三次求解: 同理,计算出第三次结果。 运费为7170,仓库费为61579,总费用为13328。 三次结果一次比一次少,而第一次与第三次的运费一样,但第三次的总费用比第一次少,所以第三次的解可视为最优解。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 离散 配送 中心 选址 鲍姆尔沃尔夫 算法