蚁群算法在车辆路径问题中的应用

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

蚁群算法在车辆路径问题中的应用

摘要

蚁群算法(Ant Colony Optimization, ACO)是意大利学者M.Dorigo等人通过模拟蚁群觅食行为提出的一种基于种群的模拟进化算法。通过介绍蚁群觅食过程中基于信息素(pheromone)的最短路径的搜索策略,给出了基于MATLAB的蚁群算法在车辆路径问题(Vehicle Routing Problem, VRP)中的应用。蚁群算法采用分布式并行计算机制,易于其他方法结合,而且具有较强的鲁棒性,但搜索时间长,容易陷入局部最优解。针对蚁群算法存在的过早收敛问题,加入2—opt方法对问题求解进行了局部优化,计算机仿真结果表明,这种混合型蚁群算法对求解车辆路径问题有较好的改进效果。

关键词:蚁群算法、组合优化、车辆路径问题、2-opt方法

1.车辆路径问题

车辆路径问题(VRP)来源于交通运输,1959年由Dantzig 提出,它是组合优化问题中一个典型的NP-hard问题。最初用于研究亚特兰大炼油厂向各个加油站投送汽油的运输路径优化问题,并迅速成为运筹学和组合优化领域的前沿和研究热点。

车路优化问题如下:

已知有一批客户,各客户点的位置坐标和货物需求已知,供应商具有若干可供派送的车辆,运载能力给定,每辆车都是从起点出发,完成若干客户点的运送任务后再回到起点。

现要求以最少的车辆数和最少的车辆总行程来完成货物的派送任务。

2、蚁群系统基本原理

在蚂蚁群找到食物时,它们总能找到一条从食物到蚁穴之间的最短路径。因为蚂蚁在寻找食物时会在路途上释放一种特殊的信息素。当它们碰到一个还没有走过的路口时,会随机地挑选一条路径前行。与此同时释放出与路径长度有关的信息素。路径越长,释放的激素浓度越低。当后面的蚂蚁再次碰到这个路口时,会选择激素浓度较高的路径走。这样形成了一个正反馈,最优路径上的激素浓度越来越高,而其他的路径上激素浓度却会随时间的流逝而消减。最终整个蚁群会找出最优路径。在整个寻找过程中,整个蚁群通过相互留下的信息素作用交换着路径信息,最终找到最优路径。

3、基本蚁群算法求解车辆路径问题

求解VRP问题的蚂蚁算法中,每只蚂蚁是一个独立的用

于构造路线的过程,若干蚂蚁过程之间通过信息素值来交换信息,合作求解,并不断优化。这里的信息素值分布式存储在图

中,与各弧相关联。蚂蚁算法求解VRP 问题的过程如下:

(1) 参数初始化。

令t=0和循环次数也NC=0,设置最大循环次数NCmax 。,将m 只蚂蚁随机地放到n 个城市,将每条边(i,j)上的信息素设为一个常数,且∆ij τ=0(∆ij τ表示循环中路径(i,j)上的信息素增量),

将出发点城市设置到禁忌表中;

(2) 选择城市。

每个蚂蚁按照状态变化规则逐步地构造一个解,即生成一条路。蚂蚁任务是在约束条件下,访问客户后回到仓库,生成一条回路。设蚂蚁k 当前所在的顶点为i ,则蚂蚁k 由点i 向点j 移动要遵循一下公式(1)的状态变化规则而不断迁徙,按不同概率来选择下一个。

()()arg max ij ij v αβτη⎡⎤=⎢⎥⎣⎦

(0q q ≤,k k allowed ∈) Exploitation v V = (0q q >) Exploration (1)

(其中{}0,1,,1k k allowed n tabu =-- 表示蚂蚁k 当前选择的城市集

合,k tabu 为禁忌表,它记录蚂蚁k 已经路过的城市,用来说明人

工蚂蚁的记忆性。

ij η用于评价蚂蚁由点i 向点j 移动的启发函数,其值通常用距离的倒数求得,即()1

,ij i j d c c η-=。,αβ体现了信息素和启发信息对蚂蚁决策的影响。α取值为1;参数0β>描述启发函数的重要性;参数0q (001q ≤≤)决定利用和开发的相对重要性,利用(Exploitation )指走最好的路,开发(Exploration )指按信息素浓度高概率高的原则选择V, q 是在[0,1]上任取的随机数)

当0q q >时,按公式(2)的概率进行选择:

()()()0{ij ij k

ij ij k allowed k t j allowed t k ij p t αβ

αβ

τητη∈⎡⎤⎡⎤⎣⎦⎣⎦∈⎡⎤⎡⎤⎣⎦⎣⎦∑=

(3)修改禁忌表,即选择好之后将蚂蚁移动到下一个城市,并把该城市移动到蚂蚁个体的禁忌表中;

(4)循环执行第2步和第3步,直到每只蚂蚁都生成一条路径;

(5)计算第k 只蚂蚁所走路径的总长度k L ;

(6)根据公式(3)(4)更新所有路径上的信息量;

()()1(t)ij ij ij t n p τττ+=-+∆ (3)

1m k ij ij

k ττ=∆=∆∑ (4)

(7)若循环次数NC ≥NCmax,则循环结束并输出计算结果,否则清空禁忌表并转到第2步。

相应的MATLAB 程序如下:

%%第一步:变量初始化

[L_nn,P_nn]=NearestNeighborTSP(d);%nn L 是最近邻域启发算法产生

的路线长度

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

if c_temp~=0

p=zeros(1,c_temp);

for i=1:c_temp

p(i)=(tau(current_node,to_visit(i)))^alpha*(1/d(current_node, to_visit(i)))^beta:%计算()()ij ij αβ

τη

end

sun_p=sum(p);

q0=rand;

select=to_visit(c_temp);

if q0<=0.9

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

相关文档
最新文档