人工鱼群算法matlab实现

合集下载

人工鱼群算法1

人工鱼群算法1

人工鱼群算法实例
• 然后先进行追尾活动,每条鱼Xi都查看在自己可视域范围内 (即距离小于visual,visual根据搜索空间的大小而定)的 其它鱼,从中找到适应函数值最小的一个Xj ,其适应度函 数值记为Yj,Xj周围可视域内的其它个体数量记为nf,若 Yj*nf<δ*Yi (δ为拥挤度因子,此处取1),则表明Xj周围 “食物”较多且不太拥挤,这时Xi对每一个自己和Xj的不同 的位重新随机取值(例如Xi为1001,而Xj为1100,那么就 对Xi的第2,4位重新随机取值),从而向Xj靠近。追尾活动 若不成功,则进行聚群行为,每条鱼都先找出自己周围可 视域内的其它鱼,形成一个小鱼群,然后找出这群鱼的中 心点,这里中心点的确定方法是,若鱼群中半数以上的鱼 在第i位上取1,则中心点的第i位也为1,否则为0,接 着采用和前面相同方法查看中心点的“食物”是否较多, 是否拥挤,据此决定是行为(AF-follow)指鱼向其可视区域 内的最优方向移动的一种行为。人工鱼Xi搜 索其视野内所有伙伴中的函数最优伙伴Xj, 如果 Yj/ nf > δYi,表明最优伙伴的周围不太 拥挤,则Xi朝此伙伴移动一步,否则执行觅 食行为。
算法介绍 伪代码
• • • • • • • • •
算法介绍 代码
function [XXnext] = gmjprey(XX,Try_number,Visual,Step) pp=0; for j=1:Try_number XXj=XX+rand*Step*Visual; if(maxf(XX)<maxf(XXj)) XXnext=XX+rand*Step*(XXj-XX)/norm(XXj-XX); pp=1; break end end if(~pp) XXnext=XX+rand*Step; end

基本人工鱼群算法

基本人工鱼群算法

基本人工鱼群算法摘要人工鱼群算法(Artificial Fish-Swarm Algorithm,AFSA)是由李晓磊等在2002年提出的,源于对鱼群运动行为的研究,是一种新型的智能仿生优化算法。

它具有较强的鲁棒性、优良的分布式计算机制易于和其他方法结合等优点。

目前对该算法的研究、应用已经渗透到多个应用领域,并由解决一维静态优化问题发展到解决多维动态组合优化问题。

人工鱼群算法已经成为交叉学科中一个非常活跃的前沿性学科。

本文主要对鱼群算法进行了概述,引入鱼群模式的概念,然后给出了人工鱼的结构,接下来总结出了人工鱼的寻优原理,并对人工鱼群算法的寻优过程进行仿真,通过四个标准函数选取不同的拥挤度因子进行仿真实验,证实了利用人工鱼群算法进行全局寻优确实是有效的。

关键词:人工鱼群算法;拥挤度因子;寻优0 引言动物在进化过程中,经过漫长的优胜劣汰,形成了形形色色的觅食和生存方式,这些方式为人类解决生产生活中的问题带来了不少启发和灵感。

动物不具备复杂逻辑推理能力和综合判断等高级智能,但他们通过个体的简单行为和相互影响,实现了群体的生存和进化。

动物行为具有以下几个特点。

(1)适应性:动物通过感觉器官来感知外界环境,并应激性的做出各种反应,从而影响环境,表现出与环境交互的能力。

(2)自治性:在不同的时刻和不同的环境中能够自主的选取某种行为,而无需外界的控制或指导。

(3)盲目性:单个个体的行为是独立的,与总目标之间没有直接的关系。

(4)突现性:总目标的完成是在个体行为的运动过程中突现出来的。

(5)并行性:各个个体的行为是并行进行的。

人工鱼群算法是根据鱼类的活动特点提出的一种基于动物行为的自治体寻优模式。

1 鱼群模式描述1.1 鱼群模式的提出20世纪90年代以来,群智能(swarm intelligence,SI)的研究引起了众多学者的极大关注,并出现了蚁群优化、粒子群优化等一些著名的群智能方法。

集群是生物界中常见的一种现象,如昆虫、鸟类、鱼类、微生物乃至人类等等。

人工鱼群算法(AFSA)及其简单应用举例

人工鱼群算法(AFSA)及其简单应用举例

+ 2.2 AFSA基本概念 + 假设在一个n维的目标搜索空间中,有N条组成一 + 个群体的人工鱼,每个人工鱼个体的状态可表示为 + 向量X=(x1,x2,……xn),其中xi(i=1,……n)为欲寻 + 优的变量:人工鱼当前所在位置的食物浓度表示为 + Y=f(X),其中Y为目标函数;人工鱼个体间距离表示 + 为 d=||Xi-Xj ||; visual表示人工鱼的感知范围,step + 为人工鱼移动步长,δ为拥挤度因子;trynumber + 表示人工鱼每次觅食最大试探次数。
6
8 10
x1
AFSA 迭 代 20次 8
+ 1.2 人工生命
+ 具有某些生命基本特征的人工系统。包括两方面 的内容:
+ 1、研究如何利用计算技术研究生物现象;
+ 2、研究如何利用生物技术研究计算问题。
+
+ 我们关注的是第二点。
+
如何利用生物技术研究计算问题是人工生命
研究的重要方向,现已有了很多源于生物现象的计
算技巧, 例如人工神经网络是简化的大脑模型,遗
+ 2.4 具体算法步骤 + 鉴于以上描述的人工鱼群行为,每条人工鱼探索 + 它当前所处的环境状况和伙伴的状况,从而选择一 + 种行为来实际执行,最终人工鱼集结在几个局部极 + 值周围。一般情况下,在讨论求极大问题时,拥有 + 较大的适应值的人工鱼一般处于值较大的极值域周 + 围,这有助于获取全局极值域,而值较大的极值区 + 域周围一般能集结较多的人工鱼,这有助于判断并 + 获取全局极值。具体的人工鱼群算法步骤如下:

人工鱼群算法的分析及改进

人工鱼群算法的分析及改进

