蚁群优化神经网络
基于蚁群优化算法的神经网络训练的研究

③易与其它方法结合 , 蚁群算法很容易与其它启发 式 算法 相结 合 。 善算 法 的性能 。近年来 。 部分 学 改 有
者提 出蚁 群 优 化算 法 ( C 。 蚁 群 系统 的理 论研 A O) 为 究 开辟 了新 的领域 。 本文 在 A O算 法 原理及 框架 的 C 基础上 。 试 将蚁 群优 化算 法引人 神经 网络训 练 中 。 并 与多个算 法进行 比较 。
网络都 使用 梯 度下 降法 的学 习进 行 训 练 。 如反 向 例
传 播 算 法 ( P , 种 算 法具 有 收 敛 时 间 长 、 于 陷 B )这 易 人 局部 极值 等 缺 陷 。 2 0世 纪 9 0年 代初 。提 出一 种新 的模拟 进 化算 法— —蚁 群 算 法 ( S t,该 算法 是一 种 随机 搜 索算 A )f I。 ]
摘 要 : A O 算 法 原 理及 框 架 的基 础 上 . 蚁 群 优 化 算 法 引入 神 经 网络 的 训 练 中 . 出 了 在 C 将 提 A O训 练 神 经 网络 的基 本 原 理 和 方 法 步骤 。并 与遗 传 算 法 、 拟 退 火算 法 、 动 量 项 的 B C 模 加 P
t m. er
Ke r s a tc ln pi zt n AC ;e rln tok ; a q aeerrMS y wo d :n oo yo t ai ( O) n ua ew rs me ns u r ro ( E) mi o
人 工 神经 网 络模 型 可 在 未 提 供 相 关 被 控 对 象 和 业务 模 型情 况下 达 到学 习控制 目的 。另 外 。 经 神 网络 的并行 结 构可 用硬 件 实 现 的方 法 进行 开 发 。 这 样 就提 供 了短 的 、 可预 知 的响应 时 间 。大 多数 神 经
基于蚁群优化的Elman神经网络在故障诊断中的应用研究

