蚁群算法在车辆路径问题中的应用Word下载.docx

上传人:b****7 文档编号:22968636 上传时间:2023-02-06 格式:DOCX 页数:10 大小:64.07KB
下载 相关 举报
蚁群算法在车辆路径问题中的应用Word下载.docx_第1页
第1页 / 共10页
蚁群算法在车辆路径问题中的应用Word下载.docx_第2页
第2页 / 共10页
蚁群算法在车辆路径问题中的应用Word下载.docx_第3页
第3页 / 共10页
蚁群算法在车辆路径问题中的应用Word下载.docx_第4页
第4页 / 共10页
蚁群算法在车辆路径问题中的应用Word下载.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

蚁群算法在车辆路径问题中的应用Word下载.docx

《蚁群算法在车辆路径问题中的应用Word下载.docx》由会员分享,可在线阅读,更多相关《蚁群算法在车辆路径问题中的应用Word下载.docx(10页珍藏版)》请在冰豆网上搜索。

蚁群算法在车辆路径问题中的应用Word下载.docx

当后面的蚂蚁再次碰到这个路口时,会选择激素浓度较高的路径走。

这样形成了一个正反应,最优路径上的激素浓度越来越高,而其他的路径上激素浓度却会随时间的流逝而消减。

最终整个蚁群会找出最优路径。

在整个寻找过程中,整个蚁群通过相互留下的信息素作用交换着路径信息,最终找到最优路径。

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〕假设循环次数N

Cmax,那么循环完毕并输出计算结果,否那么清空禁忌表并转到第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);

ifq0<

=0.9

[yi]=max(p(i));

select=to_visit(i);

elsep=p/sum_p;

ifc_temp==1%处理最后一个客户

select=to_visit(c_temp);

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]];

end

All_line=N;

while(length(All_line(:

1))>

0)

r=All_line(1,1);

s=All_line(1,2);

All_line=setdiff(All_line,[rs],’rows’);

%排除已经处理过的边

ctemp=T(r+1:

s-1);

n_ctemp=length(ctemp);

temp=zeros(1,n_ctemp);

fori=0:

n_ctemp-1

temp(i+1)=ctemp(n_ctemp-i);

current_T=[T(1:

r-1)T(s)tempT(r)T(s+1:

n)];

%进展边交换

current_T=[current_Tcurrent_T

(1)];

%形成回路

current_L=0;

current_L=current_L+d(current_T(i),current_T(i+1));

if(current_L<

L)

T=current_T;

L=current_L;

end%此时的T为经过2-opt后的最短路劲

6、改良蚁群算法和根本蚁群算法实验比照

选用VRPLIB中列出的Christofides实例。

对问题C1分别用根本蚁群算法和参加2-opt方法的蚁群算法进展求解,每个程序各运行30次,m、n取客户和仓库数目之和,计算如下表:

两种算法结果比拟

计算结果如上表所示,可以看出根本蚁群算法和参加2-opt的混合算法相比,后者的解得到明显改善。

综上所述,混合算法改良了蚂蚁算法的局部搜索能力,因

而提高了算法的求解能力,可得到更短的路线长度,明显优于

根本蚁群算法,验证了改良措施的有效性。

参考文献

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学案例设计

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1