物流配送中的车辆分配与路径安排的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
物流配送中的车辆分配与路径安排的设计与实现
:
摘要
物流配送中的车辆路径问题(CVRP)是为一些车辆确定一些客户的路
径,每一客户只能被访问一次,且每条路径上的客户需求量之和不能超过
车辆的承载能力,每条路径都以中心开始和结束。
本文的目标是通过蚁群
算法实现对车辆分配与路径安排。
蚁群算法是受到人们对自然界中真实的蚁群集体行为的研究成果的
启发而提出的一种基于种群的模拟进化算法。
本文介绍了基本蚁群算法及
其应用领域。
通过对基本蚁群算法的理解,提出了三种对基本蚁群算法的
修改策略,以求解 CVRP。
文中用伪码对修改后的算法进行了详细的描述。
同时,使用Visual C++实现了实验性仿真系统,模拟了车辆分派与路径安
排。
通过对实验数据的分析,得到了较好的修改策略和合适的参数大小。
基于引入其他算法的优点来改进自身缺点的思想。
本文在适用于求解CVRP 的基本蚁群算法中引入变异机制,来提高收敛速度和寻找更优解。
实
验数据表明,引入变异机制的蚁群算法能够有效地解决带有容量限制的车
辆路径问题,并且大大提高了解的质量。
关键词:蚁群算法,CVRP ,变化
1
第1章绪论
1.1研究背景
中国物流业近 5 年才开始起步,并进入发展期。
物流业的兴起与外资进入中国市场,制造业转移中国密切相关,接着是连锁业物流、家电物流日用化工业物流、汽车物流等等。
据统计,美国 2000 年的运输费用为 5900 亿美元,占当年 GDP 总
1作者简介:姓名,姚军,男(1987—),安徽宣城,汉族。
2005年9月至2009年7月就读于安徽农业大学信息与计算科学专业。
值 99600亿美元的 5.92%,可见,减少运输费用是有效减少物流成本的重要方面。
对于物流中心和第三方物流企业的货物配送,运输车辆的调度是工作的重点,正确合理的调度可以有效减少车辆的空驶率,实现合理路径运输,从而有效减少运输成本,节约运输时间,提高经济效益。
国外车辆优化调度研究已广泛用于生产、生活的各个方面,如报纸投递及线路的优化、牛奶配送及送达线路的优化、电话预订货物的车辆载货和线路设计、垃圾车的线路优化及垃圾站选址优化、连锁商店的送货及线路优化等等。
目前,研究水平已有很大发展,其理论成果除在汽车运输领域外,在水运、航空、通讯、电力、工业管理、计算机应用等领域也有一定的应用,还用于航空乘务员轮班安排、轮船公司运送货物经过港口与货物安排的优化设计、交通车线路安排、生产系统中的计划与控制等多种组合优化问题.在国内,该问题的系统研究还不多见。
蚁群优化算法是模拟自然界中真是蚁群的觅食行为而形成的一种模拟进化算法,是20世纪90年代意大利的M.Dorigo 等学者提出的。
受到其取得了较好的实验结果的影响,蚁群优化算法激起了其他学者的研究热情,并取得了很多研究和应用成果。
近10年来的研究结果已经表明:蚁群算法用于组合优化具有很强的发现较好解的能力,具有分布式计算、易于与其他方法相结合、鲁棒性强等优点,在动态环境下也表现出高度的灵活性和健壮性。
然而,蚁群算法存在搜索时间过长、易于停滞的问题。
为了克服这些缺点,不少学者提出了改进算法。
例如:
一、MMAS(max-min ant system)算法,其基本思想是对路径上的信息素进行限制,以期克服停滞问题,并且仅让每一代中最好的个体所走的路径上的信息作调整,以加快收敛速度。
二、改进的信息素更新策略:其一,局部信息素修改时,挥发系数动态改变;其二,全局信息素更新时,则将蚂蚁所走路的较短的那些路径上的信息加强,而较差的那些路径上的信息减弱。
三、相遇算法,其基本思想是在求解 TSP 问题中,用两只蚂蚁共同完成对一条路径的搜索,以使搜索速度提高。
变异策略,以加快局部搜索。
四、引入交叉算子以提高搜索多样性、引入分支因子r 作为衡量群体多样性的指标,当r 低于某一值时,对各路径上的信息作动态调整,以期望克服停滞现象。
这些研究对算法有一定程度的改进,但对提高收敛速度的效果不是特别明显,速度慢仍然是制约蚁群算法在大规模优化问题中的应用的瓶颈。
1.2.1 实现基本蚁群算法在求解CVRP 中的应用
带有容量限制的车辆路径问题(CVRP)可以概述如下:有n 个客户,已知每个客户的需求量及位置,用多辆汽车从中心仓库(depot )将货物运到每个客户处。
每辆车的容量是有限的,要求在运送过程中不能超过车的容量,每辆车从 depot 出发且在为最后一个客户服务完后返回到depot。
每个客户的需求必须由一辆车来提供即客户的需求量不大于车的容量。
目标是最小化总的汽车行驶距离和所需求车数目。
将最小化汽车总的行驶路程。
作为第一目标,最小化车辆数目作为第二目标
图1.1 CVRP模型
将基本蚁群算法应用于 CVRP,实现车辆的路径分配,使得汽车总的行驶路程最短和所需汽车的数量最少。
由于基本蚁群算法针对于旅行商问题(TSP),在应用于CVRP中需要对算法作适当的修改。
1.2.2 改进基本蚁群算法取得更好的性能
蚁群算法主要分为初始化、第一个客户的选择、下一个客户的选择、
信息素局部更新、寻找最好的蚂蚁和信息素全局更新几步。
每一步可以采
用不同的策略来改进基本蚁群算法。
对于蚁群算法中公式有许多参数,参数的大小以及各参数之间相
系对结果都有一定的影响,所以可以通过比较寻找合适的参数来改进蚁群
算法。
第2章 蚁群算法
2.1基本蚁群算法
根据仿生学家的研究结果,蚂蚁凭借路径寻优的能力能够找到蚁巢与食物之间的最短路径,其原理在于:蚂蚁在所经过的路径上留下一种挥发性分泌物(以下称为信息素),信息素随着时间的推移会逐渐挥发消失。
蚂蚁在觅食过程中能够感知这种物质的存在及其强度,并以此来指导自己的运动方向,倾向于朝着这种物质强度高的方向移动,即选择该路径的概率与当时这条路径上该物质的强度成正比,信息素强度越高的路径,选择它的蚂蚁就越 多,则在该路径上留下的信息素的强度就更大,而强度大的信息素又吸引更多的蚂蚁,从而形成一种正反馈,通过这种正反馈,蚂蚁最终可以发现最佳路径,导致大部分的蚂蚁都会走此路径。
为了模拟实际蚁群的行为,首先引进如下记号:设 m 是蚁蚂蚁的数量
ij d (i,j=1,2,……,n)表示城市 i 和城市 j 之间的距离,()t b t 表示 t 时 刻位于城市i 的蚂蚁的个数,则有1()n
t t m b t ==∑,()ij t τ表示 t 时刻在城市i,j 连线上残
留的信息量。
初始时刻,各条路径上信息量相等,设(0)ij C τ=(C 为常数)。
蚂蚁(1,2,,)k k m =在运动过程中,根据各条路径上的信息量决定转移方向。
()k ij p t 表示在 t 时刻蚂蚁k 由城市i 转移到城市j 的概率:
[()][],[()][]()0,k ij ij k k ik ik ij k k t j tabu t p t tabu j tabu αβ
αβτητη∉⎧∉⎪⎪=⎨⎪⎪∈⎩
∑ (1) 其中:ij η为先验知识或称为能见度,在为城市i 转移到城市j 的启发信息, 一般1ij ij
d η=; α为在路径ij 上残留信息的重要程度;β为启发信息重要程度;与实际蚁群不同,人工蚁群系统具有记忆功能, k tabu (k=12,…,m )用以记录蚂蚁k 当前所走过的城市,下一步不允许选择的城 市,称为禁忌表。
经过n 个时刻,所有蚂蚁都完成了一次周将满,此时应清空,将当面蚂蚁所在城市置于k tabu ,准备下一次周游。
这 时 , 计 算 每 一 只 蚂 蚁 所 在 走 过 的 路 径 k L ,并保存最短径
()
min min min ,1,2,3,....,k k k L L L k m === (2)
随着时间的推移,以前留下信息逐渐消逝,用参数 1-ρ 表示信息消逝程度,当蚂蚁完成一次循环以后,各路径上信息量要根据(3)作调整:
(1)(1)ij k k ij ij t p γγρτ+=-+∆ (3) 1ij m
k ij k ττ=∆=∆∑ 其中
,10,k k ij Q
k t t ij L τ⎧⎪∆=+⎨⎪⎩
当第只蚂蚁在时刻和之间经过时其它 τ∆表示第k 只蚂蚁在本次循环中留在路径上的信息量,ij τ∆表示本次循环
中路径 ij 上的信息量的增量,Q 为常数,L 表示第k 只蚂蚁在 本次循环中所走过的路径的长度.本次循环中所走过的路径的长度。
一般设置周游次数计数器 NC,当达到设定值时结束,最短路径为:
min min min (11,2,...,)k L L NC ==
2.2改进蚁群算法
算法描述如下:
Step1:初始化。
将每个边上的信息素初始化为一个很小的常数值;将 m 只蚂蚁随机地
分配到n 个城市,同时,出发点城市设置到禁忌表中。
Step2:下一个节点的选择。
每只蚂蚁按照式(4)或式(1)选择下一个城市,并修改禁忌表。
00arg max{[][],(1),k ij ij j tabu q q j q q αβτη∉⎧≤⎪=⎨⎪>⎩
按公式 (4)
其中: 001q ≤≤ ,是初始设定的参数;q 是一个随机数,q ∈[0,1];S 是根据式(1)决定的随机变量。
该策略增强了搜索的多样性,以避免过早地陷于搜索停滞。
Step3:信息素局部更新。
每只蚂蚁选择一个城市以后,按式(5)更新该边上的信息素。
()(1)(1)t k
ij ij ij t p ργγτ+=-+∆ (5) ,10,k k ij Q
k t t ij L τ⎧⎪∆=+⎨⎪⎩
当第只蚂蚁在时刻和之间经过时其它 其中,jb l 是蚂蚁k 从开始城市到当前城市已走过的路径长度,
其余参数与 式(3)相同。
Step4:计算最佳路径。
当m 只蚂蚁走完所有城市以后,按式(6)计算最佳路径长度并保留;
{}min min ,1,2,....,k L L k m == (6)
其中,k L 是第k 只蚂蚁所走的路径长度。
Step5:信息素全局更新。
当所有蚂蚁走完全部城市以后,仅对最佳路径上的信息素按式(7)
行更新。
(1)new
old
ij ij ij a ατττ=-+ (7) 1
,0,k k ij j l τ⎧∈⎪∆=⎨⎪⎩
最近路程其它 其中,α为全局信息素挥发系数,k l 为最佳路径的长度,ij ∈最佳路径,表示蚂蚁k 所走的城市ij 属于最佳路径。
Step6:设置的搜索次数如果未完,则清空禁忌表,重复上述过程。
2.3蚁群算法应用领域
Dorigo 等首先将自己提出的蚁群算法应用在 TSP 问题上,Olive30问题 题的求解结果同其他几种进化算法进行了对比研究,结果表明,AS 算法的 求解效果明显优于现在流行的几种进化算法。
随即众多学者以 TSP 问题为主 展开了研究,并迅速将这一研究拓展到其他几种典型的组合优化问题上Dorigo 和Maniezzo 等将AS 算法引入到二次分配问题(QAP)上,并对AS 算法进行了相应的改进。
Costa 和Hertz 等首先在图着色问题中采用了AS 算法 Schoonderwoerd 和 DiCaro 等则分别在有线和无线网络路由这一领域应用 AS 算法并取得了不错的结果 CAS 算法在频段分配问题的成功应用是Maniezzo 等在这一领域的重要研究成果。
Bullnheimer 等则将 AS 算法扩展到 VRP 问题上,同其他算法相比结果较优。
国外学者近几年对AS 算法在各专领域的应用
研究贡献卓越,并且这方面的研究使得AS 算法趋于和完善。
2.4本章小结
蚂蚁在觅食过程中通过信息素交流信息,以选择最短的路径并达到搜索食物的目的。
蚁群优化算法是模拟这一觅食行为的优化算法。
本章介绍了基本蚁群系统模型,基本蚁群算法描述和蚁群算法应用领域。
第3章求解CVRP 的基本蚁群算Z法
3.1基本蚁群算法求解CVRP
为了将基本蚁群算法应用于CVRP,对基本蚁群算法进行如下修改:1、初始化,每只蚂蚁的出发点都是 depot。
然后,为每只蚂蚁设计一个策略选择一个客户作为第一个服务的客户,同时,在将depot 和所选择的第一个客户都设置到禁忌表中。
2、每选择完下一个客户后,判断车辆剩余容量能否满足所选客户的需求。
如果能够满足则继续为所选择的客户提供服务;否则,不为所选择的客户提供服务,车辆返回depot。
3.2修改后的算法的详细描述
Step1:初始化。
将每个边上的信息素初始化为一个很小的常数值;每只蚂蚁都得出发点都是depot,同时,将depot 设置到禁忌表中。
Step2:第一个客户的选择。
将车的当前的运载容量增加第一个客户的需求,同时,将第一个城市设置到禁忌表中。
Step3:开始周游。
Step3.1:下一个客户的选择。
赌轮盘规则,选择下一个客户。
判断车所剩的容量能否满足所选择的客户的需求。
如果能够满足,则为所选则的客户服务,将车的当前容量增加所选择的客户需求,同时,将所选择的城市设置到禁忌表中。
然后,更新对应边上的信息素。
如果不能够满足,则放弃所选择的客户返回到depot。
同时,再派一辆车继续服务,此时车的当前容量为0。
Step3.2:判断该蚂蚁是否为所有客户提供了服务。
如果服务完,则返回depot,完成路径的构造。
否则,返回Step3.1
继续选择下一个客户。
Step4:找到本次周游最好的蚂蚁。
总的路径长度最小的蚂蚁作为最好的蚂蚁。
Step5:信息素全局更新。
对最好蚂蚁所构造的路径进行信息素更新。
Step6:设置的搜索次数如果未完,则清空禁忌表,重复上述过程。
3.3本章小结
由于 CVRP 增加了车辆的容量限制,使得每只蚂蚁所构造的整条路径是由多条以depot 开始和结束的路径组成,每辆车对应一条路径,为该路径上的客户服务。
本章介绍了对基本蚁群算法的修改以求解CVRP。
第4章基本蚁群算法的实现
4.1类的结构设计
1、Ant (蚂蚁)类
class Ant
{
public:
Ant();
virtual ~Ant();
int * tour; //记录蚂蚁的路径
bool * visited; //记录每次循环中蚂蚁访问过的城市
long int demandTotal;//记录当前路径需求总量
double tourLength; //路径总长度
int vehicleNum; //所需车辆数
int numVisited; //访问过的城市数
int numStep; //访问的总次数
};
2、City (客户)类
class City
{
public:
City();
City(CPoint pos,int demand,CPoint *city,int numCity);
virtual ~City();
CPoint position; //客户位置坐标
int demand; //需求量
double *distance; //到各个客户的距离
};
3、Phernome (信息素)类
class Pheromone
{
public:
Pheromone();
Pheromone(double a,double b,double i,double r);
virtual ~Pheromone();
void localUpdatePheromone ( Ant *ant , int from ,int end);
void initPheromoneTrails ( int numCity);
void evaporation ( int numCity );
void globalUpdatePheromone (Ant *ant , int numCity);
void computeTotalInformation( int numCity ,City *citys );
double computeTotalInformation1( int from ,int end, City *citys );
private:
double initialTrail; //每条边上初始化信息素的大小
double rho; //信息素挥发系数
double alpha; //残留信息素的重要程度
double beta; //启发信息的重要程度
public:
double **pherCity; //信息素数组,保存每条边
上的信息素大小
double **total; //概率数组,保存每条边供选择的概率大小
};
4、CVRPView (算法)类
class CVRPView : public CView
{
protected:
CVRPView();
public:
void WriteFile(Ant &ant);
void RenewAnts();
void DisplayRoute(Ant ant);
void DrawRoute(Ant ant);
int FindOptimum(Ant *ants,int total);
void OneTimeTour();
int FindNextCity(Ant &ant);
void Initial();
void FindFirstCity();
virtual ~CVRPView();
protected:
//{{AFX_MSG(CVRPView)
afx_msg int OnReadvrp();
afx_msg void OnAcs();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
void DisplayCity();
int FindXMax(CPoint *num,int total);
int FindYMax(CPoint *num,int total);
Ant saveOptAnt; //保存运行过程中最好的蚂蚁 Int times; //周游次数
int optAnt; //记录最好蚂蚁的序号
bool isFindRoute; //标记是否找到路径
bool isReadData; //标记是否读入数据
int * demand; //保存客户需求
int capability; //车辆的最大容量
int numCity; //客户个数
CPoint *posCity; //保存客户位置坐标
int numAnt; //蚂蚁个数
Ant *ants; //保存蚂蚁对象
City *citys; //保存城市对象
Pheromone pher; //保存信息素对象
};
4.2算法实现的伪码描述
针对第一个客户的选择,提出了三种实现的策略。
策略1,每次周游服务的第一个客户是随机选择的;策略2,服务的第一个客户是按顺序分配的;策略3,第一次周游时服务的客户是随机选择的,以后每次周游与第一次相同。
4.2.1策略1:随机产生一个客户作为第一个客户。
策略1:随机产生一个客户作为第一个客户,伪码描述如下:
Step1:初始化。
定义蚂蚁、客户对象并为其分配相应的空间,初始化各条边上的信息素。
Step2:恢复蚂蚁状态。
IF (第一次遍历== true)
直接跳到Step3;
ELSE
将每只蚂蚁恢复到初始状态:将禁忌表清空,将客户的访问标记重新赋值为false ;
Step3:随机产生一个客户作为第一个客户。
Step3.1:随机选择客户:
用当前时间初始化随机数种子;
产生一组互不相同的随机数作为相应蚂蚁的第一个客户;
Step3.2:更新蚂蚁状态:
假设第k 只蚂蚁的第一个客户为第j号客户,则:
该蚂蚁的需求总量 = j 号客户的需求量;
该蚂蚁的路径表增加0 号和j号客户;
该蚂蚁的路径长度 = 0 到j 的距离;
该蚂蚁所用车辆数 = 1;
该蚂蚁的访问标记表中0号和j 号客户的访问标记 =
true ;
该蚂蚁访问客户的个数 = 2;
该蚂蚁移动的次数 = 2;
Step4:开始周游。
Step4.1:选择下一个客户。
赌轮盘规则:
用当前时间初始化随机数种子;
产生一个随机数q 与常数0q 作比较:
IF (0q q <)
选择下一个客户所依据的公式是:
00arg max{[][],(1),k ij ij j tabu q q j q q αβτη∉⎧≤⎪=⎨⎪>⎩按公式 (1)
ELSE
选择下一个客户所依据的公式(2)是:
[()][],[()][]()0,k ij ij k k ik ik ij k k t j tabu t p t tabu j tabu αβ
αβτητη∉⎧∉⎪⎪=⎨⎪⎪∈⎩
∑ (2) 假设第k 只蚂蚁的第一个客户为第j 号客户,则:
该蚂蚁的需求总量 += j 号客户的需求量;
IF (该蚂蚁的需求总量 <= 车的最大容量)
{ //该蚂蚁能够为选择的j 号客户服务
该蚂蚁的路径表增加j 号客户;
该蚂蚁的路径长度 += 当前客户到j 的距离;
该蚂蚁的访问标记表中j 号客户的访问标记 = true ;
该蚂蚁访问客户的个数++;
该蚂蚁移动的次数++;
信息素局部更新:
{ //信息素定义为一个二维数组pherCity [numCity][numCity]。
//更新对应边上的信息素:
挥发:eva = (1-rho) * pherCity[from ][end];
增加:tau = rho / (double) ant->tourLength;
更新:pherCity [from ][end] =eva + tau;
}
}
ELSE
{//该蚂蚁不能为所选则的j 号客户服务,返回0 号客户(depot )
该蚂蚁的需求总量 = 0;
该蚂蚁所用车辆数++;
该蚂蚁的路径表增加0 号客户;
该蚂蚁的路径长度 += 当前客户到0 号客户的距离;
该蚂蚁移动的次数++;
}
Step4.2:判断该蚂蚁是否遍历完客户。
If (该蚂蚁访问客户的个数 = = 客户的个数)
{//该蚂蚁周游完所有客户
该蚂蚁周游结束标记 = true;
该蚂蚁的需求总量 = 0;
该蚂蚁的路径表增加0 号客户;
该蚂蚁路径长度增加返回到0 号客户的距离;
该蚂蚁移动的次数++;
}
Else
返回Step4.1。
Step5:找到本次周游最好的蚂蚁。
路径长度最小的蚂蚁为本次周游最好的蚂蚁。
Step6:信息素全局更新。
//信息素定义为一个二维数组pherCity [numCity][numCity]。
Step6.1:信息素挥发:
双重循环:所有的边
循环体:pherCity [i][j ] = (1 - rho) *pherCity [i][j ];
Step6.2:信息素增加:
tau = rho / 本次周游最好的蚂蚁的路径长度;
循环:所有走过的边
循环体:pherCity [j ][h] += tau;
Step7:更新保存的最好蚂蚁。
IF (第一次周游标志 = = true )
将本次周游最好的蚂蚁保存为最好蚂蚁;
ELSE
IF (本次周游最好的蚂蚁的路径长度<保存的最好蚂蚁
的路径长度)将保存的最好蚂蚁更新为本次周游最好的蚂蚁;
ELSE
不更新保存的最好蚂蚁;
Step8:判断周游是否结束。
IF (周游次数 <设定的总次数)
返回Step2 继续一次新的周游。
ELSE
结束;
4.2.2策略2:每只蚂蚁按顺序选择客户作为第一个客户
策略2:每只蚂蚁按顺序选择客户作为第一个客户。
蚂蚁数与客户(除depot
外)数相等,即为每个客户(除depot 外)分配一只蚂蚁. 对策略 1 的Step3 做
修改即可实现策略2,修改后为:
Step3:每只蚂蚁按顺序选择客户作为第一个客户。
k 号蚂蚁选择的
第一个客户为j(j =k+1 )号客户,则: 该蚂蚁的需求总量 =j 号客户
的需求量:该蚂蚁的路径表增加0 号和j 号客户;
该蚂蚁的路径长度 = 0 到j的距离;
该蚂蚁所用车辆数 = 1;
该蚂蚁的访问标记表中0 号和j 号客户的访问标记= true ;
该蚂蚁访问客户的个数= 2;
该蚂蚁移动的次数= 2;
4.2.3策略3:每次周游蚂蚁的第一个客户保持不变。
策略 3:每次周游蚂蚁的第一个客户保持不变。
第一次周游前随机产生一
组客户作为蚂蚁的第一个客户,以后每只蚂蚁周游所选择的第一个客户保持不
变。
对策略1的Step2、Step3和Step8做修改即可实现策略3,修改后为: Step2: 随机产生一组客户. 用当前时间初始化随机数种子;
产生一组互不相同的随机数作为相应蚂蚁的第一个客户;
Step3: 恢复蚂蚁状态。
将每只蚂蚁恢复到初始状态:将禁忌表清空,将客户的访问标记重新赋值为false ;
将Step2产生的第一个客户分配给蚂蚁;
Step8:判断周游是否结束。
IF (周游次数 < 设定的总次数)返回Step3 继续一次新的周游。
ELSE
4.3本章小结
本章介绍运用C++语言对蚁群算法实现的过程,包括基本类的定义、详细的伪码描述和运行结果。
在实现时采用了三种策略:随机产生一个客户作为第一个客户;每只蚂蚁按顺序选择客户作为第一个客户;每次周游蚂蚁的第一个客户保持不变。
第5章实验结果
5.1实验结果分析
图5.1 不同周游次数比较图
图 5.1是不同周游次数对最后结果的影响,总体趋势是随着周游次数的增加得到的路径越短。
同时,曲线起始较陡越来越平滑,说明蚁群算法全局搜索能力相当强,可迅速收敛到一个较优解。
但从较优解到最优解所花费的收敛时间所占比重很大。
在第 5 次运行时,所设定的周游次数是 500次,出现了一次起伏,这是由于随机因素的影响。
5.2本章小结
本章通过对实验结果的记录,对三种策略进行了分析,策略2的平均值较小每次实验时结果变化不大,得出结论策略 2 较好。
在策略2 的基础上对算法中的参数设置进行了比较,在周游 100 次时基本可以收敛到较好解初始化信息素大小对结果影响较大,在本算法中通过比较认为 0.1 较好。
所得到的最优解路径长度为1325(参考解为1221),车辆数为10(参考解为10)。
第6章小结
6.1结论
众多研究已经证明,蚁群算法具有很强的发现较好解的能力,因为该算法不仅利用了正反馈原理,而且是一种本质并行的算法,不同个体之间不断进行信息交流和传递,从而能够相互协作。
蚁群算法可求解传统方法难以解决的非凸、非线性、非连续的优化问题。
与其他模拟进化算法一样,蚁群算法通过候选解组成群体的进化过程来寻求最优解,该过程包含3个基本机制:选择、协作和更新机制。
蚁群算法凭借其优异的算法性能和算法特点很快成为启发式方法范畴内的一个独立分支。
通过对国内外的研究回顾,不难发现蚁群算法的主要优点:
1)正反馈性。
通过不断强化最优解的信息素,加快算法的收敛速度。
2)较强的鲁棒性。
对基本蚁群算法模型稍加修改,便可以应用于其他问题。
3)分布式计算。
蚁群算法是一种基于种群的进化算法,具有本质并行性,易于并行实现。
4)易与其他方法结合。
蚁群算法很容易与多种启发式算法结合,以改善算法的性能。
致谢
首先,我要感谢我论文的指导老师武东老师,在论文的选题,程序的编写和参考资料的寻找方面给了我极大的帮助。
对于我所遇到的问题,武东老师进行了细致的分析,让我在论文的写作过程中学习到许多东西。
其次,我很感谢理学院和蔼可亲的老师们,大学四年来,正是由于你们孜孜不倦的教书育人,才使我对数学产生浓厚的兴趣,并对我以后的学习起着至关重要的作用。
最后,感谢在大学四年中所以帮助过的朋友,谢谢你们!希望你们在以后的日子活的更精彩!
参考文献
[1] Dorigo M,Gambardella L M.Ant colony system: A cooperative learning approach to the travelling salsman problem. IEEE Transactions on Evolutionary Computation,1997,1(1):53-66.
[2] Dorigo M,Gambardella L M.Ant colony system for the travelling salsman problem. BioSystem,1997,43(2):73-81.
[3] 张纪会,高齐圣,徐心和.自适应蚁群算法[J].控制理论与应用,2000,17(1) :1-3,8.
[4] 张纪会,徐心和.一种新的进化算法一蚁群算法[J].系统工程理论与实践,1999,3:84~87.
[5]伍文城,肖建,基于蚁群算法的中国旅行商问题满意解[J] 计算机与自动化,2OO2,(8): 6-8,11.
[6]贾丽嫒,杜欣,并行遗传算法研究[J].湖南城市学院学报,2006,15(3):72-74.
[7]唐钟张葛祥.一种新并行遗传笋法及其应用[J].计算机应用与软件,2005,22(7):9-12.
[8] 于岚,尹晶,姚宝珍,基于自适应蚁群算法的车辆路径问题研究[J],商场现代化,2008,18:26-27.。