第2 7卷 第 4期 总 9 4期
基 于蚁 群优 化 的 E l m a n神 经 网络在 故 障诊 断 中
的应 用 研 究
曹龙汉 , 牟 浩, 张 迁, 余佳玲 , 李 景南
4 0 0 0 3 5 ) ( 重庆通信学院 控制工程重点实验室 , 重庆
[ 摘 要 ] 指 出普 通 E l m a n神 经 网络 B P学 习算 法 的不 足 , 将蚁 群 算 法和 E l m a n神 经 网络 相 融
a l g o r i t h m w h i c h a d j u s t s a u t o ma t i c a l l y b y u s i n g p h e r o mo n e v o l a t i l i z a t i o n P a n d p h e r o mo n e. r u p d a t e s t r a t e g y ,a n d
u s e i t i n f a u l t di a g no s i s o f d i e s e l e n g i n e t u r b o c h a r g i n g s y s t e m. S i mu l a t i o n r e s u hs s h o w t h a t t h e o p t i mi z e d El ma n n e u r a l n e t wo r k g e t s h i g h e r c o n v e r g e n c e s pe e d a n d h i g h e r p r e c i s i o n i n f a u l t d i a g n o s i s .I t c a n a l s o d i a g n o s e t h e f a u l t s o f d i e s e l e n g i n e t u r bo c h a r g i n g s y s t e m e f f e c t i v e l y, a n d l o c a l mi n i mum c a n b e a v o i d e d, S O t h a t t h e f a u l t s o f d i e s e l e n g i n e t u r b o c h a r g i n g s y s t e m c a n be d i a g n o s e d e f f e c t i v e l y.
基于蚁群算法的网络优化研究

基于蚁群算法的网络优化研究摘要:网络优化是现代计算机科学领域的一个重要研究方向。
为了提高网络的效率和性能,人们一直在寻找新的优化算法。
蚁群算法是一种模拟蚂蚁觅食行为的启发式算法,已经被成功应用于网络优化问题。
本文将介绍基于蚁群算法的网络优化研究,并讨论其应用领域、优势和挑战。
1. 引言网络优化是指通过改进网络拓扑结构、提高网络性能和有效利用网络资源来优化网络的过程。
随着物联网、云计算和大数据等技术的快速发展,网络优化变得越来越重要。
传统的网络优化方法通常具有局限性,无法在复杂的网络环境中获得最优解。
因此,人们开始探索新的优化算法来解决这些问题。
2. 蚁群算法的基本原理蚁群算法是一种基于自然界蚂蚁觅食行为的启发式优化算法。
蚂蚁在搜索食物的过程中,会留下信息素,用于引导其他蚂蚁找到路径。
蚁群算法的基本原理是通过模拟这种信息交流和信息素留下的方式来搜索优化解。
蚁群算法具有分布式、自适应和并行的特点,可以应用于解决多种复杂的问题。
3. 蚁群算法在网络优化中的应用蚁群算法已经被广泛应用于网络优化问题,包括路由优化、链路优化、拓扑优化等。
在路由优化方面,蚁群算法可以帮助网络中的数据包选择最短路径,从而提高网络的传输效率。
在链路优化方面,蚁群算法可以优化网络中的链路负载均衡,避免某些链路过载而影响网络性能。
在拓扑优化方面,蚁群算法可以改进网络的拓扑结构,以适应不断变化的网络环境。
4. 蚁群算法在网络优化中的优势相比传统的优化算法,蚁群算法具有以下优势:首先,蚁群算法是一种自适应的算法,能够根据环境的变化调整搜索策略。
其次,蚁群算法是一种分布式算法,能够同时搜索多个解,从而更有可能找到全局最优解。
此外,蚁群算法具有较强的鲁棒性和适应性,即使在网络中存在噪声和随机干扰的情况下,仍能保持较好的性能。
5. 蚁群算法在网络优化中的挑战尽管蚁群算法在网络优化中取得了一些成功,但仍面临一些挑战。
首先,蚁群算法的搜索过程需要大量的计算资源和时间。
基于蚁群优化神经网络的图书馆读者服务评价研究

能解 , f 第 个参数的解集合设 为( ≤z ) ̄ I) 1 ≤m , p ( - ) A
表 示 t 刻 集 合 中第 f 元 素 ( 的信 息 素 令 时 个 ) 时 间 t 迭代 次数 Ⅳc的初始 值均 为 0  ̄( ( )0, 和 ,l p 0 = I) 最 大 迭代 次数 为 Ⅳ 一 给定精 度 要求 £ c 。 步骤 2 将 h只 蚂蚁 分 别 寻 找 食 物 , 而得 到 h : 从 种 网络 参 数解 的方案 ,计 算 各种 方 案 的 网络输 出误 差, 在此 输 出误 差采 用均 方误 差形 式 , 即
E ∑ ∑( ) : 一 z
— r 1 0=1 =
神 经 网络 是 由大 量 的神 经元 相 互联 结 ,模 拟人 的大脑 神经 处 理信 息 的方 式 , 有 良好 的 自学 习 、 具 自 适 应能 力和 较 强 的联 想记 忆 功 能 ,能够 有效 地 完成
其 中, £为神 经 网 络输 出节点 数 , 为 训 练 样 本 肘 数 , 、 为 输 入第 r 样 本 时 ,第 0个 输 出 节 点 的 ‰ 个 实 际输 出和 期望 输 出 。 蚂 蚁 寻找食 物 的过 程 可 以看作 是 分别 从 各个 解 集 合 中选 出一 个参 数 取值 的过 程 。对 于第 k 1 2 (= , , ) 蚂蚁 , 一个 参 数 取 值 的 选 择 , 此 根 据 式 只 每 在
…
,
高 维非线 性 转换 。 P网络 是 神经 网络 模 型 中理 论依 B 据较 完善 的神经 网络 之一 。 P网络属 于 多层前 传 网 B 络, 包含 输入 层 、 出层 和 若 干 隐含层 。隐含 层 数 目 输 及各 层 神经元 数 可 根据 具 体情 况 设定 。各神 经元 的 激励 函数 通常 采 用 Sg i 函数 。B i d型 mo P网络 各层 权 值 和 阈值 的调 整采 用蚁 群 优化算 法 。
蚁群算法优化BP神经网络在主汽温控制中的应用

