Matlab基于人工鱼群算法求解TSP问题
一、 人工鱼的结构模型
人工鱼是真实鱼抽象化、虚拟化的一个实体,其中封装了自身数据和一系列行为,可以接受环境的刺激信息,做出相应的活动。其所在的环境由问题的解空间和其他人工鱼的状态,它在下一时刻的行为取决于自身的状态和环境的状态,并且它还通过自身的活动来影响环境,进而影响其他人工鱼的活动。
二、 人工鱼群算法的寻优原理
人工鱼群算法在寻优的过程中,可能会集结在几个局部最优解的周围,使人工鱼跳出局部最优解,实现全局寻优的因素主要有:
- 觅食行为中重复次数较少时,为人工鱼提供了随机移动的机会,从而可能跳出局部最优解;
- 随机步长使得人工鱼在前往局部最优解的途中,有可能转向全局最优解;
- 拥挤度因子 δδ 限制了聚群的规模,使得人工鱼能够更广泛的寻优;
- 聚群行为能够促使少出陷于局部最优解的人工鱼趋向全局最优解的人工鱼方向聚集,从而逃出局部最优解;
- 追尾行为加快了人工鱼向更优状态游动。
三、 人工鱼群算法实现的步骤
- 初始化设置,包括种群规模N、每条人工鱼的初始位置、人工鱼的视野Visual、步长step、拥挤度因子δ、重复次数Trynumber;
- 计算初始鱼群各个体的适应值,取最优人工鱼状态及其值赋予给公告牌;
- 对每个个体进行评价,对其要执行的行为进行选择,包括觅食Pray、聚群Swarm、追尾Follow和评价行为bulletin;
- 执行人工鱼的行为,更新自己,生成新鱼群;
- 评价所有个体。若某个体优于公告牌,则将公告牌更新为该个体;
- 当公告牌上最优解达到满意误差界内或者达到迭代次数上限时算法结束,否则转步骤3。
四、人工鱼群算法实现流程图
五、 各种参数对收敛性的影响
人工鱼群算法中,觅食行为奠定了算法收敛的基础;聚群行为增强了算法收敛的稳定性;追尾行为增强了算法收敛的快速性和全局性;其评价行为也对算法收敛的速度和稳定性提供了保障。
人工鱼群算法有5个基本参数:群规模N、人工鱼的视野Visual、步长Step、拥挤度因子δ、重复次数Trynumber。
1. 视野Visual:由于视野对算法中个行为都有较大影响,因此,它的变化对收敛性能影响也比较复杂。当视野范围较小时,人工鱼的觅食行为和随机行为比较突出;视野范围较大时,人工鱼的追尾行为和聚群行为将变得比较突出,相应的算法的复杂度也会有所上升。总的来说:视野越大,越容易使人工鱼发现全局最优解并收敛。
2. 步长Step:对于固定步长,随着步长的增加,收敛的速度得到了一定的加速,但在超过一定的范围后,有使得收敛速度减缓,步长过大时会出现震荡现象而大大影响收敛速度。采用随机步长的方式在一定程度上防止了震荡现象的发生,并使得该参数的敏感度大大降低了,但最快的收敛速度还是最优固定步长的收敛速度,所以,对于特定的优化问题,我们可以考虑采用合适的固定步长或者变尺度方法来提高收敛速度。
3. 群规模N:人工鱼的数目越多,跳出局部最优解的能力越强,同时,收敛的速度也越快。当然,付出的代价就是算法每次迭代的计算量也越大,因此,在使用过程中,满足稳定收敛的前提下,应当尽可能的减少个图数目。
4. 尝试次数Trynumber:尝试次数越多,人工鱼的觅食行为能力越强,收敛的效率也越高。在局部极值突出的情况下,应该适当的减少以增加人工鱼随机游动的概率,克服局部最优解。
5. 拥挤度因子δ:在求极大值问题中,δ=1/(αnmax),α∈(0,1]δ=1/(αnmax),α∈(0,1];在求极小值问题中,δ=αnmax,α∈(0,1]δ=αnmax,α∈(0,1]。其中α为极值接近水平, nmax为期望在该邻域内聚集的最大人工鱼数目。拥挤度因子与nf相结合,通过人工鱼是否执行追尾和聚群行为对优化结果产生影响。以极大值为例(极小值的情况正好与极大值相反),δ越大,表明允许的拥挤程度越小,人工鱼摆脱局部最优解的能力越强;但是收敛速度会有所减缓,这主要因为人工鱼在逼近最优解的同时,会因避免过分拥挤而随机走开或者受其他人工鱼的排斥作用,不能精确逼近极值点。可见,虽然δ的引入避免了人工鱼过度拥挤而陷入局部最优解,但是另一方面,该参数会使得位于极值点附件的人工鱼之间存在相互排斥的影响,而难以想极值点精确逼近。所以,对于某些局部极值不是很严重的具体问题,可以忽略拥挤的因素,从而在简化算法的同时也加快算法的收敛速度和提高结果的精确程度。
clear
clctic %开始计时[num_Citys,CityPosition]=ReadTSPFile('ulysses22.tsp'); %读取.tsp文件
%% 计算两两城市之间的距离
h=pdist(CityPosition);
D=squareform(h);
%% 初始化参数
FishNum=9; %生成10只人工鱼
Max_gen=200; %最多迭代次数
trynumber=500; %最多试探次数
Visual=16; %感知距离
deta=0.8; %拥挤度因子
%% 鱼群初始化,每一行表示一条鱼
initFish=AF_init(FishNum,num_Citys);BestX=zeros(Max_gen,num_Citys); %记录每次迭代过程中最优路径
BestY=zeros(Max_gen,1); %记录每次迭代过程中最优路径的距离
besty=inf; %最优总距离,初始化为无穷大
gen=1;
currX=initFish;
currY=AF_foodconsistence(currX,D);
while gen<=Max_genfor i=1:FishNum[Xinext,flag]= AF_movestrategy(currX,i,D,Visual,deta,trynumber);currX(i,:)=Xinext;endcurrY=AF_foodconsistence(currX,D);[Ymin,index]=min(currY);if Ymin<bestybesty=Ymin;bestx=currX(index,:);BestY(gen)=besty;BestX(gen,:)=bestx;elseBestY(gen)=BestY(gen-1);BestX(gen,:)=BestX(gen-1,:);enddisp(['第',num2str(gen),'次迭代,得出的最优值:',num2str(BestY(gen))]);gen=gen+1;end
%% 本程序用来使第i条人工鱼觅食,假如觅食成功,则flag 为1,X中为i鱼觅食后的状态,否则flag为0
%输入X: 鱼群集合
%输入i: 第i条人工鱼
%输入D: 距离矩阵
%输入trynumber: 最多试探次数
%输入Visual: 感知距离
%输出Xinext: 新找到的路径
%输出flag: 标记是否找到更好的路径,flag=0表示觅食失败,flag=1表示觅食成功
function [Xinext,flag]=AF_prey(X,i,D,trynumber,Visual)
Xinext=[];
Yi=PathLength(D,X(i,:)); %路径Xi的总距离
CityNum=length(X(i,:));
flag=0; %标记是否觅食到更好路径,flag=0表示没觅食到,flag=1表示觅食成功
for j=1:trynumberwhile(1)DJ=floor(rand*Visual)+1; %不相同的字段数if(DJ>0 && DJ<=Visual) %在视野范围内break;endendwhile(1)S(1)=floor(rand*CityNum)+1;if(S(1)>1 && S(1)<=CityNum) %在所有城市里break;endendp=1;while(p<DJ)t=floor(rand*CityNum)+1;if(t>1&&t<=CityNum && sum(S==t)==0)p=p+1;S(p)=t;endendXi=X(i,:);t=Xi(S(1));for k=1:DJ-1Xi(S(k))=Xi(S(k+1));end
三、运行结果
Matlab基于人工鱼群算法求解TSP问题相关推荐
- matlab实战系列之人工鱼群算法求解TSP问题原理解析(下篇源码解析)
从算法的名字中可以看出该算法是群体智能优化算法中的一种,人工鱼群算法通过模拟鱼群的觅食.聚群.追尾.随机等行为在搜索域中进行寻优. 人工鱼群算法有三个比较重要的概念:视野范围.k-距离邻域.多条鱼的中 ...
- 改进的人工鱼群算法求解TSP问题的研究(Matlab代码实现)
- 【AFSA TSP】基于matlab人工鱼群算法求解旅行商问题【含Matlab源码 422期】
一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[TSP]基于matlab人工鱼群算法求解旅行商问题[含Matlab源码 422期] 点击上面蓝色字体,直接付费下载,即可. 获取代码方式2 ...
- 基于人工鱼群算法的路径优化,鱼群算法的原理
目录 摘要 参数优化的方法 鱼群算法的原理 基于人工鱼群算法的参数优化 基本参数 代码 效果图 结果分析 展望 摘要 详细介绍了人工鱼群算法的原理,并MATLAB编程实现基于人工鱼群算法的参数优化,对 ...
- 人工蜂群算法求解TSP问题
人工蜂群算法求解TSP问题 [标签] ABC TSP Matlab data:2018-10-19 author:怡宝2号 [总起]利用人工蜂群算法(Artificial Bee Colony Alg ...
- 人工蜂群算法求解TSP旅行商问题C++(2020.11.13)
ABC算法求解TSP问题的C++实现 1.输入数据文件:bayg29.tsp 2.头文件 3.所需的类 3.1 城市类City 3.2 包含城市的地图类Graph 3.3 蜜蜂类Bee 3.4 人工蜂 ...
- 【机器学习】基于人工鱼群算法的多元非线性函数寻优
基于人工鱼群算法的多元非线性函数寻优
- 【建模算法】基于蚁群算法求解TSP问题(Python实现)
[建模算法]基于蚁群算法(ACA)求解TSP问题(Python实现) TSP (traveling salesman problem,旅行商问题)是典型的NP完全问题,即其最坏情况下的时间复杂度随着问 ...
- 【AFSA TSP】基于matlab改进的人工鱼群算法求解旅行商问题【含Matlab源码 1479期】
⛄一. TSP简介 旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须 ...
最新文章
- 如何检测图像中的条纹_图像增强模块在检测中的应用实例
- android jni 回调 java_android linux线程通过JNI回调java函数 | 学步园
- Kettle使用_18 分组组件计算百分位数
- 很好的Android论坛
- 基于.NetCore3.1搭建项目系列 —— 使用Swagger做Api文档 (下篇)
- matlab 判断对象的数据类型isa()
- java Spring Boot中使用Swagger2构建API文档
- 大数据从哪里来?| 技术头条
- 用C语言实现面向对象的开发
- mysql 多端口备份_mysql数据库迁移、多端口运行、innobackupex备份
- Springboot毕设项目高校食堂饭卡管理824ct(java+VUE+Mybatis+Maven+Mysql)
- java万年历的两种实现方式
- 如何掌握电烙铁焊接技术
- leetcode第21天格雷编码
- HDU 6441 Find Integer(费马大定理)
- 二阶常系数齐次线性微分方程的通解
- 【有奖众测】快服务开发者俱乐部第一期来咯!
- 苹果5s参数_这次,苹果自己革了自己的命---iPhone12发布会全纪实
- 浮华,原来青春是一场梦
- mysql索引对查询效率的影响