人工水母搜索算法--JS
1. 人工水母算法原理背景
水母生活在世界上不同深度和温度的水中。它们酷似钟状,一些水母的直径小于1cm,然有些水母直径则非常大。它们有各种各样的颜色、大小和形状。大多数水母偏好海洋环境。它们进食的方式有两种:1.利用触手把食物送进嘴里;2.以触手过滤水中的微小的浮游生物,经口腕沟靠纤毛作用送入口.然而,它们捕食方式也有两种:1.食用洋流带来的任何食物(被动);2.主动捕食猎物,利用触手刺中猎物,令其动弹不得(主动)。、
水母利用触手刺中猎物,释放毒素,令其麻木。它们不会攻击人,但是触碰到它们的人可能会被蛰死。有些水母刺人很疼,但是不是致命的。表现的症状有引起疼痛、红肿、瘙痒、麻木等。然而,箱水母,又称海黄蜂,非常危险,致人死亡。这类水母多数出现在澳大利亚、菲律宾沿海水域,印度洋和太平洋中部。当它们聚集在一起形成水母潮时,才是最危险的。
水母可以自己控制移动。它们下侧像一把伞一样合拢,利用体内喷水反射前进。尽管它们拥有这种能力,但是它们大多数漂流在水中依靠洋流和潮汐运动。当条件有利时,水母会形成群,这种被称为水母潮。水母是一种脆弱的生物,维持水母潮的关键是它们相对洋流的方向,才不至于被搁浅。
水母潮形成的因素包括:洋流、可利用的营养物、氧气的可用性、捕食和温度等。在这些因素中,洋流是水母潮形成的主要因素。因为水母可以生活在高咸度和低氧区域,所以它们无须和其他生物竞争食物。咸水含有大量的碘,有利于水母息肉的产生。海水温度的上升,有利于水母潮的产生。因为在这种情况下,水母更容易存活。总而言之,水母潮的形成离不开生态系统和洋流地影响。
洋流(Ocean Current),即海流,也称洋面流,是指海水沿着一定方向有规律的具有相对稳定速度的水平流动,是从一个海区水平或垂直地向另一个海区大规模的非周期性的运动,是海水的主要运动形式。洋流的尺度非常大。例如,在开阔的海洋中,洋流移动大约是次中等尺度;它们的大小可能只有几百米左右的中尺度特征,或者少数可能在几十公里左右。它们可能横穿或环绕整个海洋盆地,就像墨西哥湾流(北大西洋)、黑潮流(太平洋)和阿古拉斯洋流(印度洋)。形成洋流地主要因素是太阳辐射和海平面地风。
水母自身的运动和洋流的运动促成了水母潮的形成,这种现象在海洋中随处可见。水母去的地方,食物数量各不相同。因此,通过食物比例的比较,确定最佳位置。
2. 人工水母算法数学模型
2.1 模型假设
2020年Chou等人提出人工水母算法.该算法基于三个理想化规则:
- 水母要么跟随洋流,要么在群内自身移动,这两者运动由时间控制机制切换;
- 在海洋中,水母寻找食物。它们更多被食物数量多的位置吸引;
- 找到的食物数量由该位置和对应的目标函数决定。
2.2 洋流
因为洋流中含有大量水母所需的营养物,所以水母才会被吸引过来。洋流的方向由水母种群位置的平均值和当前水母最好位置决定。洋流方向的定义如下:
\]
Set \(df=e_c\mu\)
即,
\]
其中,\(n_{pop}\)是水母种群数目;\(X^*\)表示当前水母种群中最好的位置;\(e_c\)是吸引力因子;\(\mu\)表示种群的平均位置;\(df\)是当前最好位置于平均位置的差分。
基于水母所有维度的正态分布假设,平均位置的\({\pm\beta\sigma}\)领域内包含所有水母的可能性,其中\({\sigma}\)是分布的标准差。因此,
\]
Set \({\sigma={rand}^{\alpha}(0,1)\times\mu}\)
因此,
\]
对上式简化如下:
\]
其中,\({e_c=\beta\times{rand}(0,1)}\)
从而,
\]
每个水母现在位置的更新公式如下:
\]
即,
\]
其中,\({\beta>0}\)是分布系数,\({\vec{trend}}\)的模有关。基于数值实验中的敏感度分析,\({\beta=3}\).
2.3 水母种群
在水母种群中,有两种运动方式:主动运动和被动运动。水母群刚刚形成,多数水母进行被动运动,经过一段时间后,它们逐渐进行主动移动。
被动运动:水母围绕自身位置移动,位置更新公式如下:
\]
其中,\(U_b\)和\(L_b\)分别表示搜索空间的上下界;\(\gamma>0\)是移动系数,与水母位置周围的运动长度有关。基于数值实验中的敏感度分析,\(\gamma=0.1\).
为了模拟主动运动,随机选取两个水母位置\({i,j}\)来决定移动方向。当\({j}\)位置的食物数量超过\({i}\)位置的食物数量,则后者朝前者移动。反之,远离前者。所以,种群中的所有的水母朝更好的位置发现食物。
1.移动方向公式如下:
\]
其中,\(\vec{Step}={rand}(0,1)\times\vec{Direction}\)
\begin{cases}
X_j(t)-X_i(t), & \text{if $f(X_i)\geq{f(X_j)}$} \\
X_i(t)-X_j(t), & \text{if $f(X_i)\leq{f(X_j)}$}
\end{cases}
\]
注意:这里适应度函数值是最小值。
其中,\(f\)是目标函数。
因此,
\]
2.4 时间控制机制
洋流中含有大量的营养物,所以引来水母。随着时间的流逝,越来越多的水母聚集在一起形成水母群。随着洋流中温度或风力的变化,种群中的水母朝另外洋流移动,并导致另外的水母群形成。在水母群中有被动运动和主动运动。刚开始水母侧重被动运动,随着时间的流逝,主动运动越来越受水母的欢迎。
介于这种状况,作者引入时间控制机制。时间控制机制利用时间控制函数\(c(t)\)和\(c_0\)控制洋流和种群内部运动之间的转换。时间控制函数是随时间从0-1波动的随机值。公式如下:
\]
其中,\(C_0=0.5\). 若\(C(t)\)值大于0.5进行洋流,反之进行群内运动。其他,参数和别的算法一样。
3. 初始化种群
水母种群通常都是随机初始化的。这种方法的缺陷是收敛速度慢,易陷入局部最优且种群多样性低。为了提高初始化种群多样性,许多混沌映射被开发。比如,logistic map、tent map、Liebovitch map. 其中,logistic是最简单的一种混沌映射。这种初始化的种群比随机初始化种群更具有多样性。映射公式如下:
\]
\(X_i\)是第\(i\)个水母位置的逻辑混沌映射值;\(X_0\)用于产生初始种群,\(X_0\in(0,1),X_0\notin\{0.0,0.25,0.5,0.75,1.0\},\eta=0.4\)
4. 边界处理
海洋遍布世界。地球近似球形,所以当水母移动超出搜索边界,将会超边界相反的方向移动。公式如下:
X^{'}_{i,d}=(X_{i,d}-U_{b,d})+L_b(d), &\text{ if $X_{i,d}>U_{b,d}$}\\
X^{'}_{i,d}=(X_{i,d}-L_{b,d})+U_b(d), &\text{ if $X_{i,d}<U_{b,d}$}
\end{cases}
\]
其中,\(X_{i,d}\)是第\(i\)个水母位置\(d\)维的分量;
人工水母搜索算法--JS的更多相关文章
- 人工水母搜索算法—matlab代码
clc clear foj = @ Sphere; Lb = -100; % 搜索空间下界 Ub = 100; % 搜索空间上界 N_iter = 1000; % 最大迭代次数 n_pop = 50; ...
- 【转】第4篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:委托回调方法分析
作者: 牛A与牛C之间 时间: 2013-11-18 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第4篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- 【转】3篇:Xilium CefGlue 关于 CLR Object 与 JS 交互类库封装报告:官方原生方法分析
作者: 牛A与牛C之间 时间: 2013-11-17 分类: 技术文章 | 暂无评论 | 编辑文章 主页 » 技术文章 » 第3篇:Xilium CefGlue 关于 CLR Object 与 JS ...
- CefGlue中js与C#交互(实现mp3播放)
一.C#调用js 1.通过CefFrame.ExecuteJavaScript(string code, string url, int line)方法执行JS private void browse ...
- 【腾讯Bugly干货分享】JSPatch 成长之路
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/579efa7083355a9a57a1ac5b Dev Club 是一个交流移动 ...
- js搜索算法——二分搜索
二分搜索算法就是折半查找,是一种效率较高的查找方法.前提条件是要查找的数组是有序的.算法的实现还是相对简单的: function binarySearch(arr,item){ var min = 0 ...
- JS脚本代替人工输入
最近接到了个任务,对某个网页上的1000个item填写相同的text,text的内容相同. 这显然是机械动作呀,干脆写个工具,用脚本代替人工操作. 浏览器按F12,找到console,输入写好的脚本, ...
- js 人工获取年月日
var date = new Date(); var months = new Array("01", "02", "03", " ...
- 通过jquery js 实现幻灯片切换轮播效果
观察各个电商网址轮播图的效果,总结了一下主要突破点与难点 1.->封装函数的步骤与具体实现 2->this关键字的指向 3->jquery js函数熟练运用 如animate 4-& ...
随机推荐
- [spojSUBLEX]Lexicographical Substring Search
建立后缀自动机,对于同一个节点,出现次数是相同的(right的大小),同时满足单调性(长度越长出现次数越少),所以只需要考虑最长的串即可. PS:似乎也并不需要求依次后缀的max,不知道为什么-- 1 ...
- BehaviorTree.CPP行为树BT的选择节点(四)
Fallback 该节点家族在其他框架中被称为"选择器Selector"或"优先级Priority". 他们的目的是尝试不同的策略,直到找到可行的策略. 它们具 ...
- 如何使用Docker构建开发环境
我们在开发中都会遇到这样的问题:在本地开发好功能后,部署到服务器,或者其他人拉到本地接着开发时,会出现功能无法使用的情况. 这些异常情况,大多数时候是因为系统不同而导致的依赖差异.因此,为了解决这个问 ...
- Codeforces 547D - Mike and Fish(欧拉回路)
Codeforces 题目传送门 & 洛谷题目传送门 首先考虑将题目中的条件转化为图论的语言.看到"行""列",我们很自然地想到二分图中行.列转点,点转 ...
- 如何使用scp在Linux服务器的后台传输文件?
目录 一.上传 常规操作 建议 后台运行 二.下载 两台服务器间文件如何传输?对于小文件,可以先从Linux服务器传到window,再传到另一台服务器.对于大的文件,如测序数据.比对文件等.这样的方法 ...
- [Linux]非root的R环境被conda破坏后如何恢复?
记录说明 这篇文章本来是用来记录Linux非root环境下安装PMCMRplus包折腾过程,但后来试过了各种方法安装不上这个R包后,我换上了Miniconda来安装.经前人提醒,一开始安装Minico ...
- fastq文件基本信息统计工具
之前写的一个小工具,写的很简陋,名字取的也很随意就叫skr,哈哈.主要是fq转fa.合并多个染色体的vcf文件等,功能不多(主要是C写起来太操蛋了T_T),通常我也只用来统计fastq文件信息: 这里 ...
- EXCEL-对筛选出(单独手动隐藏行还是在统计范围内)的表格数据进行统计
=SUBTOTAL(3,A1:A5) #计算筛选出的表格中A1:A5中有几个值. =SUBTOTAL(3,I71:I21447) ,在I71:I21447之间计数,会自动略去没有筛选上的隐藏单元格 ...
- PHP识别二维码(php-zbarcode)
PHP识别二维码(php-zbarcode) 标签: php二维码扩展 2015-11-06 17:12 609人阅读 评论(0) 收藏 举报 分类: PHP(1) Linux 版权声明:本文为博 ...
- 二叉树——Java实现
1 package struct; 2 3 interface Tree{ 4 //插入元素 5 void insert(int value); 6 //中序遍历 7 void inOrder(); ...