1、引入动态调整策略
在AFSO算法中,随着迭代次数的增加,鱼群的全局最优解可能逐渐偏离真正 的最优解。这是由于在寻优过程中,鱼群可能会陷入局部最优陷阱。为了解决这 个问题,我们引入了动态调整策略,即根据算法的迭代次数和当前的最优解,动 态地调整鱼群的搜索范围和搜索速度。
2、增加随机扰动
在AFSO算法中,鱼群通常会向当前的全局最优解集中。这可能会导致算法过 早地陷入局部最优陷阱。为了解决这个问题,我们引入了随机扰动。即在每次迭 代时,随机选择一部分鱼,将其位置和速度进行随机扰动,以增加算法的探索能 力。
2、计算适应度:对于每一条鱼,计算其适应度函数值(通常是目标函数 值),这个值代表了这条鱼的“健康”状况。
3、比较适应度:将每条鱼的适应度与全局最优解进行比较,更新全局最优 解。
4、更新领头鱼:随机选择一条鱼作为领头鱼,然后根据一定的规则,如最 小距离规则,选择其他鱼跟随领头鱼。
5、更新鱼群:根据领头鱼的位置和行为,更新其他鱼的位置和行为。
4、多种群并行搜索:通过将搜索空间划分为多个子空间,并在每个子空间 中独立运行AFSA,我们可以实现多种群的并行搜索。这种并行搜索方法可以显著 提高算法的搜索速度和效率。
四、结论
本次演示对人工鱼群算法进行了详细的分析和改进。通过引入混沌理论、变 异机制和自适应调整参数等方法,我们可以有效地提高AFSA的全局搜索能力和效 率,避免算法过早地陷入局部最优解。多种群并行搜索方法也可以显著提高算法 的搜索速度和效率。这些改进方案为AFSA在实际应用中的广泛应用提供了有力的 支持。
感谢观看
3、引入学习因子
在AFSO算法中,每个鱼会根据自身经验和群体行为来调整自己的方向和位置。 然而,这个学习因子通常是固定的。为了提高算法的收敛速度和精度,我们引入 了可变的学习因子。即根据算法的迭代次数和当前的最优解,动态地调整学习因 子的大小。

鱼群集群行为的的建模与仿真数模

鱼群集群行为的的建模与仿真数模

鱼群集群行为的的建模与仿真摘要本文利用人工生命技术的特点,把每条鱼看成是一个能够自主决策的Agent,它们会根据自己的观察来感知周围的环境,并按照一定的规则决策。

然后采用自底向上的建模方法,根据鱼群游动的规律建立了一种基于群体中每个个体运动方程的数学模型, 并通过matlab算法设计各种运算, 从而完成整个鱼群游动的模拟。

对于问题一,首先我们确定鱼群游动的三个规则:凝聚性(向心性),同向性,排斥性;然后根据这三个规则,建立了群体中每个个体的运动方程,最后通过matlab实现对鱼群集群运动的模拟。

对于问题二,首先我们将刻画鱼群躲避黑鳍礁鲨鱼的运动行为一般化,将其作为刻画鱼群躲避捕食者的运动行为来研究。

然后我们将捕食者看成是鱼群中的特殊鱼(对所有其它鱼只有排斥力而没有吸引力,所有其它鱼对其只有吸引力而没有排斥力),然后再运用问题一所建立的模型进行模拟刻画。

对于问题三,首先我们将鱼群中的鱼分为普通鱼与信息鱼(信息丰富者),并假设在运动过程中普通鱼会向信息鱼靠拢。

然后通过问题一中的模型进行仿真,并研究了当信息鱼的比例为不同值时的情况,从而分析了信息鱼对于群运动行为的影响及解释群运动方向决策是如何达成的。

关键词: 集群运动人工生命仿真 Matlab编程1 问题重述在生态系统中,动物个体的行为相对简单,集群后却能表现出复杂的群体行为。

这些动物群在运动过程中具有很明显的特征:群中的个体聚集性很强,运动方向、速度具有一致性。

请查阅相关资料,思考动物集群运动的机理,建立数学模型刻画动物集群运动、躲避威胁等行为,例如,可以考虑以下问题的分析建模:(1)建立数学模型模拟动物的集群运动。

(2)建立数学模型刻画鱼群躲避黑鳍礁鲨鱼的运动行为。

(3)假定动物群中有一部分个体是信息丰富者(如掌握食物源位置信息,掌握迁徙路线信息),请建模分析它们对于群运动行为的影响,解释群运动方向决策如何达成。

2 模型的假设与符号的约定2.1模型的假设与说明(1)所有的鱼生活在一个宽为width、长length的二维世界。

人工鱼群算法

人工鱼群算法

5
算法旳收敛性分析
人工鱼群算法旳参数选用
视野(Visual ):因为视野对算法中各行为都有较大旳影响, 所以其变化对收敛性能旳影响也是比较复杂旳。当视野范围较小时 ,人工鱼群旳觅食行为和随机游动比较突出;视野范围较大时人工 鱼旳追尾行为和聚群行为将变得较突出。总体来看,视野越大,越 轻易使人工鱼发觉全局极值并收敛。所以对人工鱼旳视野进行合适 旳改善,是提升人工鱼群算法优化性能旳一种方向。
(4)δ:拥挤度因子,人工鱼群旳汇集规模; (5)Try-number:试探次数。人工鱼变化目前状态前旳尝试
次数,满足试探次数后,假如不满足变化状态旳条件, 则人工鱼需要根据规则选择下次行为继续寻优。
鱼群行为分析
这些行为在不同步刻会相互转换,而这种转换一般是鱼经过对环境旳感知来自主实现旳,这些 行为与鱼旳觅食和生存都有着亲密旳关系,而且与我们优化问题旳处理也有着亲密旳关系。
觅食行为
聚群行为
追尾行为
随机行为
鱼群算法在对以上四种行为进行评价后,自动选择合适旳行为,从而形成了一种高 效迅速旳寻优策略。
觅食行为
这是人工鱼旳一种趋向食物活动。一般经过视觉或味觉来感知水中旳食物量或浓度来
选择趋向。设人工鱼i旳目前状态为Xi,在其感知范围内随机选择一种状态Xj,则
X j Xi Visual Rand
尝试次数(Try-number):
尝试次数越多,人工鱼执行觅食行 为旳能力越强,收敛效率越高,但 在局部极值突出旳情况下,易错过 全局极值点,即人工鱼摆脱局部极 值旳能力越弱。所以,在一般优化 中,可合适增长尝试次数,以加紧 收敛速度;在局部极值突出旳情况 下,应降低尝试次数,增长人工鱼 随机游动旳概率。
其迅速到达食物点。即追尾行为是一种向邻近旳有最高适应度旳人工鱼追逐旳行为

