基于鱼群算法的函数寻优
1.实验目的
掌握鱼群算法求函数极值的问题。
2.实验环境
Matlab
3.实验内容
对给定函数max f(x)=xsin(10πx)+2.0 -1≤x≤2,求使得函数值最大的变量取值。
4.实验过程
觅食行为:这是生物的一种最基本的行为,也就是趋向食物的一种活动;一般可以认为这种行为是通过视觉或味觉感知水中的食物量或浓度来选择趋向的。
function [Xnext,Ynext]=AF_prey(Xi,ii,visual,step,try_number,LBUB,lastY)
%觅食行为
%输入:
%Xi 当前人工鱼的位置
%ii 当前人工鱼的序号
%visual 感知范围
%step 最大移动步长
%try_number 最大尝试次数
%LBUB 各个数的上下限
%lastY 上次的各人工鱼位置的食物浓度%输出:
%Xnext Xi人工鱼的下一个位置
%Ynext Xi人工鱼的下一个位置的食物浓度Xnext=[];
Yi=lastY(ii);
for i=1:try_numberXj=Xi+(2*rand(length(Xi),1)-1)*visual;Yj=AF_foodconsistence(Xj);if Yi<YjXnext=Xi+rand*step*(Xj-Xi)/norm(Xj-Xi);for i=1:length(Xnext)if Xnext(i)>LBUB(i,2)Xnext(i)=LBUB(i,2);endif Xnext(i)<LBUB(i,1)Xnext(i)=LBUB(i,1);endendXi=Xnext;break;end
end%随机行为
if isempty(Xnext)Xj=Xi+(2*rand(length(Xi),1)-1)*visual;Xnext=Xj;for i=1:length(Xnext)if Xnext(i)>LBUB(i,2)Xnext(i)=LBUB(i,2);endif Xnext(i)<LBUB(i,1)Xnext(i)=LBUB(i,1);endend
end
Ynext=AF_foodconsistence(Xnext);
.
聚群行为:这是鱼类较常见的一种现象,大量或少量的鱼都能聚集成群,这是它们在进化过程中形成的一-种生存方式,可以进行集体觅食和躲避敌害。
function [Xnext,Ynext]=AF_swarm(X,i,visual,step,deta,try_number,LBUB,lastY)
% 聚群行为
%输入:
%X 所有人工鱼的位置
%i 当前人工鱼的序号
%visual 感知范围
%step 最大移动步长
%deta 拥挤度
%try_number 最大尝试次数
%LBUB 各个数的上下限
%lastY 上次的各人工鱼位置的食物浓度%输出:
%Xnext Xi人工鱼的下一个位置
%Ynext Xi人工鱼的下一个位置的食物浓度
Xi=X(:,i);
D=AF_dist(Xi,X);
index=find(D>0 & D<visual);
nf=length(index);
if nf>0for j=1:size(X,1)Xc(j,1)=mean(X(j,index));endYc=AF_foodconsistence(Xc);Yi=lastY(i);if Yc/nf>deta*YiXnext=Xi+rand*step*(Xc-Xi)/norm(Xc-Xi);for i=1:length(Xnext)if Xnext(i)>LBUB(i,2)Xnext(i)=LBUB(i,2);endif Xnext(i)<LBUB(i,1)Xnext(i)=LBUB(i,1);endendYnext=AF_foodconsistence(Xnext);else[Xnext,Ynext]=AF_prey(Xi,i,visual,step,try_number,LBUB,lastY);end
else[Xnext,Ynext]=AF_prey(Xi,i,visual,step,try_number,LBUB,lastY);
end
追尾行为:当某一条鱼或几条鱼发现食物时,它们附近的鱼会尾随其后快速游过来,进而导致更远处的鱼也尾随过来。
function [Xnext,Ynext]=AF_follow(X,i,visual,step,deta,try_number,LBUB,lastY)
% 追尾行为
%输入:
%X 所有人工鱼的位置
%i 当前人工鱼的序号
%visual 感知范围
%step 最大移动步长
%deta 拥挤度
%try_number 最大尝试次数
%LBUB 各个数的上下限
%lastY 上次的各人工鱼位置的食物浓度%输出:
%Xnext Xi人工鱼的下一个位置
%Ynext Xi人工鱼的下一个位置的食物浓度
Xi=X(:,i);
D=AF_dist(Xi,X);
index=find(D>0 & D<visual);
nf=length(index);
if nf>0XX=X(:,index);YY=lastY(index);[Ymax,Max_index]=max(YY);Xmax=XX(:,Max_index);Yi=lastY(i);if Ymax/nf>deta*Yi;Xnext=Xi+rand*step*(Xmax-Xi)/norm(Xmax-Xi);for i=1:length(Xnext)if Xnext(i)>LBUB(i,2)Xnext(i)=LBUB(i,2);endif Xnext(i)<LBUB(i,1)Xnext(i)=LBUB(i,1);endendYnext=AF_foodconsistence(Xnext);else[Xnext,Ynext]=AF_prey(X(:,i),i,visual,step,try_number,LBUB,lastY);end
else[Xnext,Ynext]=AF_prey(X(:,i),i,visual,step,try_number,LBUB,lastY);
end
.
随机行为:鱼在水中悠闲地自由游动,基本上是随机的,其实它们也是为了更大范围地寻觅食物或同伴。
if isempty(Xnext)Xj=Xi+(2*rand(length(Xi),1)-1)*visual;Xnext=Xj;for i=1:length(Xnext)if Xnext(i)>LBUB(i,2)Xnext(i)=LBUB(i,2);endif Xnext(i)<LBUB(i,1)Xnext(i)=LBUB(i,1);endend
EndAF_foodconsistence.m
function [Y]=AF_foodconsistence(X)
fishnum=size(X,2);
for i=1:fishnumY(1,i)=X(i)*sin(10*pi*X(i))+2;
end计算距离:
AF_dist.m
function D=AF_dist(Xi,X)
%计算第i条鱼与所有鱼的位置,包括本身。
%输入:
%Xi 第i条鱼的当前位置
%X 所有鱼的当前位置
% 输出:
%D 第i条鱼与所有鱼的距离
col=size(X,2);
D=zeros(1,col);
for j=1:colD(j)=norm(Xi-X(:,j));
end
dist.m
%计算第i条鱼与所有鱼的位置,包括本身。
function D=dist(Xi,X)
col=size(X,2);
D=zeros(1,col);
for j=1:colD(j)=norm(Xi-X(:,j));
end
鱼群初始化:AF_init.m
function X=AF_init(Nfish,lb_ub)
%输入:
% Nfish 鱼群大小
% lb_ub 鱼的活动范围%输出:
% X 产生的初始人工鱼群% example:
% Nfish=3;
% lb_ub=[-3.0,12.1,1;4.1,5.8,1];
%%这里的lb_ub是2行3列的矩阵,每行中前两个数是范围的上下限,第3个数是在该范围内的数的个数
% X=Inital(Nfish,lb_ub)
%%就是产生[-3.0,12.1]内的数1个,[4.1,5.8]内的数1个
%%两个数一组,这样的数一共Nfish个
row=size(lb_ub,1);
X=[];
for i=1:rowlb=lb_ub(i,1);ub=lb_ub(i,2);nr=lb_ub(i,3);for j=1:nrX(end+1,:)=lb+(ub-lb)*rand(1,Nfish);end
end主函数:main.m
clc
clear all
close all
tic
figure(1);hold on
ezplot('x*sin(10*pi*x)+2',[-1,2]);
%% 参数设置
fishnum=50; %生成50只人工鱼
MAXGEN=50; %最多迭代次数
try_number=100;%最多试探次数
visual=1; %感知距离
delta=0.618; %拥挤度因子
step=0.1; %步长
%% 初始化鱼群
lb_ub=[-1,2,1];
X=AF_init(fishnum,lb_ub);
LBUB=[];
for i=1:size(lb_ub,1)LBUB=[LBUB;repmat(lb_ub(i,1:2),lb_ub(i,3),1)];
end
gen=1;
BestY=-1*ones(1,MAXGEN); %每步中最优的函数值
BestX=-1*ones(1,MAXGEN); %每步中最优的自变量
besty=-100; %最优函数值
Y=AF_foodconsistence(X);
while gen<=MAXGENfprintf(1,'%d\n',gen)for i=1:fishnum%% 聚群行为[Xi1,Yi1]=AF_swarm(X,i,visual,step,delta,try_number,LBUB,Y); %% 追尾行为[Xi2,Yi2]=AF_follow(X,i,visual,step,delta,try_number,LBUB,Y); if Yi1>Yi2X(:,i)=Xi1;Y(1,i)=Yi1;elseX(:,i)=Xi2;Y(1,i)=Yi2;endend[Ymax,index]=max(Y);figure(1);plot(X(1,index),Ymax,'.','color',[gen/MAXGEN,0,0])if Ymax>bestybesty=Ymax;bestx=X(:,index);BestY(gen)=Ymax;[BestX(:,gen)]=X(:,index);elseBestY(gen)=BestY(gen-1);[BestX(:,gen)]=BestX(:,gen-1);endgen=gen+1;
end
plot(bestx(1),besty,'ro','MarkerSize',100)
xlabel('x')
ylabel('y')
title('鱼群算法迭代过程中最优坐标移动')%% 优化过程图
figure
plot(1:MAXGEN,BestY)
xlabel('迭代次数')
ylabel('优化值')
title('鱼群算法迭代过程')
disp(['最优解X:',num2str(bestx,'%1.4f')])
disp(['最优解Y:',num2str(besty,'%1.4f')])
toc
基于鱼群算法的函数寻优相关推荐
- (转载)基于鱼群算法的函数寻优算法(matlab实现)
1 理论基础 1.1 人工鱼群算法概述 人工鱼群算法是李晓磊等人于2002年提出的一类基于动物行为的群体智能优化算法.该算法是通过模拟鱼类的觅食.聚群.追尾.随机等行为在搜索域中进行寻 ...
- 基于蜜蜂算法的函数寻优及TSP搜索算法
文章目录 一.理论基础 1.连续型蜜蜂算法 2.离散型蜜蜂算法 二.仿真实验与结果分析 1.函数寻优 2.TSP搜索 三.参考文献 一.理论基础 1.连续型蜜蜂算法 文献[1]的目的是从蜜蜂的自然觅食 ...
- 基于晶体结构算法的函数寻优算法
文章目录 一.理论基础 1.晶体结构算法 2.CryStAl伪代码 二.仿真实验与结果分析 三.参考文献 一.理论基础 1.晶体结构算法 晶体结构算法(Crystal Structure Algori ...
- 基于探路者算法的函数寻优算法
文章目录 一.理论基础 1.探路者算法 2.PFA算法伪代码 二.仿真实验与分析 三.参考文献 一.理论基础 1.探路者算法 探路者(Pathfinder algorithm, PFA)算法是由土耳其 ...
- 《MATLAB智能算法30个案例》:第17章 基于PSO工具箱的函数寻优算法
<MATLAB智能算法30个案例>:第17章 基于PSO工具箱的函数寻优算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析& ...
- 《MATLAB智能算法30个案例》:第8章 基于量子遗传算法的函数寻优算法
<MATLAB智能算法30个案例>:第8章 基于量子遗传算法的函数寻优算法 1. 前言 2. MATLAB 仿真示例 3. 小结 1. 前言 <MATLAB智能算法30个案例分析&g ...
- 基于蚁群算法的函数寻优算法
文章目录 一.理论基础 二.案例背景 1.问题描述 2.解题思路及步骤 三.MATLAB程序实现 1.清空环境变量 2.初始化参数 3.构建解空间和目标函数 4.迭代寻优 5.结果显示 6.绘图 四. ...
- 粒子群算法中的罚函数matlab,第18章基于罚函数的粒子群算法的函数寻优范例.ppt...
第十八章 MATLAB优化算法案例分析与应用 第18章 基于罚函数的粒子群算法的函数寻优 第十八章 MATLAB优化算法案例分析与应用 18.1 粒子群算法概述 自20世纪50年代中期创立了仿生学,许 ...
- 基于PSO工具箱的函数寻优算法
文章目录 一.理论基础 1.工具箱介绍 2.工具箱函数解释 二.案例背景 1.问题描述 2.工具箱设置 三.MATLAB程序实现 1.适应度函数 2.主函数 3.仿真结果 四.延伸阅读 五.参考文献 ...
- 基于人工兔优化算法的函数寻优和工程优化
文章目录 一.理论基础 1.人工兔优化算法 (1)绕道觅食(探索) (2)随机躲藏(开发) (3)能量收缩(从探索转向开发) 2.ARO算法伪代码 二.仿真实验与结果分析 1.函数寻优 2.工程优化 ...
最新文章
- 剑指offer:面试题35. 复杂链表的复制
- wifi共享大师电脑版_手机开wifi热点,共享网络给电脑,变身4G无线路由器
- python可以做什么系统-用python做推荐系统(一)
- windows下使用QtXlsx
- 实现简约不简单的vuex
- 前端趋势榜:上周最有意思、又实用的 10 大 Web 项目 - 210924
- Python算法——二叉树
- Tp3.1 文件上传到七牛云
- 网红第一股上市首日暴跌37% “为人低调”王思聪评价:公司本身有问题
- 《高翔视觉slam十四讲》学习笔记 第七讲 视觉里程计
- 《统一沟通-微软-实战》-7-配置-2-呼叫寄存
- 阿里java开发编程规范
- Arduino Nano 自制显示器 “流光溢彩” 外设教程(新人向)
- JAVA SpringBoot接科大讯飞TTS语音合成保姆式教程附源代码
- 决策树分析,让你的风险应对更专业
- URL 长链地址转短链 URL地址
- 海南自贸区电信行业环境分析
- FreeRTOS任务切换过程深层解析
- Python : numpy花式切片
- Qt Designer+PyQt5 控件使用经验(不定时随缘更新)
热门文章
- 【Allennlp】: 怎样创建Allennlp中的Configuration文件
- spss统计分析基础教程(上)--自学
- 计算机应用基础免费文档课件,计算机应用基础的课件.doc
- VC2005 运行库解析
- Unity3D研究院之解决ttf繁体字体不显示问题
- webqq机器人java_一步一步来做WebQQ机器人-(二)(第一次登陆)
- asp.net mvc 中使用async/await异步编程
- java获取.py文件值_Java File文件处理 读文件
- 批处理常用DOS命令简述
- 为CMUSphinx训练声学模型教程手册