案例18:基于鱼群算法的函数寻优算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【注】原帖网址:/thread-9222-1-1.html My Email:hehaiwanghui@
案例18:基于鱼群算法的函数寻优算法
*
**********************************************************************************
论坛申明:
1 案例为原创案例,论坛拥有帖子的版权,转载请注明出处(MATLABSKY论坛,《MATLAB智能算法30个案例分析》
2 案例内容为书籍原创内容,内容为案例的提纲和主要内容。
3 作者长期驻扎在板块,对读者和会员问题有问必答。
4 案例配套有教学视频和完整的MATLAB程序,MATLAB程序在购买书籍后可以自由下载,教学视频需要另外购买。
MATLAB书籍预定方法和优惠服务:/thread-9258-1-1.html
点击这里,预览该案例程序:
/znsf/view/s18/example1.html
/znsf/view/s18/example2.html
已经预定的朋友点此下载程序源代码:/thread-9395-1-1.html
*
*********************************************************************************
*
1、人工鱼群算法原理
人工鱼群算法是李晓磊等人于2002年提出的一类基于动物行为的群体智能优化算法.该算法是通过模拟鱼类的觅食、聚群、追尾、随机等行为在搜索域中进行寻优,是集群体智能思想的一个具体应用.
生物的视觉是极其复杂的,它能快速感知大量的空间事物,这对于任何仪器和程序都是难以与之相比的,为了实施的简便和有效,在鱼群模式中应用了如下的方法来实现虚拟人工鱼的视觉:
如图5.1所示,一虚拟人工鱼实体的当前位置为,它的视野范围为,位置
为其在某时刻的视点所在的位置,如果该位置的食物浓度高于当前位置,则考虑向该位置方向前进一步,即到达位置;如果位置不比当前位置食物浓度更高,则继续巡视视野内的其他位置。巡视的次数越多,则对视野内的状态了解更全面,从而对周围的环境有一个全方面立体的认知,这有助于做出相应的判断和决策,当然,对于状态多或无限状态的环境也不必全部遍历,允许一定的不确定性对于摆脱局部最优,从而寻找全局最优是有帮助的。
【注:帖子中的公式字符没显示】
图5.1 人工鱼的视野和移动步长
其中,位置,位置,则该过程可以表示如下:
式中,函数为产生范围(-1,1)之间的随机数, 为移动步长。由于环境中同伴的数目是有限的,因此在视野中感知同伴的位置,并相应的调整自身位置的方法与上式类似。
2、案例目录:
第五章人工鱼群算法 1
—ARTIFICIAL FISH SCHOOL ALGORITHM(AFSA) 1
5.1 案例背景 1
5.1.1人工鱼群算法原理 1
5.1.2人工鱼群算法的主要行为 2
5.1.3 问题的解决 2
5.1.4 案例分析 2
5.2 模型建立 4
5.2.1 变量及函数定义 4
5.2.2 算法流程 5
5.2.3 人工鱼群算法实现 7
5.2.3.1 鱼群初始化 7
5.2.3.2 觅食行为 7
5.2.3.4 聚群行为 7
5.2.3.5 追**为 8
5.2.3.6 随机行为 9
5.3 编程实现 9
5.3.1 鱼群初始化函数 9
5.3.2 觅食行为 10
5.3.3 聚群行为 11
5.3.4 追**为 12
5.3.5 食物浓度函数 13
5.3.6 案例1 13
5.3.7 案例2 16
5.4 总结 19
5.4.1 人工鱼群算法优点 19
5.4.2算法改进的几个方向 19
5.5 参考文献 20
3、案例实例及结果:
案例1:
一元函数的优化实例:,该函数的图形如图5.2所示:
图 5.2 一元函数图像
结果:
鱼群算法的运行结果如下:
图5.8 50次鱼群算法迭代结果
图5.9 最优解的变化C
ommand Window上的运行结果:
最优解X:1.85060
最优解Y:3.85027
Elapsed time is 1.640857 seconds.
案例2
二元函数的优化实例:
该函数的图形如图5.3所示:
图 5.3 二元函数图像
结果:
鱼群算法的运行结果如下:
图5.10 50次鱼群算法迭代结果
图5.11 最优解的变化
Command Window上的运行结果:最优解X:-0.002690.00018
最优解Y:1.00000
Elapsed time is 3.094503 seconds.
4、主程序
案例1:
1.clc
2.clear all
3.close all
4.tic
5.figure(1);hold on
6.ezplot('x*sin(10*pi*x)+2',[-1,2]);
7.%% 参数设置
8.fishnum=50; %生成50只人工鱼
9.MAXGEN=50; %最多迭代次数
10.try_number=100;%最多试探次数
11.visual=1; %感知距离
12.delta=0.618; %拥挤度因子
13.step=0.1; %步长
14.%% 初始化鱼群
15.lb_ub=[-1,2,1];
16.X=AF_init(fishnum,lb_ub);
17.LBUB=[];
18.for i=1:size(lb_ub,1)
19.LBUB=[LBUB;repmat(lb_ub(i,1:2),lb_ub(i,3),1)];
20.end
21.gen=1;
22.BestY=-1*ones(1,MAXGEN); %每步中最优的函数值
23.BestX=-1*ones(1,MAXGEN); %每步中最优的自变量
24.besty=-100; %最优函数值
25.Y=AF_foodconsistence(X);
26.while gen<=MAXGEN
27.fprintf(1,'%d\n',gen)
28.for i=1:fishnum
29.[Xi1,Yi1]=AF_swarm(X,i,visual,step,delta,try_number,LBUB,Y); %聚群行为
30.[Xi2,Yi2]=AF_follow(X,i,visual,step,delta,try_number,LBUB,Y); %追**为
31.if Yi1>Yi2
32.X(:,i)=Xi1;
33.Y(1,i)=Yi1;
34.else
35.X(:,i)=Xi2;
36.Y(1,i)=Yi2;