基于多智能体系统的人工鱼群算法研究

基于多智能体系统的人工鱼群算法研究

基于多智能体系统的人工鱼群算法研究人工智能领域近年来发展迅速,多智能体系统(Multi-Agent Systems,MAS)作为其中一个研究重点,受到了越来越多的关注。

在MAS中,人工鱼群算法(Artificial Fish Swarm Algorithm,AFSA)是其中一个重要的算法,在优化问题、图像处理、机器学习等领域都得到了广泛应用。

本文将从多智能体系统的角度出发,对人工鱼群算法的研究进行探讨。

一、多智能体系统概述多智能体系统是由多个智能体组成的,这些智能体可以相互通信协作,完成一定的任务。

每个智能体都有自己的意识、思考、行动方式,即使不同智能体之间的行动策略可能有所不同,但是它们能够在一定程度上相互协调,实现共同的目标。

多智能体系统中的智能体可以包括机器人、无人机、传感器、计算节点等,它们之间通过信息交流和决策协作,共同完成一定的任务。

研究多智能体系统的目的不只是因为多智能体具有高度的自适应性和智能性,而且是因为多智能体系统中的协作是人工智能技术在现实世界中的应用之一,这与现实生活中智能化发展的趋势是一致的。

二、人工鱼群算法基础概念人工鱼群算法是基于生物群体智能的优化算法,模拟了鱼群跳跃寻优的行为。

在算法中,鱼个体通过觅食和聚群两种行为方式进行探测和搜索空间,以达到全局最优目标。

与传统遗传算法、粒子群算法、模拟退火算法等计算机智能算法相比,人工鱼群算法更加稳定、鲁棒和易于实现。

人工鱼群算法的基本流程如下:(1)初始化鱼群,确定群体大小和搜索空间范围;(2)根据目标函数,计算每个鱼个体的适应度值;(3)根据当前的适应度值,进行随机游动;(4)根据新位置,更新适应度值;(5)通过聚群行为相互交流学习,提升整个鱼群的性能。

三、基于多智能体系统的人工鱼群算法研究随着智能化技术的发展,多智能体系统的应用越来越广泛,而人工鱼群算法作为其中一个重要的算法,正在受到越来越多的关注。

在多智能体系统中,人工鱼群算法具有以下特点:(1)可以处理多约束优化问题,将局部探测和全局搜索的过程相互分离,提高了算法的收敛速度和搜索精度;(2)适用于不确定性较高的复杂环境下解决问题,例如路径规划、数据聚类等问题;(3)具有良好的鲁棒性,能够适应环境变化和噪声扰动;(4)能够自适应地调整参数,减少了手动调整的复杂性。

白鲸优化算法 matlab程序

白鲸优化算法 matlab程序

白鲸优化算法(Whale Optimization Algorithm,WOA)是一种基于鲸鱼社会行为的启发式优化算法。

与其他启发式算法相比,白鲸优化算法具有较快的收敛速度和较高的优化精度,适用于多种优化问题的求解。

而Matlab作为一种功能强大的编程工具,可以用来实现白鲸优化算法,快速求解各种复杂的优化问题。

本文将从以下几个方面介绍白鲸优化算法的原理和在Matlab中的实现:一、白鲸优化算法的原理白鲸优化算法是一种模拟鲸鱼族群行为的优化算法,其核心思想是模拟鲸鱼在觅食过程中的捕食行为。

白鲸在觅食时会根据自身的经验和邻近白鲸的经验来调整自己的行进方向,以寻找最佳的觅食位置。

在算法中,每条白鲸都被看作一个潜在的解,而整个白鲸族群则被看作是一个解空间。

白鲸通过迭代寻找最优解,不断调整自身位置和速度,直到达到最优解或者迭代次数达到预定值。

二、白鲸优化算法的具体步骤1. 初始化白鲸族群:随机生成初始解,即随机生成白鲸的位置和速度。

2. 设定迭代终止条件:设定迭代次数的上限或者设定目标函数值的阈值,以确定算法的终止条件。

3. 更新白鲸位置和速度:根据特定的更新规则,不断调整白鲸的位置和速度,以寻找最优解。

4. 评估适应度:计算每条白鲸的适应度,即目标函数值,以确定是否达到最优解。

5. 确定最优解:根据迭代结果,确定最优解的位置和目标函数值。

三、在Matlab中实现白鲸优化算法在Matlab中,可以利用其强大的算法库和矩阵运算功能,比较容易地实现白鲸优化算法。

下面以一个简单的优化问题为例,介绍在Matlab中如何实现白鲸优化算法。

(这里应该有一段代码示例,以展示在Matlab中实现白鲸优化算法的具体代码)四、使用白鲸优化算法解决实际问题白鲸优化算法可以用来解决各种优化问题,包括函数优化、工程优化、机器学习等领域。

在实际应用中,可以根据具体问题的特点,调整白鲸优化算法的参数和参数设置,来获得更好的优化效果。

五、总结白鲸优化算法是一种较新的启发式优化算法,具有快速的收敛速度和较高的优化精度。

基于人工鱼群算法的多元线性回归分析问题处理

基于人工鱼群算法的多元线性回归分析问题处理

基于人工鱼群算法的多元线性回归分析问题处理李媛【摘要】人工鱼群算法(AFsA)是一种基于动物行为的自治体寻优模式,依据鱼类活动特点构建的新型智能仿生算法.简要介绍了AFSA算法的基本原理,描述了使用AFSA算法解决多元线性回归分析问题的步骤和结果.仿真实验结果表明,AFSA算法在处理多元线性回归分析问题上是一种简单、高效的算法.%A brief introduction is made of the basic principles of Artificial Fish Swarm Algorithm (AFSA), a new algorithm with autonomous optimization mode according to the behavior of fish swarm. The steps are analyzed for the solution to problems concerning AFSA - based multiple linear regression analysis. The simulation experiment proves that it is simple and efficient.【期刊名称】《渤海大学学报(自然科学版)》【年(卷),期】2011(032)002【总页数】4页(P168-171)【关键词】人工鱼群;优化;多元线性回归分析【作者】李媛【作者单位】渤海大学工学院,辽宁锦州,121013【正文语种】中文【中图分类】TP2740 引言多元线性回归问题就是在很多工程技术和科学实验的实际问题中,用来讨论多个变量之间试验结果的数学表示。

