完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
1.随机初始果蝇群体位置。
Init X_axis Init Y_axis 2.附与果蝇个体利用嗅觉搜寻食物之随机方向与距离。 Xi= X_axis + Random Value Yi= Y_axis + Random Value 3.由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算 味道浓度判定值(S),此值为距离之倒数。 Disti=√(X_i^2+Y_i^2 );Si=1/Disti 4.味道浓度判定值(S)代入味道浓度判定函数(或称为 Fitness function) 以求出该果蝇个体位置的味道浓度(Smelli)。 Smelli = Function(Si) 5.找出此果蝇群体的中味道浓度最高的果蝇(求极大值) [bestSmell bestIndex] = max(Smell) 6.保留最佳味道浓度值与 x、y 坐标,此时果蝇群体利用视觉往该位 置飞去。 Smellbest = bestSmell X_axis = X(bestIndex) Y_axis = Y(bestIndex) 最后:进入迭代寻优,重复执行步骤 2-5,并判断味道浓度是否优于前一 迭代味道浓度,若是则执行步骤 6。 寻找极小值: %清空运行环境 clc clear %随机初始果蝇群体位置 X_axis=10*rand(); Y_axis=10*rand(); maxgen=100; %迭代次数 sizepop=20; %种群规模 %果蝇寻优开始 for i=1:sizepop %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离 X(i)=X_axis+2*rand()-1; Y(i)=Y_axis+2*rand()-1; %由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算味道浓度判定值(S),此值为距离之倒数 D(i)=(X(i)^2+Y(i)^2)^0.5; S(i)=1/D(i); %味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置的味道浓度Smell Smell(i)=10+S(i)^2; end %找出此果蝇群体的中味道浓度最低的果蝇(求极小值)。 [bestSmell bestindex]=min(Smell); %保留最佳味道浓度值与x、y 坐标,此时果蝇群体利用视觉往该位置飞去。 X_axis=X(bestindex); Y_axis=Y(bestindex); Smellbest=bestSmell; %果蝇迭代寻优开始 for g=1:maxgen %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离。 for i=1:sizepop X(i)=X_axis+2*rand()-1; Y(i)=Y_axis+2*rand()-1; %由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算味道浓度判定值(S),此值为距离之倒数。 D(i)=(X(i)^2+Y(i)^2)^0.5; S(i)=1/D(i); %判定值(S)代入判定函数以求出该果蝇位置的味道浓度(Smelli)。 Smell(i)= 10+S(i)^2; end %找出此果蝇群体的中味道浓度最低的果蝇(求极小值)。 [bestSmell bestindex]=min(Smell); %判断味道浓度是否优于前一迭代味道浓度,若是则保留最佳味道浓度值与x、y 坐标,此时果蝇群体利用视觉往该位置飞去。 if bestSmell Y_axis=Y(bestindex); Smellbest=bestSmell; end %每代最优Smell值纪录到yy 数组中,并记录最优迭代坐标 yy(g)=Smellbest; Xbest(g)=X_axis; Ybest(g)=Y_axis; end %绘制迭代味到浓度与果蝇飞行路径趋势图 figure(1) plot(yy) title('Optimization process','fontsize',12) xlabel('Iteration Number','fontsize',12); ylabel('Smell','fontsize',12); figure(2) plot(Xbest,Ybest,'b.'); title('Fruit fly flying route','fontsize',14) xlabel('X-best','fontsize',12); ylabel('Y-best','fontsize',12); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 寻找极大值: % 清空运行环境 。 clc clear % 随机初始果蝇群体位置 。 X_axis=10*rand(); Y_axis=10*rand(); %设置参数 maxgen=100; %迭代次数 sizepop=100; %种群规模 %果蝇寻优开始 for i=1:sizepop %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离 X(i)=X_axis+2*rand()-1; Y(i)=Y_axis+2*rand()-1; %由于无法得知食物位置,因此先估计与原点之距离D,再计算味道浓度判定值(S),此值为距离之倒数 D(i)=((X(i)-1)^2+Y(i)^2)^0.5; S(i)=1/D(i); % 味道浓度判定值 (S) 代入味道浓度判定函数( ( 或称为 Fitness function)以求出 该果蝇个体位置的味道浓度 (Smelli) 。 Smell(i)=8-S(i)^2+2*S(i); end %找出此果蝇群体的中味道浓度最高的果蝇(求极大值) [bestSmell bestindex]=max(Smell); %保留最佳味道浓度值与 x x 、y y 坐标 , 此时果蝇群体利用视觉往该位置飞去 。 X_axis=X(bestindex); Y_axis=Y(bestindex); Smellbest=bestSmell; %果蝇迭代寻优开始 for g=1:maxgen %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离 for i=1:sizepop X(i)=X_axis+2*rand()-1; Y(i)=Y_axis+2*rand()-1; %*** 由于无法得知食物位置, 因此先估计与原点之距离 (Dist),再计算味道浓度判定值 (S),此值为距离之倒数 D(i)=(X(i)^2+Y(i)^2)^0.5; S(i)=1/D(i); %判定值 (S) 代入判定函数以求出该果蝇位置的味道浓度 (Smelli) 。 Smell(i)=8-S(i)^2+2*S(i); end %找出此果蝇群体的中味道浓度最高的果蝇( 求极大值) [bestSmell bestindex]=max(Smell); %判断味道浓度是否优于前一迭代味道浓度, 若是则保留最佳味道浓度值与 x x 、y y 坐标 , 此时果蝇群体利用视觉往该位置飞去 。 if bestSmell>Smellbest X_axis=X(bestindex); Y_axis=Y(bestindex); Smellbest=bestSmell; end %每代最优 smell值纪录到数组中,并记录最优迭代坐标 yy(g)=Smellbest; Xbest(g)=X_axis; Ybest(g)=Y_axis; end %绘制迭代味到浓度与果蝇飞行路径趋势图 figure(1) plot(yy) title('Optimization process','fontsize',12) xlabel('Iteration Number','fontsize',12); ylabel('Smell','fontsize',12); figure(2) plot(Xbest,Ybest,'b.'); title('Fruit fly flying route','fontsize',14) xlabel('X-best','fontsize',12); ylabel('Y-best','fontsize',12); 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 下面给出一个难以求出极小值的函数: %清空 clc clear %随机初始果蝇群体位置 X_axis=10*rand(); Y_axis=10*rand(); %设置参数 maxgen=100; %迭代次数 sizepop=20; %种群规模 kkk=0; %种群寻优开始,利用嗅觉寻找食物 for i=1:sizepop for j=1:2 %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离 X(i,j)=X_axis+2*rand()-1; Y(i,j)=Y_axis+2*rand()-1; %由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算味道浓度判定值(S),此值为距离之倒数 D(i,j)=(X(i,j)^2+Y(i,j)^2)^0.5; S(i,j)=1/D(i,j); end %味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置的味道浓度 Smell(i)=0.5+(sin((S(i,1)^2+S(i,2)^2)^0.5)^2-0.5)./(1+0.001*(S(i,1)^2+S(i,2)^2))^2; end %找出此果蝇群体中味道浓度最低的果蝇(求极小值) [bestSmell bestindex]=min(Smell); %保留最佳味道浓度值与x,y坐标,此时果蝇群体利用视觉往该位置飞去 X_axis=X(bestindex); Y_axis=Y(bestindex); Smellbest=bestSmell; %果蝇迭代寻优开始 for g=1:maxgen %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离 for i=1:sizepop %附与果蝇个体利用嗅觉搜寻食物之随机方向与距离 for j=1:2 X(i,j)=X_axis+2*rand()-1; Y(i,j)=Y_axis+2*rand()-1; %由于无法得知食物位置,因此先估计与原点之距离(Dist),再计算味道浓度判定值(S),此值为距离之倒数 D(i,j)=(X(i,j)^2+Y(i,j)^2)^0.5; S(i,j)=1/D(i,j); end %味道浓度判定值(S)代入味道浓度判定函数(或称为Fitness function)以求出该果蝇个体位置的味道浓度 Smell(i)=0.5+(sin((S(i,1)^2+S(i,2)^2)^0.5)^2-0.5)./(1+0.001*(S(i,1)^2+S(i,2)^2))^2; end %找出此果蝇群体中味道浓度最低的果蝇(求极小值) [bestSmell bestindex]=min(Smell); %判断味道浓度是否优于前一迭代味道浓度,若是则保留最佳味道浓度值与x,y坐标,此时果蝇群体利用视觉往该位置飞去 if bestSmell kkk=kkk+1; X_axis=X(bestindex); Y_axis=Y(bestindex); Smellbest=bestSmell; end %每代最优Smell值记录到yy数组中,并记录最优迭代坐标 yy(g)=Smellbest; Xbest(g)=X_axis; Ybest(g)=Y_axis; end %绘制迭代味道浓度与果蝇飞行路径趋势图 figure(1) plot(yy) title('Optimization process','fontsize',12) xlabel('Iteration Number','fontsize',12); ylabel('Smell','fontsize',12); figure(2) plot(Xbest,Ybest,'b'); title('Fruit flying toute','fontsize',14) xlabel('X-best','fontsize',12); ylabel('Y-best','fontsize',12); |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1771 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1619 浏览 1 评论
1070 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
724 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1673 浏览 2 评论
1936浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
729浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
569浏览 3评论
594浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
552浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 21:06 , Processed in 0.775445 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号