粒子群优化算法车辆路径问题.docx
《粒子群优化算法车辆路径问题.docx》由会员分享,可在线阅读,更多相关《粒子群优化算法车辆路径问题.docx(11页珍藏版)》请在冰豆网上搜索。
粒子群优化算法车辆路径问题
粒子群优化算法
计算车辆路径问题
摘要
粒子群优化算法中,粒子群由多个粒子组成,每个粒子的位置代表优化问题在□维搜索空间中潜在的解。
根据各自的位置,每个粒子用一个速度来决定其飞行的方向和距离,然后通过优化函数计算出一个适应度函数值(fitness)。
粒子是根据如下三条原则来更新自身的状态:
(1)在飞行过程中始终保持自身的惯性;
(2)按自身的最优位置来改变状态;(3)按群体的最优位置来改变状态。
本文主要运用运筹学中粒子群优化算法解决车辆路径问题。
车辆路径问题由Dantzig和Ram
ser于1959年首次提出的,它是指对一系列发货点(或收货点),组成适当的行车路径,使车辆有序地通过它们,在满足一定约束条件的情况下,达到一定的目标(诸如路程最短、费用最小,耗费时间尽量少等),属于完全NP问题,在运筹、计算机、物流、管理等学科均有重要意义。
粒子群算法是最近出现的一种模拟鸟群飞行的仿生算法,有着个体数目少、计算简单、鲁棒性好等优点,在各类多维连续空间优化问题上均取得非常好的效果。
本文将PSO应用于车辆路径问题求解中,取得了很好的效果。
针对本题,一个中心仓库、7个需求点、中心有3辆车,容量均为1,由这三辆车向7个需求点配送货物,出发点和收车点都是中心仓库。
k=3,q1=q^=q3=1,^=7.货物需求量
=0.89,g2=0.14,g3=0.28,g4=0.33,g5=0.21,g6=0.41,g7=0.57,且
mgiaXk。
利用matlab编程,求出需求点和中心仓库、需求点之间的各
个距离,用Cj表示。
求满足需求的最小的车辆行驶路径,就是求minz八77CjXi。
经过初始化粒子群,将初始的适应值作为每个粒子的个
ijk
体最优解,并寻找子群内的最优解以及全局的最优解。
重复以上步骤,直到满足
终止条件。
本题的最短路径由计算可知为217.81。
关键字:
粒子群算法、车辆路径、速度
问题的重述
一个中心仓库序号为0,7个需求点序号为1~7,其位置坐标见表1,中心有
3辆车,容量均为1,由这三辆车向7个需求点配送货物,出发点和收车点都是中心仓库。
求满足需求的距离最小的车辆行驶路径。
问题假设
表1仓库中心坐标和需求点坐标及需求量
序号
0
1
2
3
4
5
6
7
坐标
(18,54)
(22,60)
(58,69)
(71,71)
(83,46)
(91,38)
(24,42)
(18,40)
需求量
0
0.89
0.14
0.28
0.33
0.21
0..41
0.57
1•现实生活中中心仓库以及各个需求点之间军事直线连接,两点之间距离即为坐标系中两点坐标间距离。
2•不因天气及失火等原因车辆停止运输。
3•每个需求点由一辆车供应货物。
三、符号说明
k
配送货物车辆数
l
需求点个数
gi
货物需求量
qk
配送货物车辆的容量
Cj
从点i到j的距离
yki
需求点i由k车配送
Xijk
车k从i行驶到j
四、问题分析
4.1算法分析
车辆路径问题(VRP可以描述为有一个中心仓库,拥有K辆车,容量
分别为q'k=1,2,…,K),负责向L个需求点配送货物,货物需求量为
gi(i=1,2,…,L),且maxg^maxqk;cij表示从点i至Uj的距离。
求满足需求的距离最小的车辆行驶路径。
将中心仓库编号为0,需求点编号为1,2,…,L。
数学模型为:
minZ=、、、CjXjk
ijk
s.t.giykiXk,—k
i
、yki7i=1,2,,L
k
'Xijk二ykj,j=0,1,丄;—k
i
'Xjk=yki,i=0,1,丄;—k
X=(Xjk)S
Xjk=0或1,i,j=0,1,丄;-kyki=0或1,i=0,1,丄;-k
其中,
需求点i由k车配送1车k从i行驶驶j
否则,Xjk」0否则
k=3,qi=q2=q3=1,1=7.货物需求量
g^0.89,g^0.14,g^0.28,g^0.33,g^0.21,g^0.41,g^0.57,利用粒子群
优化算法,经过初始化粒子群,将初始的适应值作为每个粒子的个体最优解,并
寻找子群内的最优解以及全局的最优解。
重复以上步骤,直到满足终止条件。
4.2举例具体演算分析
例如,设VRP问题中发货点任务数为7,车辆数为3,若某粒子的位置向量X为:
发货点任务号:
1234567
XV:
1222233Xr:
1431221
则该粒子对应解路径为:
车1:
0—1—0
车2:
0—4—5—3—2—0
车3:
0—7—6—0
粒子速度向量V与之对应表示为Vv和Vr
该表示方法的最大优点是使每个发货点都得到车辆的配送服务,并限制每个发货点的需求仅能由某一车辆来完成,使解的可行化过程计算大大减少Z虽然该表示方法的维数较高,但由于PSO算法在多维寻优问题有着非常好的特性,维数的增加并未增加计算的复杂性,这一点在实验结果中可以看到
五、模型的建立与求解
在本题中,需要分别计算以下几个内容,计算需求点与中心仓库及各需求点间距离,利用粒子群优化算法,求出函数的全局最优位置和最后得到的优化极值。
5.1需求点与中心仓库及各需求点间距离
利用直角三角形勾股定理,求斜边长度。
AX’yJ,B(x2,y2),直角坐标系
中求A,B两点之间距离ABf(y2-yj2(x2-x1)2
距离
0
1
2
3
4
5
6
7
0
0
7.2111
42.72
55.66
65.49
74.733
13.416
14
1
7.2111
0
37.108
50.22
62.586
72.422
18.111
20.396
2
42.72
37.108
0
13.153
33.971
45.277
43.417
49.406
3
55.66
50.22
13.153
0
27.731
38.588
55.227
61.4
4
65.49
62.586
33.971
27.731
0
11.314
59.135
65.276
5
74.733
72.422
45.277
38.588
11.314
0
67.119
73.027
6
13.416
18.111
43.417
55.227
59.135
67.119
0
6.3246
7
14
20.396
49.406
61.4
65.276
73.027
6.3246
0
5.2粒子群优化算法
5.2.1算法实现过程
步骤1初始化粒子群
1粒子群划分成若干个两两相互重叠的相邻子群;
2每个粒子位置向量Xv的每一维随机取1〜K(车辆数)之间的整数,Xr的每一维随机取1〜L(发货点任务数)之间的实数;
3每个速度向量Vv的每一维随机取-(K-1)〜(K-1)(车辆数)之间的整数,Vr的每一维随机取-(L-1)〜(L-1)之间的实数;
4用评价函数Eval评价所有粒子;
5将初始评价值作为个体历史最优解Pi,并寻找各子群内的最优解Pl和
总群体内最优解Pg
步骤2重复执行以下步骤,直到满足终止条件或达到最大迭代次数
1对每一个粒子,计算Vv、Vr;计算Xv、Xr,其中Xv向上取整;当V、
X超过其范围时按边界取值
2用评价函数EvaI评价所有粒子;
3若某个粒子的当前评价值优于其历史最优评价值,则记当前评价值为该历
史最优评价值,同时将当前位置向量记为该粒子历史最优位置Pi;
4寻找当前各相邻子群内最优和总群体内最优解,若优于历史最优解则更新
PI、Pg
5.2.2针对本题
0表示中心仓库,设车辆容量皆为q=1.0,由3辆车完成所有任务,初始化
群体个数n=40;惯性权重w=0.729;学习因子c1=c2=1.49445;最大代数
MaxDT=50;搜索空间维数(未知数个数)D=7;
算法得到的最优值的代数及所得到的最优解,预计迭代次数50,共进行20次运算
运算次数1
2
3
4
5
6
7
8
9
10
总距离
217.81
230.41
217.81
217.813
£3.04
217.81
303.04
217.81
217.81
230.41
运算次数1
1
12
13
14
15
16
17
18
19
20
总距离
217.81
217.81
230.41
217.81:
>17.81
217.81
217.81
217.81
217.81
217.81
从实验结果分析,15次达到已知最优解,得到的最优总路径为:
0r7-6_0-1-0-2-3-4-5_0
对应的行车路线为:
车辆一:
0》7》6》0
车辆二:
0》1》0
车辆三:
0>2>3>4>5>0
行车总距离217.81
粒子群优化算法达到最优路径50次的代数
7
23
2
17
7
17
13
7
41
19
28
11
33
14
21
23
11
71
82
24
13
58
36
20
10
3
8
5
65
35
9
2
15
76
25
67
30
55
9
29
21
6
38
9
43
148
1
29
3
79
六、模型的评价
粒子群优化算法结果分析
方法
达到最优
路径次数
未达最优
路径次数
达到最优路
径平均代数
达到最优路径平
均时间(S)
粒子群
50
0
28.36
3.04
分析PSO方法,可以看出它与GA等其他演化算法的最大不同在于
1)迭代运算中只涉及到初等运算,且运算量非常少;
2)每个粒子能直接获取群体历史经验和个体历史经验,比在其他方法中使用精
英集(elitism)的方法更有效;
3)整个粒子群被划分为几个的子群,且子群之间有一定重叠,从而使收敛于局部最优解的几率大大减少L
正因为如此,本文将PSO应用于带时间窗车辆路径问题求解中,取得了很好的效果,有着运算速度快、解的质量与个体数目相关性小、所获得的解质量高等诸多优点
七、模型的改进和推广
7.1模型的改进
针对粒子群优化算法存在的问题,提出了一种新的改进算法—基于粒子进化的多粒子群优化算法。
该算法采用局部版的粒子群优化方法,从“粒子进化”和“多种群”两个方面对标准粒子群算法进行改进。
多个粒子群彼此独立地搜索解空间,保持了粒子种群的多样性,从而增强了全局搜索能力而适当的“粒子进化”可以使陷入局部最优的粒子迅速跳出,有效的避免了算法“早熟”,提高了算法的稳定性。
将基于粒子进化的多粒子群优化算法用于求解非线性方程组。
该算法求解精度高、收敛速度快,而且克服了一些算法对初值的敏感和需要函数可导的困难,能较快地求出复杂非线性方程组的最优解。
数值仿真结果显示了该算法的有效性和可行性,为求解非线性方程组提供了一种实用的方法。
7.2模型的推广作为物流系统优化中的重要一环,合理安排车辆路径、进行物流车辆优化调度可以提高物流经济效益、实现物流科学化。
粒子群算法在多维寻优中有着非常好的特性,加入“邻居算子”的粒子群算法能使算法更好的全局寻优。
本文的研究表明,改进局部办粒子群算法,能过有效地解决车辆路径问题。
八、参考文献
[1]
李军,郭耀煌.物流配送车辆优化调度理论与方法
[M].北京:
中国
物资出版社,2001.
.计
[2]马炫,彭芃,刘庆.求解带时间窗车辆路径问题的改进粒子群算法算机工程与应用,2009,45(27):
200-202
[3]姜启源,《数学建模》,高教出版社,2000年
附录
需求点与中心仓库及各需求点间距离
c=[];zuobiao=[1854
2260
5869
7171
8346
9138
2442
1840];
fori=1:
8
forj=1:
8
c(i,j)=sqrt((zuobiao(j,2)-zuobiao(i,2))A2+(zuobiaoQ,1)-zuobiao(i,1))
A2);
end
end
c
粒子群优化算法求解
主算法
clearall;
clc;
formatlong;
%给定初始化条件
c1=1.4962;
%
学习因子1
c2=1.4962;
%
学习因子2
w=0.7298;
%
惯性权重
MaxDT=50;
%
最大迭代次数
D=7;
%
搜索空间维数(未知数个数)
N=40;
%
初始化群体个体数目
%初始化种群的个体(可以在这里限定位置和速度的范围)
fori=1:
N
forj=1:
D
是向离它最近的大整数圆整
x1(i,j)=ceil(3*rand());%随机初始化位置ceil
x2(i,j)=ceil(7*rand());
v1(i,j)=2*(2*rand()-1);%随机初始化速度%v2(i,j)=6*(2*rand()-1);
end
end
%先计算各个粒子的适应度,并初始化Pbest和gbest
fori=1:
N
y1(i,:
)=x1(i,:
);
y2(i,:
)=x2(i,:
);
pbest(i)=fitness(y1(i,:
),y2(i,:
),D);
end
pg1=x1(1,:
);%Pg为全局最优
pg2=x2(1,:
);
fori=2:
N
iffitness(x1(i,:
),x2(i,:
),D)pg1=x1(i,:
);
pg2=x2(i,:
);
gbest=fitness(pg1,pg2,D);
end
end
%进入主要循环,按照公式依次迭代,直到满足精度要求
fort=1:
MaxDT
fori=1:
N
v1(i,:
)=w*v1(i,:
)+c1*rand*(y1(i,:
)-x1(i,:
))+c2*rand*(pg1-x1(i,:
));
x1(i,:
)=x1(i,:
)+v1(i,:
);
x1(i,:
)=ceil(x1(i,:
));
forj=1:
D
ifx1(i,j)<1
x1(i,j)=1;
end
ifx1(i,j)>3
x1(i,j)=3;
end
end
forj=1:
D
x2(i,j)=ceil(7*rand());
end
iffitness(x1(i,:
),x2(i,:
),D)y1(i,:
)=x1(i,:
);
y2(i,:
)=x2(i,:
);
pbest(i)=fitness(y1(i,:
),y2(i,:
),D);
end
ifpbest(i)pg1=x1(i,:
);
pg2=x2(i,:
);
end
end
end
%最后给出计算结果
disp('disp('函数的全局最优位置为:
')
Solution1=pg1
Solution2=pg2disp('最后得到的优化极值为:
')
Result=fitness(pg1,pg2,D)
disp('
*************************************************************1
辅助算法
functionresult=fitness(x1,x2,D);
aa=[infinfinfinfinfinfinf];bb=[infinfinfinfinfinfinf];cc=[infinfinfinfinfinfinf];
fori=1:
D
ifx1(i)==1
aa(i)=x2(i);
elseifx1(i)==2bb(i)=x2(i);
elsecc(i)=x2(i);
end
endendresult=f(cc)+f(bb)+f(aa);辅助算法二functionff=f(x);
loadc.matsum=0;
[yind]=sort(x);fori=1:
7
ify(i)==inf
j=i-1;break;
elsej=7;
end
end
ifj<1
sum=inf;
elseifj==1sum=sum+2*c(1,ind(j)+1);
elsesum=sum+c(1,ind(j)+1)+c(1,ind
(1)+1);fori=1:
j-1sum=sum+c(ind(i)+1,ind(i+1)+1);end
end
end
ff=sum;