它在实验数据处理、经验公式求得、仪器的精度分析及自动控制中的数学模型的制定中都有很广泛的应用。

解决多元线性回归分析问题的重点就是多个参数估计。

目前,可以采用传统的最小二乘法〔1〕;也可以采用遗传算法(GA)〔1〕或粒子群优化算法(PSO)〔2〕等智能算法解决此类问题。

第30章 基于鱼群算法的函数优化分析

第30章  基于鱼群算法的函数优化分析

第三十章 相应的待优化函数即适应度函数如下: function [Y]=AF_foodconsistence(X) fishnum=size(X,2); for i=1:fishnum x = X(1,i); y = X(2,i); Y(1,i) = 3*(1-x).^2.*exp(-(x.^2) - (y+1).^2) ... - 10*(x/5 - x.^3 - y.^5).*exp(-x.^2-y.^2) ... - 1/3*exp(-(x+1).^2 - y.^2); end
号并传递至其他鱼,于是,群体中的所有鱼便能捕食猎物;
(4)使水中的猎物失去方向性即迷失方向。 与单独个体鱼相比,鱼群对不利环境变化有较强的抵抗能力。集群行为 在鱼类洄游过程中也有一定适应意义,集群性鱼类能更快地找到洄游路线 ,并且能够较易发现某些定向标记。
第三十章 3.繁殖行为
MATLAB优化算法案例分析与应用
状态变得不可行,这时就需要加入相应的约束来对其进行规整化,使它们由无效 状态或不可行状态转变成可行的。
第三十章
MATLAB优化算法案例分析与应用
30.4.6 公告板
公告板用来记录最优人工鱼个体的状态。各人工鱼个体在寻优过程中,每次行动
完毕就检验自身状态与公告板的状态,如果自身状态优于公告板状态,就将公告板 的状态改写为自身状态,这样就使公告板记录下历史最优的状态。
第三十章
MATLAB优化算法案例分析与应用
5.洄游行为 鱼在游泳时不断地摆动尾部以获得前进的动力,虽然鱼群在水中运动 所消耗的能量极少,但为了克服游泳的阻力,洄游的鱼群也和迁移雁群 一样排成一定的队形,这种队形使参加洄游的每一条鱼前进过程中的能 量消耗降低到最小。 6.追逐行为 鱼类为了获得更多的食物,不断觅食,食物随水波漂浮或流动,当鱼 群遇到猎物时,鱼群不断地追逐这些食物目标。另外当鱼出现求偶意图 时,不断追逐求偶对象。为了捕获更多的食物或防止被捕,鱼不断追逐 鱼群中最优位置的个体。当某条鱼发现该处食物丰富时,其他鱼会快速 尾随而至。 7.随机游动和离开行为 当鱼休闲时,鱼也选择单独出没,轻松的自由游动。 除了以上鱼类行为外,还有发声、放电、发光、变色等行为。

人工鱼群算法-python实现

人工鱼群算法-python实现

