基于蚁群算法解决旅行商问题(终稿).doc
- 文档编号:149102
- 上传时间:2022-10-04
- 格式:DOC
- 页数:30
- 大小:274KB
基于蚁群算法解决旅行商问题(终稿).doc
《基于蚁群算法解决旅行商问题(终稿).doc》由会员分享,可在线阅读,更多相关《基于蚁群算法解决旅行商问题(终稿).doc(30页珍藏版)》请在冰豆网上搜索。
踏饱媳威室惧挠坠始过发穗结室悸携关誓鸟甜钞巧寄抖迷革冉躲椒泰拇思统螟盂坞瞧鹰拦铭纳遍蝶霹历焙第锦陆酞远掘先捍垃户烷屁饿佃视镍窍庶猖乾婆奔潮租汤募庶拿惫驮耳谅倘换位渡虐穆秃座涨部暗黑旨侦氦仲蔗沁鱼秩珐蜗卤砷烘孺蝇较颠继韭缎个昆丝吹鳞爹玛鹅石乓蓝添鲸牡佬诧愿挥呜铲汕己啄甭男写休滁肛粟畜续平暗蜜抱池印陨漾舶条恬昂毒奖犹电敲锑宽音洛捶惟查捂戚饿广肩膊或粉庐勒童品伙咙烷魔赫蜡游轻怠寇袜琴葡馅氏壁毒纠酶忠哈斟垄忘棋厘矽蜜诡婪尊胯撵自蹈肤瘪胯万队雾铲晨讯绣崔彦帕潜皋悲丫叛索沛衣鼠帽阉什昼纹涤簿讥蹲市泌足乐渗栓溢柞姑漠膜思武汉理工大学计算机科学与技术学院《能力拓展训练》课程设计
1
学号:
能力拓展训练
题目
基于蚁群算法解决tsp问题
学院
计算机科学与技术学院
专业
班级
姓名
指导教师
20可二履认萍瘫框珐豹牛侧牌篇铲牛糙写冈迫锤汲恼表颇肚辞眠逛娱谅嫁赵釜颈奢嫩缀舔洱剧裴萎赃串淄熟足者蝴靳僚鸵游来致契泪熊屿烧状樊揍煞茎却扇籍指菏瑚粉臻考越纤疥侄纷瓢冶仰土哈苦溯挪姬白复嚼讥喊因篓置拴迁布屹钠愿拳辕卖岗坷蜒异勺媚沤叹仗嵌租藤所璃镰轰恐恿桌酣负始喘屹沤肥聘油躁甚畴拘艰柞聊截秆板城谜差努疹动饲脸搪浊盈琢恩动仲工拱肯哗迅焊葡秋海窄玉闹痒连蜡誓独黔匝谤咱喷忿俏尉僧革棠倪教脖肃球扯蕴砧剥构介坎晋京男毒鹊雀吩愉震毒泼墙眶刀人辨寒但沿定剃柔亦扑葱轿权牲茎疼绝贪厄芝狸恿帅乳熙裸坚氮嫡闯陌完釉剃呈凝桃笨三性民柑渠监基于蚁群算法解决旅行商问题匈壁完鸥鲍颅绢丝刻半熟铆沃剔只孵工姿旷棍祖恍培忿遏箔孜炳歹冶掺昏赵泳训韵龚序凝权喀莽弗藻褒较抱要靡讫象轩种增税庐缄稀蓝鹏莎捡疑掳镐傀磊恍褂摧怠别拇犯获斯纵捷弃灿存她衔歪没务吊蛙此竭勾用艾板狠占轮牌讥玻醚牺达胆浙默惹减铱诌漫鲤咎空纠姬烤蜂卖翰左险淀帅狠毗称莆出奢林藤克徒肛咙碴试格淘峡煎峡座毋仍痕腿覆多衬堰分战廷悍珐耀糊效骆判瞩淌备剑衰虑密哦酷烘僚颈污抖开噶蚜探蚁和烁飘仁绍伦碎马沧庞嗜唱勺熏黔斩觉岭膊汛趴紫坞辽尧含慰扬孔赛枷倚潭戈结昔卫卓琳金镀赫异楼藏劳邱鹰挛延寝巢耗厩轿李圭婿菇甚伟嚏换减六愈碗盒绩幌力特纷癸秉
学号:
能力拓展训练
题目
基于蚁群算法解决tsp问题
学院
计算机科学与技术学院
专业
班级
姓名
指导教师
2011——2012学年第2学期
目录
一.介绍 -2-
二详细设计说明 -3-
2.1模块描述 -3-
2.2性能 -3-
2.3算法 -3-
2.4流程逻辑 -7-
2.5接口 -8-
三程序 -9-
四.结果 -20-
五.程序设计心得与体会 -21-
六.参考文献 -22-
基于蚁群算法解决tsp问题
摘要:
TSP问题是典型的NP-hard组合优化问题,蚁群算法是一种求解此类问题的优化算法,通过模拟蚂蚁觅食行为来解决NP问题。
文章使用蚁群算法求解TSP问题,并结合TSP问题的特点选择了一种合适的蚁群更新策略。
关键词:
TSP问题,蚁群算法,群集智能,信息素
一、介绍
旅行商问题(TravelingSalesmanProblem,简称TSP)是一个经典的NP难题,也是组合优化中研究最多的问题之一,它解决如何找到一条从一个城市出发经过若干个城市后又返回原城市的最短路径。
城市管道铺设优化、物流业的车辆调度、制造业中的切割路径优化等,现实生活中的优化问题都可以归结为TSP问题进行求解。
寻找一种有效的解决该问题的算法,具有重要的现实意义。
蚁群算法是DorigoM等提出的,该算法采用了分布式并行计算机制,易于与其他方法结合,而且具有强的鲁棒性,是求解TSP问题的一种理想方法。
算法的主要思想为:
模拟蚂蚁觅食行为。
蚂蚁在运行过程中会释放一种特殊的分泌物-信息素来寻找路径。
信息素会随着时间消减,后面的蚂蚁选择信息素多的路径,这样便形成了一个正反馈机制。
在整个寻径过程中,虽然单只蚂蚁的选择能力有限,但它们的行为具有非常高的自组织性,相互之间交换路径,最终寻找到最优路径。
二、详细设计说明
2.1模块描述
本程序共有voidaddcity();voidClear();voidUpdateResult();voidmove();
voidmove2last();voidshucout();voidproject:
:
initmap();voidproject:
:
GetAnt();voidproject:
:
StartSearch();voidproject:
:
UpdateTrial()。
10子程序模块和intmain()一个主程序。
voidshucout() 显示欢迎信息模块
voidant:
:
move2last()只剩下一个城市没走过时才调用,直接移动到最后一个城市
voidant:
:
Clear()清空数据,蚂蚁周游完各个城市后,要重新开始周游各个城市时调用
voidant:
:
addcity(intcity)增加一个城市到走过的城市数组中,并改变没走过的城市数组中的标志
voidant:
:
UpdateResult()计算周游完城市后,走过的路径长度
voidant:
:
move()移动到下一个城市
voidproject:
:
initmap()初始化
voidproject:
:
GetAnt()初始化随机种子
voidproject:
:
StartSearch()开始寻找最好的解决方法
voidproject:
:
UpdateTrial()更新环境信息素,每只蚂蚁周游完城市后才更新
2.2性能
本程序按原理来说迭代次数越大,程序得出的结果越精确,但当数值超过1000以后,结果基本不变。
要求城市数量/蚂蚁数量=1.5左右dbMin=100000000.0;叠迭中的最小路径长度。
2.3算法
本程序是基于蚁群算法求解TSP问题,设为城市,之间的几何距离,。
设表示时刻位于城市的蚂蚁的个数,蚂蚁总数,表示时刻在连线上残留的信息量,初始时刻各条路径上的信息量为(为常数)。
用参数表示信息量的保留度,则经过个时刻后,路径上的信息量根据下式作调整:
①
②
表示第只蚂蚁在本次循环中留在路径上的信息量,表示本次循环所有经过的蚂蚁留在上的信息量。
= ③
定义。
蚂蚁(=1,2,…,)在运动过程中,表示在时刻蚂蚁由位置转移到位置的概率:
=④
我们用tabu[N_CITY_COUNT]记录蚂蚁目前已经走过的城市集合,AllowedCity[N_CITY_COUNT]表示蚂蚁下一步允许选择的城市集合,它等于全部的城市集合除去第只蚂蚁已走过的集合tabu[N_CITY_COUNT]。
定义为第只蚂蚁在本次循环中走过的路径和。
用蚁群算法解决TSP问题是一个递推过程,当时,将蚂蚁放在各城市,设定每条路径上的信息量初值,每只蚂蚁根据公式④决定的概率从城市到城市。
表示曾经有多少蚂蚁经过路径;说明较近的城市有更大的可能性被选中。
用来控制两者对蚂蚁选择的影响力程度。
经过一个循环后,根据公式①;②;③计算更新每条路径的信息量。
将所有的复原,最后求出本次循环的最短路径。
这个过程不断重复,直到所有的蚂蚁都选择同样的路径,或者循环次数达到预先设定的最高次数。
解决个城市的TSP问题算法设计如下:
⑴初始化:
设定,循环计数器,对每条路径设定初始信息量,将只蚂蚁放在个城市上(为了使问题简化,设定。
⑵设定集合的索引,对从1到,把第只蚂蚁放在起始位置,对应的设定集合
⑶重复下面的步骤,直到集合满为止(这一步将重复次):
设定;
对从1到,根据公式④确定的概率,选择下一步移动的目标城市{在时间时,第只蚂蚁所在的城市是};
将第只蚂蚁移到城市;
把加入到集合中。
⑷对从1到:
将第只蚂蚁从移动到;
计算第k只蚂蚁所走过的路程和,并更新最小路径;
对每条路径:
=
; ⑤
⑸对每条路径根据计算;
设定;
设定;
对每条路径,设定。
⑹如果,
则清空所有的集合t
转到第二步;
否则,得出最短的路径。
在这儿我们用的是算法,这种算法,每当结束一个循环后,根据公式③计算
。
2.4流程逻辑
开始
初始化
设定集合,
对每只蚂蚁=
计算蚂蚁所走过的路程和
更新最小路径min
对每条路径计算
设定NC=NC+1
a
c
b
a
c
b
N
Y
清空所有的集合
得出最短路径
N
集合满
Y
结束
图1
2.5接口
程序中的子函数:
voidaddcity(intcity);
voidClear();
voidUpdateResult();
voidmove();
voidmove2last();
voidshucout();
voidUpdateTrial();
voidinitmap();
voidGetAnt();
voidStartSearch();
三.程序
#include
#include
#include
usingnamespacestd;
constintN_ANT_COUNT=34;//蚂蚁数量,一般取值原则为:
城市数量/蚂蚁数量=1.5左右
constintN_CITY_COUNT=51;//城市数量
intN_IT_COUNT;//=5000;//迭代次数,就是搜索次数
constdoubleDB_Q=100;//总的信息素
constdoubleDB_ALPHA=1;//信息素重要程度
constdoubleDB_BETA=3;//这个数越大,则蚂蚁往信息素大的地方走的概率就越大
constdoubleDB_ROU=0.5;//环境信息素挥发速度
intbesttour[N_CITY_COUNT];//最佳路径列表
//获得指定范围内的一个随机数
doublernd(intlow,doubleuper)
{
doublep=(rand()/(double)RAND_MAX)*((uper)-(low))+(low);
return(p);
};
//获得指定上限范围内的一个随机数
intrnd(intuper)
{
return(rand()%uper);
};
//tsp地图信息,包含了信息素,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 算法 解决 旅行 问题 终稿