量 干扰量 ; r 为 给定值 ; 为 主汽温 温度 。
2 控 制算 法的 实现 2 . 1 A C O( A n t C o l o n y O p t i m i z a t i o n ) 算 法基 本 原
理
可逼 近 任 意 函数 的 能力 对 P I D参 数 进 行 在 线 调
利用 B P神 经 网络 算 法 对 P I D参数进行在线调 整 , 从 而 实现 了 对 主 蒸 汽 温 度 的 动 态控 制 。仿 真 结 果 表 明: 该 系统在 控 制 品质 、 鲁棒 性 方 面 都 明 显优 于常 规 P I D控 制 系统 。
关 键 词 蚁 群 算 法 中 图分 类 号 B P神 经 网络 P I D 主 汽 温 文章 编 号 1 0 0 0 — 3 9 3 2 ( 2 0 1 3 ) O 7 - 0 8 3 4 - 0 4
常规 串级 P 得 满 意的控 制效果 , 笔者 采 用图 1 所示 的基 于 蚁群 算 法优 化 的 B P神 经 网络 P I D 串级 主 汽 温 控 制 方 案 。系 统 由 3个 部 分 主
成: 蚁群 算 法 对 神 经 网络 的初 始 权 值 进 行 优 化 ;
整, 并利用 蚁 群 算 法 的全 局 快 速 寻 优 能 力 对 B P 神经 网络 P I D 的 初 始 权 值 进 行 优 化 , 使得 B P 算法 搜索 点在训 练一 开始就 落在 问题 的最优解 区 域, 进而很 快找 到 目标 函数 的全局 最优解 。
1 控 制 系统 结 构
8 3 4
化
工
自 动 化
及 仪
表
第4 O卷
蚁群 算 法优 化 B P神 经 网络在 主 汽 温 控 制 中 的 应 用
基于蚁群优化算法的神经网络训练的研究

"(.")%"" &8
#
"")%"" &
#
%A &
#"/%"" &
#
/"&"#
步骤 D
当所有在每步中完成元素的选择之
自动化与仪表 !""#$%& 万方数据
!!
专题研究 后 !从所有集合的每一元素的信息量中减去 ! * 步骤 ! 对一只蚂蚁 ! 从所有集合中完成元素
" 结语
本文在 345 算法原理及框架的基础上 ! 尝试将 蚁群优化算法引入到神经网络的训练中! 提出了
!" 万方数据
!"#$%&’($) * +),’-"./)’0’($)
1223!4"
专题研究
"&4 (
! "#$ 算法的原理及实现的框架
生物学家发现自然界中蚂蚁在觅食过程中一 些显著的特征 ! 蚂蚁在觅食过程中能分泌一种称之 为信息素 "!!"#$%$&" # 的物质 $ 以此来标识路线 $ 并 能 利 用 信 息 素 的 轨 迹 %"#’() & 作 为 媒 介 与 其 他 蚂 蚁 进行信息沟通 ’ 一条路经上留下的信息素轨迹的多 少与通过这条路经的蚂蚁数成正比 $ 当通过的蚂蚁 数 越 多 $则 留 下 的 信 息 素 轨 迹 就 越 多 $从 而 导 致 后 来蚂蚁选择该路经的概率提高 ’ 但是 $ 蚂蚁移动过 程中释放的信息素会随时间的推移而逐渐减少 $ 在 某一规定的范围内能觉察出是否有其它蚂蚁经过 后留下的信息素轨迹 $ 蚂蚁会按照信息素轨迹多的 路径爬行 ’ 因此 $ 当有大量的蚂蚁进行这种觅食时 $ 就会表现出信息正反馈现象 $ 并指导蚂蚁最终搜索 到一条从蚁穴到食物源的最短路经 ’ 通过上述分析 可以看出 $ 蚂蚁觅食行为实际上是一种通过简单个 体的自组织行为所体现的群体行为 ’ *+, 算法的两 个重要特征 $ 其一是蚂蚁在群体觅食过程中所体现 出 来 的 正 反 馈 过 程 $在 这 个 过 程 中 $通 过 反 馈 机 制 的调节 $ 可以对系统的较优解起到一个自增强的作 用 $ 从而使问题的解向着全局最优的方向进行 $ 并 能获得全局的相对最优解 ’ 另一特征是分布式并行 计算能力 $ 算法可以在全局的多点同时进行解的搜 索 $ 从而避免了陷入局部最优解的可能 ’ 结合文献
蚁群优化神经网络