⼈⼯鱼群算法-python实现AFSIndividual.py1import numpy as np2import ObjFunction3import copy456class AFSIndividual:78"""class for AFSIndividual"""910def__init__(self, vardim, bound):11'''12 vardim: dimension of variables13 bound: boundaries of variables14'''15 self.vardim = vardim16 self.bound = bound1718def generate(self):19'''20 generate a rondom chromsome21'''22 len = self.vardim23 rnd = np.random.random(size=len)24 self.chrom = np.zeros(len)25 self.velocity = np.random.random(size=len)26for i in xrange(0, len):27 self.chrom[i] = self.bound[0, i] + \28 (self.bound[1, i] - self.bound[0, i]) * rnd[i]29 self.bestPosition = np.zeros(len)30 self.bestFitness = 0.3132def calculateFitness(self):33'''34 calculate the fitness of the chromsome35'''36 self.fitness = ObjFunction.GrieFunc(37 self.vardim, self.chrom, self.bound)AFS.py1import numpy as np2from AFSIndividual import AFSIndividual3import random4import copy5import matplotlib.pyplot as plt678class ArtificialFishSwarm:910"""class for ArtificialFishSwarm"""1112def__init__(self, sizepop, vardim, bound, MAXGEN, params):13'''14 sizepop: population sizepop15 vardim: dimension of variables16 bound: boundaries of variables, 2*vardim17 MAXGEN: termination condition18 params: algorithm required parameters, it is a list which is consisting of[visual, step, delta, trynum]19'''20 self.sizepop = sizepop21 self.vardim = vardim22 self.bound = bound23 self.MAXGEN = MAXGEN24 self.params = params25 self.population = []26 self.fitness = np.zeros((self.sizepop, 1))27 self.trace = np.zeros((self.MAXGEN, 2))28 self.lennorm = 60002930def initialize(self):31'''32 initialize the population of afs33'''34for i in xrange(0, self.sizepop):35 ind = AFSIndividual(self.vardim, self.bound)36 ind.generate()37 self.population.append(ind)3839def evaluation(self, x):40'''41 evaluation the fitness of the individual42'''43 x.calculateFitness()4445def forage(self, x):46'''47 artificial fish foraging behavior48'''49 newInd = copy.deepcopy(x)50 found = False51for i in xrange(0, self.params[3]):52 indi = self.randSearch(x, self.params[0])53if indi.fitness > x.fitness:54 newInd.chrom = x.chrom + np.random.random(self.vardim) * self.params[1] * self.lennorm * (55 indi.chrom - x.chrom) / np.linalg.norm(indi.chrom - x.chrom)56 newInd = indi57 found = True58break59if not (found):60 newInd = self.randSearch(x, self.params[1])61return newInd6263def randSearch(self, x, searLen):64'''65 artificial fish random search behavior66'''67 ind = copy.deepcopy(x)68 ind.chrom += np.random.uniform(-1, 1,69 self.vardim) * searLen * self.lennorm70for j in xrange(0, self.vardim):71if ind.chrom[j] < self.bound[0, j]:72 ind.chrom[j] = self.bound[0, j]73if ind.chrom[j] > self.bound[1, j]:74 ind.chrom[j] = self.bound[1, j]75 self.evaluation(ind)76return ind7778def huddle(self, x):79'''80 artificial fish huddling behavior81'''82 newInd = copy.deepcopy(x)83 dist = self.distance(x)84 index = []85for i in xrange(1, self.sizepop):86if dist[i] > 0 and dist[i] < self.params[0] * self.lennorm:87 index.append(i)88 nf = len(index)89if nf > 0:90 xc = np.zeros(self.vardim)91for i in xrange(0, nf):92 xc += self.population[index[i]].chrom93 xc = xc / nf94 cind = AFSIndividual(self.vardim, self.bound)95 cind.chrom = xc96 cind.calculateFitness()97if (cind.fitness / nf) > (self.params[2] * x.fitness):98 xnext = x.chrom + np.random.random(99 self.vardim) * self.params[1] * self.lennorm * (xc - x.chrom) / np.linalg.norm(xc - x.chrom) 100for j in xrange(0, self.vardim):101if xnext[j] < self.bound[0, j]:102 xnext[j] = self.bound[0, j]103if xnext[j] > self.bound[1, j]:104 xnext[j] = self.bound[1, j]105 newInd.chrom = xnext106 self.evaluation(newInd)107# print "hudding"108return newInd109else:110return self.forage(x)111else:112return self.forage(x)113114def follow(self, x):115'''116 artificial fish following behivior117'''118 newInd = copy.deepcopy(x)119 dist = self.distance(x)120 index = []121for i in xrange(1, self.sizepop):122if dist[i] > 0 and dist[i] < self.params[0] * self.lennorm:123 index.append(i)124 nf = len(index)125if nf > 0:126 best = -999999999.127 bestIndex = 0128for i in xrange(0, nf):129if self.population[index[i]].fitness > best:130 best = self.population[index[i]].fitness131 bestIndex = index[i]132if (self.population[bestIndex].fitness / nf) > (self.params[2] * x.fitness):133 xnext = x.chrom + np.random.random(134 self.vardim) * self.params[1] * self.lennorm * (self.population[bestIndex].chrom - x.chrom) / np.linalg.norm(self.population[bestIndex].chrom - x.chrom) 135for j in xrange(0, self.vardim):136if xnext[j] < self.bound[0, j]:137 xnext[j] = self.bound[0, j]138if xnext[j] > self.bound[1, j]:139 xnext[j] = self.bound[1, j]140 newInd.chrom = xnext141 self.evaluation(newInd)142# print "follow"143return newInd144else:145return self.forage(x)146else:147return self.forage(x)148149def solve(self):150'''151 evolution process for afs algorithm152'''153 self.t = 0154 self.initialize()155# evaluation the population156for i in xrange(0, self.sizepop):157 self.evaluation(self.population[i])158 self.fitness[i] = self.population[i].fitness159 best = np.max(self.fitness)160 bestIndex = np.argmax(self.fitness)161 self.best = copy.deepcopy(self.population[bestIndex])162 self.avefitness = np.mean(self.fitness)163 self.trace[self.t, 0] = (1 - self.best.fitness) / self.best.fitness164 self.trace[self.t, 1] = (1 - self.avefitness) / self.avefitness165print("Generation %d: optimal function value is: %f; average function value is %f" % (166 self.t, self.trace[self.t, 0], self.trace[self.t, 1]))167while self.t < self.MAXGEN - 1:168 self.t += 1169# newpop = []170for i in xrange(0, self.sizepop):171 xi1 = self.huddle(self.population[i])172 xi2 = self.follow(self.population[i])173if xi1.fitness > xi2.fitness:174 self.population[i] = xi1175 self.fitness[i] = xi1.fitness176else:177 self.population[i] = xi2178 self.fitness[i] = xi2.fitness179 best = np.max(self.fitness)180 bestIndex = np.argmax(self.fitness)181if best > self.best.fitness:182 self.best = copy.deepcopy(self.population[bestIndex])183 self.avefitness = np.mean(self.fitness)184 self.trace[self.t, 0] = (1 - self.best.fitness) / self.best.fitness185 self.trace[self.t, 1] = (1 - self.avefitness) / self.avefitness186print("Generation %d: optimal function value is: %f; average function value is %f" % (187 self.t, self.trace[self.t, 0], self.trace[self.t, 1]))188189print("Optimal function value is: %f; " % self.trace[self.t, 0])190print"Optimal solution is:"191print self.best.chrom192 self.printResult()193194def distance(self, x):195'''196 return the distance array to a individual197'''198 dist = np.zeros(self.sizepop)199for i in xrange(0, self.sizepop):200 dist[i] = np.linalg.norm(x.chrom - self.population[i].chrom) / 6000201return dist202203def printResult(self):204'''205 plot the result of afs algorithm206'''207 x = np.arange(0, self.MAXGEN)208 y1 = self.trace[:, 0]209 y2 = self.trace[:, 1]210 plt.plot(x, y1, 'r', label='optimal value')211 plt.plot(x, y2, 'g', label='average value')212 plt.xlabel("Iteration")213 plt.ylabel("function value")214 plt.title("Artificial Fish Swarm algorithm for function optimization") 215 plt.legend()216 plt.show()运⾏程序:1if__name__ == "__main__":23 bound = np.tile([[-600], [600]], 25)4 afs = AFS(60, 25, bound, 500, [0.001, 0.0001, 0.618, 40])5 afs.solve()ObjFunction见。

人工鱼群算法课件

人工鱼群算法课件

面临的挑战与问题
局部最优解
人工鱼群算法容易陷入局部最优解,导致搜索过程停滞不前。
参数设置
人工鱼群算法的参数设置对搜索结果影响较大,如何合理设置参数 是关键问题。
适用性问题
人工鱼群算法在处理大规模、高维度问题时性能下降,需要改进算 法以适应更复杂的问题。
解决方案与建议
混合优化算法
将人工鱼群算法与其他 优化算法结合,如遗传 算法、粒子群算法等, 以提高搜索性能。
03
人工鱼群算法的实现过程
初始化
随机初始化鱼群
在解空间中随机生成一定数量的鱼, 每条鱼代表一个潜在的解。
设置初始参数
包括最大迭代次数、视野范围、步长 等,这些参数对算法的性能和收敛速 度有重要影响。
行为模拟
觅食行为
01
每条鱼根据自身的感知能力在解空间中随机游动,寻找更优的
解。
聚群行为
02
根据鱼群中其他鱼的分布情况,判断是否聚集到中心区域,以
自适应参数调整
根据搜索过程动态调整 人工鱼群算法的参数, 以避免陷入局部最优解 。
强化学习
借鉴强化学习的思想, 通过与环境的交互不断 调整策略,提高搜索性 能。
THANK YOU
详细描述
多群体协同进化策略将问题划分为多个子问题,并为每个子问题分配一个独立的鱼群进行优化。每个鱼群采用不 同的优化策略和参数,以适应其对应的子问题的特性。通过多群体协同进化,算法能够同时从多个角度探索解空 间,提高全局搜索能力和收敛速度。
混合优化策略
总结词
混合优化策略结合了多种优化算法的优点, 以提高人工鱼群算法的性能。通过将不同的 优化算法与人工鱼群算法相结合,可以弥补 人工鱼群算法的不足,提高其求解复杂问题 的能力。

