蚁群算法在车辆路径问题中的应用Word下载.docx
《蚁群算法在车辆路径问题中的应用Word下载.docx》由会员分享,可在线阅读,更多相关《蚁群算法在车辆路径问题中的应用Word下载.docx(7页珍藏版)》请在冰豆网上搜索。
2、蚁群系统基本原理
在蚂蚁群找到食物时,它们总能找到一条从食物到蚁穴之间的最短路径。
因为蚂蚁在寻找食物时会在路途上释放一种特殊的信息素。
当它们碰到一个还没有走过的路口时,会随机地挑选一条路径前行。
与此同时释放出与路径长度有关的信息素。
路径越长,释放的激素浓度越低。
当后面的蚂蚁再次碰到这个路口时,会选择激素浓度较高的路径走。
这样形成了一个正反馈,最优路径上的激素浓度越来越高,而其他的路径上激素浓度却会随时间的流逝而消减。
最终整个蚁群会找出最优路径。
在整个寻找过程中,整个蚁群通过相互留下的信息素作用交换着路径信息,最终找到最优路径。
3、基本蚁群算法求解车辆路径问题
求解VRP问题的蚂蚁算法中,每只蚂蚁是一个独立的用
于构造路线的过程,若干蚂蚁过程之间通过信息素值来交换信
息,合作求解,并不断优化。
这里的信息素值分布式存储在图
中,与各弧相关联。
蚂蚁算法求解VRP问题的过程如下:
(1)参数初始化。
令t=0和循环次数也NC=0,设置最大循环次数NCmax。
,将m只蚂蚁随机地放到n个城市,将每条边(i,j)上的信息素设为一个常数,且
=0(
表示循环中路径(i,j)上的信息素增量),将出发点城市设置到禁忌表中;
(2)选择城市。
每个蚂蚁按照状态变化规则逐步地构造一个解,即生成一条路。
蚂蚁任务是在约束条件下,访问客户后回到仓库,生成一条回路。
设蚂蚁k当前所在的顶点为i,则蚂蚁k由点i向点j移动要遵循一下公式
(1)的状态变化规则而不断迁徙,按不同概率来选择下一个。
(
)
Exploitation
Exploration
(1)
(其中
表示蚂蚁k当前选择的城市集合,
为禁忌表,它记录蚂蚁k已经路过的城市,用来说明人工蚂蚁的记忆性。
用于评价蚂蚁由点i向点j移动的启发函数,其值通常用距离的倒数求得,即
。
体现了信息素和启发信息对蚂蚁决策的影响。
取值为1;
参数
描述启发函数的重要性;
)决定利用和开发的相对重要性,利用(Exploitation)指走最好的路,开发(Exploration)指按信息素浓度高概率高的原则选择V,q是在[0,1]上任取的随机数)
当
时,按公式
(2)的概率进行选择:
(3)修改禁忌表,即选择好之后将蚂蚁移动到下一个城市,并把该城市移动到蚂蚁个体的禁忌表中;
(4)循环执行第2步和第3步,直到每只蚂蚁都生成一条路径;
(5)计算第k只蚂蚁所走路径的总长度
;
(6)根据公式(3)(4)更新所有路径上的信息量;
(3)
(4)
(7)若循环次数NC
NCmax,则循环结束并输出计算结果,否则清空禁忌表并转到第2步。
相应的MATLAB程序如下:
%%第一步:
变量初始化
[L_nn,P_nn]=NearestNeighborTSP(d);
%
是最近邻域启发算法产生的路线长度
L_best=inf;
T_best=0;
tau0=1/(n*L_nn);
%n为客户以及仓库数
tau=ones(n,n)*tan0;
ant_path=zeros(m,n+1);
%%第二步:
将将m个蚂蚁置于仓库中
ant_path(:
1)=randint(m,1,[1,1]);
%%第三步:
选择城市
current_node=ant_path(k,s-1);
%k为蚂蚁数目,取值1…m,s为问题规模,取2…n
visited=ant_path(k,:
);
to_visit=setdiff([1:
n],visited);
c_temp=length(to_visit);
ifc_temp~=0
p=zeros(1,c_temp);
fori=1:
c_temp
p(i)=(tau(current_node,to_visit(i)))^alpha*(1/d(current_node,to_visit(i)))^beta:
%计算
end
sun_p=sum(p);
q0=rand;
select=to_visit(c_temp);
if
q0<
=0.9
[yi]=max(p(i));
select=to_visit(i);
else
p=p/sum_p;
ifc_temp==1
%处理最后一个客户
ordinal_of_vehicle=find(ant_path(k,:
)==1);
last_vehicle=ordinal_of_vehicle(length(ordinal_of_vehicle));
forl=last_vehicle:
n+20
if(ant_path(k,l)~=1)&
(ant_path(k,l)~=0)
total_load=total_load+load(ant_path(k,l));
if(total_load+load(select))>
capacity_limit%不满足约束条件则回到仓库
select=1;
total_load=0;
city_to_visit=select;
ant_path(k,s)=city_to_visit;
%%第四步:
更新信息素值
tau(current_node,city_to_visit)=(1-rho)*tau(current_node,city_to_visit)+tan0;
tau(Tour_min(i),Tour_min(i+1))=(1-rho)*tau(Tour_min(i),Tour_min(i+1))+rho/L_gb;
%%第五步:
禁忌表清零
%%第六步:
输出结果
Pos=find(L_best==min(L_best));
Shortest_Route=T_best(Pos
(1),:
)
Shortest_Length=L_best(Pos
(1))
4、基本蚁群算法的优缺点
基本蚁群算法具有很强的发现解的能力,这是因为该算法不仅利用了正反馈原理,在一定程度上可以加快进化过程,而且是一种本质上并行的算法,不同个体之间不断进行信息交流和传递,从而能够相互协作,有利于发现较好解。
具有如下的优点:
(1)分布式本质并行算法,它是一种基于种群的进化算法,本质上具有并行性,易于并行实现;
(2)具有较强的鲁棒性,对其模型稍加修改,便可以应用于其他问题;
(3)易于与其他方法结合,基本蚁群算法很容易与多种启发式算法结合,以改善算法的性能;
(4)其优化过程不依赖于优化问题本身的严格数学性质,如连续性,可导性及目标函数和约束函数的精确数学描述;
(5)是一类概率型的全局搜索方法,这种非确定性使算法能够有更多的机会求得全局最优解;
基本蚁群算法是一种有效的随机搜索算法,但也存在一些缺陷:
(1)与其他方法相比,该算法一般需要较长的时间;
(2)该算法易出现停滞现象,即搜索进行到一定程度后,所有个体所发现的解完全一致,不能对解空间进一步搜索,不利于发现更好的解。
5、一种新的改进蚁群算法
用2-opt方法局部优化用蚁群算法构造的VRP解
不同的智能算法出现停滞现象的原因各不相同,但结果是相同的,即所求的解越来越相似,避免这种现象的方法也是一致的,那就是增加解的多样性。
蚂蚁算法尽管能够分布式并行搜索,但在限定的时间或代数内找到最优解仍是困难的,可能找到的只是可行的近优解,这一点与遗传算法相似。
用于启发式局部优化的方法很多!
,主要包括2-opt,3-opt,顶点重定位(relocate),交换(exchange)和交叉(cross)等,其中最实用有效
的是2-opt和3-opt算法。
因此,我们在蚂蚁算法中混入局部优化算法,对每代构造
的解进行改进,从而进一步缩短解路线的长度,以加快蚂蚁算
法的收敛速度。
将2-opt方法混入蚂蚁算法求解过程中,对每
代迭代产生的最优解的相邻边进行交换。
将2-opt方法混入蚂蚁算法求解过程中:
repeat
modified_tour:
=apply_2-opt_move(current_tour)
iflength(modified_tour)<
length(current_tour)
thencurrent_tour:
=modified_tour
untilnofurtherimprovementoraspecifiednumberofiterations
其中current_tour是某辆车从仓库出发送货后又回到仓库的路线。
N[12];
fors=r+1:
n
N=[N;
[rs]];
继续阅读