二、function[R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alp ha,Beta,Rho,Q)%%========================================================== =====%% ACATSP.m%% Ant Colony Algorithm for Traveling Salesman Problem%%-------------------------------------------------------------------------%% 主要符号说明%% C n个城市的坐标,n×2的矩阵%% NC_max 最大迭代次数%% m 蚂蚁个数%% Alpha 表征信息素重要程度的参数%% Beta 表征启发式因子重要程度的参数%% Rho 信息素蒸发系数%% Q 信息素增加强度系数%% R_best 各代最佳路线%% L_best 各代最佳路线的长度%%========================================================== ======C=[1304,2312;3639,1315;4177,2244;3712,1399;3488,1535;3326,1556;3238 1229;4196 1004;4312 790;4386 570;3007 1970;2562 1756;2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2367;3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;2370 2975];m=31;Alpha=1;Beta=5;Rho=.1;NC_max=30;Q=100;%%第一步:变量初始化n=size(C,1);%*表示问题的规模(城市个数)D=zeros(n,n);%D表示完全图的赋权邻接矩阵for i=1:nfor j=1:nif i~=jD(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;elseD(i,j)=eps;endD(j,i)=D(i,j);endendEta=1./D;%Eta为启发因子,这里设为距离的倒数Tau=ones(n,n);%Tau为信息素矩阵Tabu=zeros(m,n);%存储并记录路径的生成NC=1;%迭代计数器R_best=zeros(NC_max,n);%各代最佳路线L_best=inf.*ones(NC_max,1);%各代最佳路线的长度L_ave=zeros(NC_max,1);%各代路线的平均长度while NC<=NC_max %停止条件之一:达到最大迭代次数%%第二步:将m只蚂蚁放到n个城市上Randpos=[];for i=1:(ceil(m/n)) % ceil为朝正无穷方向舍入%Randpos=[Randpos,randperm(n)];endTabu(:,1)=(Randpos(1,1:m))';% n个城市,编号为1---nfor循环的次数是蚂蚁重复城市的次数,比如5个蚂蚁放到4个城市,需要重复两遍才能放完蚂蚁,每次循环产生n个1---n的随机数,相当于随机n个城市,产生城市序列循环结束Tabu一句表示将m个蚂蚁随机,每个蚂蚁放到前面产生的城市序列中,每个蚂蚁一个城市,需要m个,所以提取前面1:m个序列'表示转置,没有多大用处,可能参与后面的计算方便。
基于蚁群优化BP神经网络模型的煤灰熔点预测方法[发明专利]
![基于蚁群优化BP神经网络模型的煤灰熔点预测方法[发明专利]](https://img.taocdn.com/s3/m/8ba66d99d0f34693daef5ef7ba0d4a7302766c2d.png)
[19]中华人民共和国国家知识产权局[12]发明专利申请公布说明书[11]公开号CN 101029892A[43]公开日2007年9月5日[21]申请号200710067875.3[22]申请日2007.03.30[21]申请号200710067875.3[71]申请人浙江大学地址310027浙江省杭州市浙大路38号[72]发明人刘彦鹏 安庆敏 吴明光[74]专利代理机构杭州求是专利事务所有限公司代理人张法高[51]Int.CI.G01N 33/22 (2006.01)G01N 25/04 (2006.01)G06F 17/00 (2006.01)权利要求书 1 页 说明书 9 页 附图 4 页[54]发明名称基于蚁群优化BP神经网络模型的煤灰熔点预测方法[57]摘要本发明公开了一种基于蚁群优化BP神经网络模型的煤灰熔点预测方法。
它将蚁群优化算法与BP神经网络算法相融合共同完成神经网络训练,以提高网络模型的训练精度和预报精度;并将该网络模型应用于煤灰熔点的预测,取得了良好的预测精度。
本发明的优点:1)利用蚁群优化算法具有全局搜索的特性,对网络权值进行整体寻优,克服BP算法容易陷入局部最优的不足;2)BP算法以蚁群优化算法提供的较优权值为初值,利用其强大的非线性映射能力对网络权值作进一步的优化;3)基于煤灰的化学组成成分,建立煤灰熔点的蚁群优化BP神经网络模型,该网络模型应用于煤灰熔点的预测,验证了本发明煤灰熔点预测方法的有效性。
200710067875.3权 利 要 求 书第1/1页 1.一种基于蚁群优化BP神经网络模型的煤灰熔点预测方法,其特征在于采用蚁群觅食搜索最短路径的仿生方法,搜索煤灰熔点网络模型的网络权值;以蚁群优化算法提供的较优权值为初值,利用BP神经网络强大的非线性映射能力,对煤灰熔点网络模型的权值作进一步优化;基于煤灰化学组成成份建立相应的蚁群优化BP神经网络模型,并以该模型预测煤灰熔点。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
二、function[R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alp ha,Beta,Rho,Q)%%========================================================== =====%% ACATSP.m%% Ant Colony Algorithm for Traveling Salesman Problem%%-------------------------------------------------------------------------%% 主要符号说明%% C n个城市的坐标,n×2的矩阵%% NC_max 最大迭代次数%% m 蚂蚁个数%% Alpha 表征信息素重要程度的参数%% Beta 表征启发式因子重要程度的参数%% Rho 信息素蒸发系数%% Q 信息素增加强度系数%% R_best 各代最佳路线%% L_best 各代最佳路线的长度%%========================================================== ======C=[1304,2312;3639,1315;4177,2244;3712,1399;3488,1535;3326,1556;3238 1229;4196 1004;4312 790;4386 570;3007 1970;2562 1756;2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2367;3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;2370 2975];m=31;Alpha=1;Beta=5;Rho=.1;NC_max=30;Q=100;%%第一步:变量初始化n=size(C,1);%*表示问题的规模(城市个数)D=zeros(n,n);%D表示完全图的赋权邻接矩阵for i=1:nfor j=1:nif i~=jD(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;elseD(i,j)=eps;endD(j,i)=D(i,j);endendEta=1./D;%Eta为启发因子,这里设为距离的倒数Tau=ones(n,n);%Tau为信息素矩阵Tabu=zeros(m,n);%存储并记录路径的生成NC=1;%迭代计数器R_best=zeros(NC_max,n);%各代最佳路线L_best=inf.*ones(NC_max,1);%各代最佳路线的长度L_ave=zeros(NC_max,1);%各代路线的平均长度while NC<=NC_max %停止条件之一:达到最大迭代次数%%第二步:将m只蚂蚁放到n个城市上Randpos=[];for i=1:(ceil(m/n)) % ceil为朝正无穷方向舍入%Randpos=[Randpos,randperm(n)];endTabu(:,1)=(Randpos(1,1:m))';% n个城市,编号为1---nfor循环的次数是蚂蚁重复城市的次数,比如5个蚂蚁放到4个城市,需要重复两遍才能放完蚂蚁,每次循环产生n个1---n的随机数,相当于随机n个城市,产生城市序列循环结束Tabu一句表示将m个蚂蚁随机,每个蚂蚁放到前面产生的城市序列中,每个蚂蚁一个城市,需要m个,所以提取前面1:m个序列'表示转置,没有多大用处,可能参与后面的计算方便。
我感觉如果m,n很大的话,你这样做会产生很大的浪费,计算很多的随机数,这样的话更好,一句就得:(如果变量Randpos后面没有用到的话,如果用到了,还要用你的程序)Tabu=ceil(n*rand(1,m))'%%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游for j=2:nfor i=1:mvisited=Tabu(i,1:(j-1)); %已访问的城市J=zeros(1,(n-j+1)); %待访问的城市P=J; %待访问城市的选择概率分布Jc=1;for k=1:nif length(find(visited==k))==0J(Jc)=k;Jc=Jc+1;endend%下面计算待选城市的概率分布for k=1:length(J)P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);endP=P/(sum(P));%按概率原则选取下一个城市Pcum=cumsum(P);Select=find(Pcum>=rand);to_visit=J(Select(1));Tabu(i,j)=to_visit;endendif NC>=2Tabu(1,:)=R_best(NC-1,:);end%%第四步:记录本次迭代最佳路线L=zeros(m,1);for i=1:mR=Tabu(i,:);for j=1:(n-1)L(i)=L(i)+D(R(j),R(j+1));endL(i)=L(i)+D(R(1),R(n));endL_best(NC)=min(L);pos=find(L==L_best(NC));R_best(NC,:)=Tabu(pos(1),:);L_ave(NC)=mean(L);NC=NC+1%%第五步:更新信息素Delta_Tau=zeros(n,n);for i=1:mfor j=1:(n-1)Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i); endDelta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);endTau=(1-Rho).*Tau+Delta_Tau;%%第六步:禁忌表清零Tabu=zeros(m,n);end%%第七步:输出结果Pos=find(L_best==min(L_best));Shortest_Route=R_best(Pos(1),:);Shortest_Length=L_best(Pos(1));subplot(1,2,1)DrawRoute(C,Shortest_Route)subplot(1,2,2)plot(L_best)hold onplot(L_ave,'y')title('平均距离与最短距离')function DrawRoute(C,R)%%========================================================== ==========%% DrawRoute.m%% 画路线图的子函数%%--------------------------------------------------------------------%% C Coordinate 节点坐标,由一个N×2的矩阵存储%% R Route 路线%%========================================================== ==========N=length(R)scatter(C(:,1),C(:,2))hold onplot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)])hold onfor ii=2:Nplot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)])hold onendtitle('旅行商问题优化结果')%以下是解放军信息工程大学一个老师编的matlab程序,请尊重原作者劳动,引用时请注明出处。
function[R_best,L_best,L_ave,Shortest_Route,Shortest_Length]=ACATSP(C,NC_max,m,Alp ha,Beta,Rho,Q)%%-------------------------------------------------------------------------%% 主要符号说明%% C n个城市的坐标,n×2的矩阵%% NC_max 最大迭代次数%% m 蚂蚁个数%% Alpha 表征信息素重要程度的参数%% Beta 表征启发式因子重要程度的参数%% Rho 信息素蒸发系数%% Q 信息素增加强度系数%% R_best 各代最佳路线%% L_best 各代最佳路线的长度%%========================================================== ===============%%第一步:变量初始化n=size(C,1);%n表示问题的规模(城市个数)D=zeros(n,n);%D表示完全图的赋权邻接矩阵for i=1:nfor j=1:nif i~=jD(i,j)=((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2)^0.5;elseD(i,j)=eps; %i=j时不计算,应该为0,但后面的启发因子要取倒数,用eps (浮点相对精度)表示endD(j,i)=D(i,j); %对称矩阵endendEta=1./D; %Eta为启发因子,这里设为距离的倒数Tau=ones(n,n); %Tau为信息素矩阵Tabu=zeros(m,n); %存储并记录路径的生成NC=1; %迭代计数器,记录迭代次数R_best=zeros(NC_max,n); %各代最佳路线L_best=inf.*ones(NC_max,1); %各代最佳路线的长度L_ave=zeros(NC_max,1); %各代路线的平均长度while NC <=NC_max %停止条件之一:达到最大迭代次数,停止%%第二步:将m只蚂蚁放到n个城市上Randpos=[]; %随即存取for i=1:(ceil(m/n))Randpos=[Randpos,randperm(n)];endTabu(:,1)=(Randpos(1,1:m))'; %此句不太理解?%%第三步:m只蚂蚁按概率函数选择下一座城市,完成各自的周游for j=2:n %所在城市不计算for i=1:mvisited=Tabu(i,1:(j-1)); %记录已访问的城市,避免重复访问J=zeros(1,(n-j+1)); %待访问的城市P=J; %待访问城市的选择概率分布Jc=1;for k=1:nif length(find(visited==k))==0 %开始时置0J(Jc)=k;Jc=Jc+1; %访问的城市个数自加1endend%下面计算待选城市的概率分布for k=1:length(J)P(k)=(Tau(visited(end),J(k))^Alpha)*(Eta(visited(end),J(k))^Beta);endP=P/(sum(P));%按概率原则选取下一个城市Pcum=cumsum(P); %cumsum,元素累加即求和Select=find(Pcum>=rand); %若计算的概率大于原来的就选择这条路线to_visit=J(Select(1));Tabu(i,j)=to_visit;endendif NC>=2Tabu(1,:)=R_best(NC-1,:);end%%第四步:记录本次迭代最佳路线L=zeros(m,1); %开始距离为0,m*1的列向量for i=1:mR=Tabu(i,:);for j=1:(n-1)L(i)=L(i)+D(R(j),R(j+1)); %原距离加上第j个城市到第j+1个城市的距离endL(i)=L(i)+D(R(1),R(n)); %一轮下来后走过的距离endL_best(NC)=min(L); %最佳距离取最小pos=find(L==L_best(NC));R_best(NC,:)=Tabu(pos(1),:); %此轮迭代后的最佳路线L_ave(NC)=mean(L); %此轮迭代后的平均距离NC=NC+1 %迭代继续%%第五步:更新信息素Delta_Tau=zeros(n,n); %开始时信息素为n*n的0矩阵for i=1:mfor j=1:(n-1)Delta_Tau(Tabu(i,j),Tabu(i,j+1))=Delta_Tau(Tabu(i,j),Tabu(i,j+1))+Q/L(i); %此次循环在路径(i,j)上的信息素增量endDelta_Tau(Tabu(i,n),Tabu(i,1))=Delta_Tau(Tabu(i,n),Tabu(i,1))+Q/L(i);%此次循环在整个路径上的信息素增量endTau=(1-Rho).*Tau+Delta_Tau; %考虑信息素挥发,更新后的信息素%%第六步:禁忌表清零Tabu=zeros(m,n); %%直到最大迭代次数end%%第七步:输出结果Pos=find(L_best==min(L_best)); %找到最佳路径(非0为真)Shortest_Route=R_best(Pos(1),:) %最大迭代次数后最佳路径Shortest_Length=L_best(Pos(1)) %最大迭代次数后最短距离subplot(1,2,1) %绘制第一个子图形DrawRoute(C,Shortest_Route) %画路线图的子函数subplot(1,2,2) %绘制第二个子图形plot(L_best)hold on %保持图形plot(L_ave,'r')title('平均距离和最短距离') %标题%%function DrawRoute(C,R)%%========================================================== ===============%% DrawRoute.m%% 画路线图的子函数%%-------------------------------------------------------------------------%% C Coordinate 节点坐标,由一个N×2的矩阵存储%% R Route 路线%%========================================================== ===============%N=length(R);%scatter(C(:,1),C(:,2));%hold on%plot([C(R(1),1),C(R(N),1)],[C(R(1),2),C(R(N),2)],'g')%hold on%for ii=2:N%plot([C(R(ii-1),1),C(R(ii),1)],[C(R(ii-1),2),C(R(ii),2)],'g')%hold on%endtitle('旅行商问题优化结果')蚁群算法求解TSP问题的matlab程序%蚁群算法求解TSP问题的matlab程序clear allclose allclc%初始化蚁群m=31;%蚁群中蚂蚁的数量,当m接近或等于城市个数n时,本算法可以在最少的迭代次数内找到最优解C=[1304 2312;3639 1315;4177 2244;3712 1399;3488 1535;3326 1556;3238 1229;4196 1004;4312 790;4386 570;3007 1970;2562 1756;2788 1491;2381 1676;1332 695;3715 1678;3918 2179;4061 2370;3780 2212;3676 2578;4029 2838;4263 2931;3429 1908;3507 2367;3394 2643;3439 3201;2935 3240;3140 3550;2545 2357;2778 2826;2370 2975];%城市的坐标矩阵Nc_max=200;%最大循环次数,即算法迭代的次数,亦即蚂蚁出动的拨数(每拨蚂蚁的数量当然都是m)alpha=1;%蚂蚁在运动过程中所积累信息(即信息素)在蚂蚁选择路径时的相对重要程度,alpha过大时,算法迭代到一定代数后将出现停滞现象beta=5;%启发式因子在蚂蚁选择路径时的相对重要程度rho=0.5;%0<rho<1,表示路径上信息素的衰减系数(亦称挥发系数、蒸发系数),1-rho表示信息素的持久性系数Q=100;%蚂蚁释放的信息素量,对本算法的性能影响不大%变量初始化n=size(C,1);%表示TSP问题的规模,亦即城市的数量D=ones(n,n);%表示城市完全地图的赋权邻接矩阵,记录城市之间的距离for i=1:nfor j=1:nif i<jD(i,j)=sqrt((C(i,1)-C(j,1))^2+(C(i,2)-C(j,2))^2);endD(j,i)=D(i,j);endendeta=1./D;%启发式因子,这里设为城市之间距离的倒数pheromone=ones(n,n);%信息素矩阵,这里假设任何两个城市之间路径上的初始信息素都为1tabu_list=zeros(m,n);%禁忌表,记录蚂蚁已经走过的城市,蚂蚁在本次循环中不能再经过这些城市。