人工鱼群算法共26页

人工鱼群算法共26页
▪ 基本思想
鱼群特点: 在一片水域中,鱼存在的数目最多的地方就是本水域中富 含营养物质最多的地方。
算法作用:全局择优 鱼群行为:觅食,聚群,追尾。
1
算法描述
2
人工鱼的视觉描述
其中Rand()函数为产生0到1之间 的随机数;Step为步长
3
序号 变量名
变量含义
1
N
人工鱼群个体大小
2
{Xi}
人工鱼个体的状态位置、Xi=(x1,x1,···,xn),其中xi=(1,2,···,n)为待 优化变量
23
▪ ⑴视野的改进 ▪ ⑵分段优化方法 ▪ ⑶混合优化方法
24
Thank you!
25
NO
Yi<Yj
NO
YES
Xi|next =Xi + rand * Step * X j X i
|| X
j X
||
i
n>=try_number YES
Xi|next =Xi + rand * Step
人工鱼Xi在其视野内随机 选择一个状态Xj,分别计算它 们的目标函数值进行比较,如 果发现Yj比Yi优,则Xi向Xj的 方向移动一步
否则,执行觅食行为
11

12

参数
人工鱼数 最大迭代次数 觅食最大试探次数
取值
50 50 100
参数
感知距离 拥挤度因子 移动步长
取值
1 0.618 0.1
13
14

参数
人工鱼数 最大迭代次数 觅食最大试探次数
取值
100 50 100
参数
感知距离 拥挤度因子 移动步长
取值
2.5 0.618 0.3

基于MATLAB的鱼苗自动计数方法与实现

基于MATLAB的鱼苗自动计数方法与实现

78•理论研究•文章编号:1673-887X(2020)07-0078-02基于MATLAB的鱼苗自动计数方法与实现王紫聪,多功昊,张航(天津农学院计算机与信息工程学院,天津300384)摘要在鱼苗养殖的过程中,饲养、运输、销售等环节均需对鱼苗进行定量计数。

传统的人工计数方法费时费力且准确率不高,文章提出了一种基于MATLAB图像处理实现鱼苗自动计数的方法。

首先对鱼苗图像进行灰度化处理,然后对图像进行滤波、去噪、阈值分割等处理,最后实现对鱼苗数量的自动计数。

结果表明,此方法具有较高的准确性。

关键词MATLAB;鱼苗计数;图像处理中图分类号TP391.4文献标志码A doi:10.3969/j.issn.1673-887X.2020.07.034 Automatic Counting Method and Realization of Fish Fry Based on MATLABWang Zicong,Duo Gonghao,Zhang Hang(Tianjin Agricultural University,Colle g el of Computer and Information Engineering,Tianjin300384,China)Abstract:In the process of fish fry breeding,the fish fry needs to be counted in feeding,transportation and sales.The traditional manual counting method is time-consuming,labor-intensive and the accuracy is not high.This paper proposes a method for automatic counting of fish fry based on MATLAB image processing.First,the collected fish fry images are grayed,then image filtering,denoising,threshold segmentation and other processing are performed,and finally the automatic counting of fish fry is achieved.The results show that this method has high accuracy.Key words:MATLAB,fish fry counting,image processing在鱼苗养殖的过程中,饲养、运输、销售等环节都需要对鱼苗进行定量计数。

人工鱼群算法综述

人工鱼群算法综述

人工鱼群算法综述人工鱼群改进算法研究综述摘要:人工鱼群算法源于对鱼群运动行为的研究,是一种新型的群体智能随机全局优化算法,人工鱼群算法(AFSA)起步较晚,还存在着许多不足之处。

因此本文主要通过阐述鱼群算法的基本理论的同时,对人工鱼群算法的改进方法进行文献综述,并根据这些改进方法指出了人工鱼群算法未来的改进与研究方向。

关键词:人工鱼群算法算法改进综述1.引言1.1 人工鱼群算法的基本概念人工鱼群算法是李晓磊等[1]人于2002年提出的一种基于动物自治体[2-3]的优化方法,是集群智能思想[4]的一个具体应用,该算法根据水域中鱼生存数目最多的地方就是本水域中富含营养物质最多的地方这一特点来模拟鱼群的觅食行为而实现寻优。

它的主要特点是不需要了解问题的特殊信息,只需要对问题进行优劣的比较,通过各人工鱼个体的局部寻优行为,最终在群体中使全局最优值突现出来,有着较快的收敛速度[5]。

人工鱼群算法主要利用鱼的三大基本行为:觅食、聚群和追尾行为,采用自上而下的寻优模式从构造个体的底层行为开始,通过鱼群中各个体的局部寻优,达到全局最优值在群体中凸显出来的目的[6]。

(1)觅食行为:这是鱼趋向食物的一种活动,一般认为它是通过视觉或味觉来感知水中的食物两或食物浓度来选择行动的方向[6]。

(2)聚群行为:大量或少量的鱼聚集成群,进行集体觅食和躲避敌害,这是它们在进化过程中形成的一种生存方式[6]。

(3)追尾行为:当某一条鱼或几条鱼发现食物时,它们附近的鱼会尾随而来,导致更远处的鱼也会尾随过来[6]。

人工鱼群算法就是通过模拟鱼类的觅食、聚群、追尾等行为在搜索域中进行寻优的。

1.2 人工鱼群算法的行为描述觅食行为:设置人工鱼当前状态,并在其感知范围内随机选择另一个状态,如果得到的状态的目标函数大于当前的状态,则向新选择得到的状态靠近一步,反之,重新选取新状态,判断是否满足条件,选择次数达到一定数量后,如果仍然不满足条件,则随机移动一步[6]。

人工鱼群算法收敛速度改进优化仿真

人工鱼群算法收敛速度改进优化仿真
算法可 以处理离散 、非 凸 的非线性 问题 找到 全局最 优解 ,共 同特点是在搜索 过程 中采 用随机搜 索 ,具有很强 的全局搜索 能力 ,国 内外众多研 究者都 在不 断研究 与探 索 ,使 其不 断发
展 与完 善。人 工鱼 群 算 法 (Artificial Fish Swarm Algorithm, AFSA)是浙江大学李 晓磊博 士[1-2]于 2002年通 过研究 鱼群 的行为特点 ,并应用 动物 自治体 的模 型,提 出的 一种 自下而 上 的新 型寻优模 型。鱼群算法时一种有效 的寻优算法 ,具有 并行 性 、简单性 、能很 快跳 出局部极值 、寻优速度 快 的特 点 ,
Artif icial Fish Swarm Algorithm Convergence Speed Im provem ent O ptim ization Sim ulation
LI Jun,LIANG Xi—ming
(School of Science,Beijing University of Civil Engineering and Architecture,Beijing 102600,China)
ABSTRACT :In the process of basic artificial fish sWaNTI algorithm updating,evolutionary direction and step size of artif icial f ish swalTn are of a certain randomness when they are evolved by foraging operator. Atthough it would help the f ish out of the local optimal,it seriously affects the evolution eff iciency of f ish populations and increases the com — putationa l complexity.To solve this problem ,the steepest descent method is embedded into the basic artif icial f ish swarm algor ithm ,and an improved artificial fish swarm algor ithm is proposed.W hen the artif icial f ish is updated with the cluster ing operator and the trailing operator,if there is no improvem ent,the artif icial f ish is updated with steepest descent method.The steepest descent method is embedded with better loca l search capability while preserving the for- aging operators in the clustering operator and the trailing operator to ensure the global searching ability of the algo— rithm a n d enhance the local searching ability of the ar tif icial f ish. The convergence rate of ar tif icia l f ish swarm algo— rithm is accelerated. The results of numerical experiments show that the im proved artif icial f ish swarm algorithm has faster convergence rate an d lower convergence rate when the computational complexity is reduced.

案例18:基于鱼群算法的函数寻优算法

案例18:基于鱼群算法的函数寻优算法

【注】原帖网址:/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所示,一虚拟人工鱼实体的当前位置为,它的视野范围为,位置为其在某时刻的视点所在的位置,如果该位置的食物浓度高于当前位置,则考虑向该位置方向前进一步,即到达位置;如果位置不比当前位置食物浓度更高,则继续巡视视野内的其他位置。

matlab 最优捕鱼策略

matlab 最优捕鱼策略
最优捕鱼策略
为保护人类赖以生存的自然环境,可再生资源(如渔业、林业等资 源)的开发必须适度。一种合理、简化的策略是,在实现可持续收获的前 提下,追求最大产量或最佳效益。 考虑对某种鱼的最优捕捞策略。假设这种鱼分4个年龄组:称一龄鱼、 二龄鱼、三龄鱼、四龄鱼。各年龄组每条鱼的平均重量分别为5.07, 11.55,17.86,22.99(克);各年龄组鱼的自然死亡率均为0.8(/年); 这种鱼季节性集中产卵繁殖,平均每条4龄鱼的产卵量为为1.109×105 (个),3龄鱼产卵量为这个数的一半, 2龄鱼和1龄鱼不产卵,产卵和 孵化期为每年的最后4个月;卵孵化并成活为1龄鱼,成活率为(1龄鱼条 数与产卵总量n之比)1.22×1011/(1.22×1011+n).渔业管理部门规定, 每年只允许在产卵孵化期的前8个月内进行捕捞作业。如果每年投入的捕 捞能力(如鱼船数、下网次数等)固定不变,这时单位时间捕捞量将与各 年龄组鱼群条数成正比,比例系数不妨称为捕捞强度系数。通常使用 13mm网眼的拉网,这种网只能捕捞3龄鱼和4龄鱼,其两个捕捞强度系 数之比为0.42:1。渔业上称这种方式为固定努力量捕捞。
各年龄组鱼群条数不变),并且在此前提下得到最高年收获量(捕捞总重 量)。
模型的假设
(1)假设只考虑一种鱼的繁殖和捕捞,鱼群增长过程中不 考虑鱼的迁入与迁出. (2)假设各年龄组的鱼在一年内的任何时间都会发生自然 死亡,产卵可在后四个月内任何时间发生. (3)假设3、4龄鱼全部具有生殖能力,或者虽然雄鱼不产 卵,但平均产卵量掩盖了这一差异. (4)假设各年龄组的鱼经过一年后,即进入高一级的年龄组, 但4龄鱼经过一年后仍视为4龄鱼. (5)假设对鱼的捕捞用固定努力量捕捞方式,每年的捕捞强 度系数保持不变,且捕捞只在前八个月进行.
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

function lhl_AFclc;clear all; close all;format longVisual = 2.5; %人工鱼的感知距离Step = 0.3; %人工鱼的移动最大步长N = 10; %人工鱼的数量Try_number = 50;%迭代的最大次数delta=0.618; %拥挤度因子a1 = -10; b1 = 10; a2 = -10; b2 = 10;d = [];%存储50个状态下的目标函数值;k = 0;m = 50;%迭代次数X1 = rand(N,1)*(b1-a1)+a1; %在-10~10之间,随机生成50个数;X2 = rand(N,1)*(b2-a2)+a2;X = [X1 X2];%X = ones(N,2);%for i = 1:N% X(i,1)=-10;% X(i,2)=10;%end% 人工鱼数量,两个状态变量X1和X2;%计算50个初始状态下的;for i = 1:Nwww = [X(i,1),X(i,2)];d(i) = maxf(www);end%公告牌用于记录人工鱼个体的历史最好状态[w,i] = max(d); % 求出初始状态下的最大值w和最大值的位置i;maxX = [X(i,1),X(i,2)]; % 初始公告板记录,最大值位置;maxY = w; % 初始化公告板记录,最大值;figurex = []; figurey = []; figurez = [];figurex(numel(figurex)+1) = maxX(1); % 将maxX(1)放入figurex中,figurey(numel(figurey)+1) = maxX(2); % numel返回数组或者向量中所含元素的总数,matlab数组下标默认是从1开始的figurez(numel(figurez)+1) = maxY;while(k<m)for i = 1:NXX = [X(i,1),X(i,2)]; %拿出其中一条鱼来看他的四种行为判断%%%%%%第一种行为:聚群行为:伙伴多且不挤,就向伙伴中心位置移动%群聚行为是伙伴的中心点,凸规划下,中心点一定还在约束内%群聚行为不是一种maxf(Xc)的比较,就是看伙伴位置nf1=0;Xc=0;label_swarm =0; %群聚行为发生标志for j = 1:NXX_1 = [X(j,1), X(j,2)];if (norm(XX_1-XX)<Visual) % norm函数求向量XXX-XX的范数,由于二维向量,2或者省略都可以nf1 = nf1+1;Xc = Xc+XX_1;endendXc=Xc-XX; %需要去除XX本身;nf1=nf1-1;Xc = Xc/nf1; %此时Xc表示XX感知范围其他伙伴的中心位置;if((maxf(Xc)/nf1 > delta*maxf(XX)) && (norm(Xc-XX)~=0))XXR1=rand*Step*(Xc-XX)/norm(Xc-XX);XXnext1=XX+XXR1;if(XXnext1(1) > b1)XXnext1(1) = b1;endif(XXnext1(1) < a1)XXnext1(1) = a1;endif(XXnext1(2) > b2)XXnext1(2) = b2;endif(XXnext1(2) < a2)XXnext1(2) = a2;endlabel_swarm =1;temp_y_XXnext1=maxf(XXnext1);elselabel_swarm =0;temp_y_XXnext1=-inf;end%%%%%%%%%%%%第二种行为:追尾行为:周围伙伴有最大值且附近不挤,向其伙伴方向移动%追尾行为追寻伙伴行为,还是在约束内temp_maxY = -inf; %按照理论来说这块应该初始化为-无穷小,label_follow =0;%追尾行为发生标记for j = 1:NXX_2 = [X(j,1),X(j,2)];if((norm(XX_2-XX)<Visual) && (maxf(XX_2)>temp_maxY))temp_maxX = XX_2;temp_maxY = maxf(XX_2);endendnf2=0;for j = 1:NXX_2 = [X(j,1),X(j,2)];if(norm(XX_2-temp_maxX)<Visual)nf2=nf2+1;endendnf2=nf2-1;%去掉他本身if((temp_maxY/nf2)>delta*maxf(XX) && (norm(temp_maxX-XX)~=0)) %附近有Yj最大的伙伴,并且不太拥挤XXR2=rand*Step*(temp_maxX-XX)/norm(temp_maxX-XX);%rand不是随机反向,是随机步长XXnext2 = XX+XXR2;if(XXnext2(1) > b1)XXnext2(1) = b1;endif(XXnext2(1) < a1)XXnext2(1) = a1;endif(XXnext2(2) > b2)XXnext2(2) = b2;endif(XXnext2(2) < a2)XXnext2(2) = a2;endlabel_follow =1;temp_y_XXnext2=maxf(XXnext2);elselabel_follow =0;temp_y_XXnext2=-inf;end%%%%%%%%%%%%第三种行为:觅食行为:与前两个行为不同,觅食和随机行为都是找附近的状态,而不是找附近的同伴%觅食和随机行为可能出现超出约束,所以,XX_3和XX_4是不一样的%觅食行为和群聚行为、追尾行为是不一样的,觅食行为是一种根据状态来判断的行为,群聚和追尾是根据伙伴来判断的行为label_prey =0; %判断觅食行为是否找到优于当前的状态for j = 1:Try_numberR1V=Visual*(-1+2*rand(2,1)');XX_3 = XX+R1V;if(XX_3(1) > b1) % 下面这四个是一套,如果超出约束条件,就选值为边界条件XX_3(1) = b1;endif(XX_3(1) < a1)XX_3(1) = a1;endif(XX_3(2) > b2)XX_3(2) = b2;endif(XX_3(2) < a2)XX_3(2) = a2;endif(maxf(XX)<maxf(XX_3))XXR3=rand*Step*(XX_3-XX)/norm(XX_3-XX);XXnext3 = XX+XXR3;if(XXnext3(1) > b1) % 下面这四个是一套,如果超出约束条件,就选值为边界条件XXnext3(1) = b1;endif(XXnext3(1) < a1)XXnext3(1) = a1;endif(XXnext3(2) > b2)XXnext3(2) = b2;endif(XXnext3(2) < a2)XXnext3(2) = a2;endlabel_prey =1;break;endendtemp_y_XXnext3=max(XXnext3);if(label_prey ==0)temp_y_XXnext3=-inf;end%%%%%%%%%%%%行为选择if((label_swarm==0) && (label_follow==0) && (label_prey ==0))%聚群和追尾鱼太多太拥挤,都不发生;觅食觅不到更好的,造成三种行为都不发生。

%如果前三种行为都没有发生出现,必然是发生随机行为R2S=Step*(-1+2*rand(2,1)');temp_XX = XX+R2S;if(XX(1) > b1) % 下面这四个是一套,如果超出约束条件,就选值为边界条件XX(1) = b1;endif(XX(1) < a1)XX(1) = a1;endif(XX(2) > b2)XX(2) = b2;endif(XX(2) < a2)XX(2) = a2;endelse%三种行为找最优if(temp_y_XXnext1 > temp_y_XXnext2)if(temp_y_XXnext1 > temp_y_XXnext3)temp_XX = XXnext1;elsetemp_XX = XXnext3;endelseif(temp_y_XXnext2 > temp_y_XXnext3)temp_XX = XXnext2;elsetemp_XX = XXnext3;endendendXX=temp_XX;X(i,1) = XX(1);X(i,2) = XX(2);%%%%%%end%至此,所有人工鱼,完成一次行为判断和移动%这块是更新公告牌信息for i = 1:NXXX = [X(i,1),X(i,2)];if (maxf(XXX)>maxY)maxY = maxf(XXX);maxX = XXX;figurex(numel(figurex)+1) = maxX(1);figurey(numel(figurey)+1) = maxX(2);figurez(numel(figurez)+1) = maxY;endendx=X(:,1)';y=X(:,2)';plot(x,y,'*r');axis([-10 10 -10 10]);k = k+1endmaxXmaxYplot3(figurex,figurey,figurez,'-g.')function y = maxf(QQ)%目标函数y=(sinX1/X1)*(sinX2/X2),这块可以指定自己的目标函数%输入二维向量,输出一个值y = (sin(QQ(1))/QQ(1))*(sin(QQ(2))/QQ(2));。

相关文档
最新文档