基于精英反向策略的麻雀搜索算法1-附代码
基于精英反向学习策略的麻雀搜索算法
1.反向学习策略
反向学习策略是由 Tizhoosh 于 2005 年提出的,目前已在 GA、DE、ACO 和 BBO 等群体智能优化算法中得到了成功的应用。
定义1. 反向点。假设在 [ l , u ] [l,u] [l,u]上存在数 x x x,则 x x x 的反向点定义为 x ′ = l + u - x x' = l + u - x x′=l+u-x。将反向点的定义扩展到 D D D 维空间,设 p = ( x 1 , x 2 , … , x D ) p = (x_1 ,x_2 ,…,x_D ) p=(x1,x2,…,xD)为 D D D 维空间中的一个点,其中 x i ∈ [ l i , u i ] x_i ∈[l_i ,u_i ] xi∈[li,ui], i = 1 , 2 , … , D i =1,2,…,D i=1,2,…,D,则其反向点 p ′ = ( x 1 ′ , x 2 ′ , … , x D ′ ) p' = (x'_1 ,x'_2 ,…,x'_D ) p′=(x1′,x2′,…,xD′),其中 x i ′ = l i + u i − x i x'_i = l_i +u_i-x_i xi′=li+ui−xi 。
2.精英反向学习
反向解的引入,可以扩大算法的搜索区域,但对那些原解适应度值大于反向解适应度值的个体,对其进行反向区域的搜索,浪费时间,则应加强其领域搜索。而对原解适应度值小于反向解适应度值的个体,对其进行反向区域的搜素价值要高于其领域的开发价值。
定义: 精英(elite)。设 x i ( t ) = ( x i 1 , x i 2 , … , x i D ) x_i (t) = (x_{i1} ,x_{i2} ,…,x_{iD} ) xi(t)=(xi1,xi2,…,xiD) 是第 t t t 次迭代的一个解,其反向解为 x i ( t ) ∗ x_i(t)^* xi(t)∗, f ( x ) f(x) f(x) 为目标函数。当 f ( x i ( t ) ) ≥ f ( x i ( t ) ∗ ) f(x _i(t)) ≥f(x_i(t)^*) f(xi(t))≥f(xi(t)∗)时,称 x i ( t ) x_i(t) xi(t) 为第 t t t 次迭代的精英个体,记为 N i ( t ) N_i(t) Ni(t) ;当 f ( x i ( t ) ) < f ( x i ( t ) ∗ ) f(x_i(t)) < f(x_i(t)^*) f(xi(t))<f(xi(t)∗) 时,称 x t ( t ) x_t(t) xt(t) 为第 t t t 次迭代的普通个体,记为 Q i ( t ) Q_i (t) Qi(t)。若精英群体的规模为 p ( 1 < p ≤ n , n 为解的总个数 ) p(1 <p ≤n,n 为解的总个数) p(1<p≤n,n为解的总个数) 时,则 p p p 个精英个体可表示为 { N 1 ( t ) , N 2 ( t ) , … , N p ( t ) } ∈ { x 1 ( t ) , x 2 ( t ) , … , x n ( t ) } \{N _1 (t),N_2 (t),…,N_p (t)\}\in \{x 1 (t),x2 (t),…,x n (t)\} {N1(t),N2(t),…,Np(t)}∈{x1(t),x2(t),…,xn(t)}
定义: 精英反向解(elite opposite solution) 设
x
i
j
x_{ij}
xij 为普通个体
x
i
x_i
xi在
j
j
j 维上的值,则其反向解可定义为:
x
i
j
∗
(
t
)
=
k
(
a
j
(
t
)
+
b
j
(
t
)
)
−
x
i
j
(
t
)
x_{ij}^*(t) = k(a_j(t) + b_j(t)) - x_{ij}(t)
xij∗(t)=k(aj(t)+bj(t))−xij(t)
式中:k 是介于 0~1 的随机数;
a
j
(
t
)
=
m
i
n
(
N
1
j
(
t
)
,
.
.
.
,
N
p
j
(
t
)
)
;
b
j
(
t
)
=
m
a
x
(
N
1
j
(
t
)
,
.
.
.
,
N
p
j
(
t
)
)
a_j(t) = min(N_{1j}(t),...,N_{pj}(t));b_j(t) = max(N_{1j}(t),...,N_{pj}(t))
aj(t)=min(N1j(t),...,Npj(t));bj(t)=max(N1j(t),...,Npj(t))
[
a
j
(
t
)
,
b
j
(
t
)
]
[a_j(t),b_j(t)]
[aj(t),bj(t)]为精英群体所构造的区间。
2.基于精英反向学习策略的麻雀搜索算法
基础麻雀算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/108830958
该改进主要是在初始化种群时,利用反向学习策略初始化种群
算法流程
Step1: 利用精英反向学习策略初始化种群,迭代次数,初始化捕食者和加入者比列。
Step2:计算适应度值,并排序。
Step3:麻雀更新捕食者位置。
Step4:麻雀更新加入者位置。
Step5:麻雀更新警戒者位置。
Step6:计算适应度值并更新麻雀位置。
Step7:是否满足停止条件,满足则退出,输出结果,否则,重复执行Step2-6;
3.算法结果:
4.Matlab
5.Python
相关文章
- Google 内部的 Python 代码风格指南
- pycharm怎么编译代码_python编程
- R语言中基于混合数据抽样(MIDAS)回归的HAR-RV模型预测GDP增长|附代码数据
- 网站代码返回410,快速删除页面
- 让AI生成AI绘画提示词,OpenAI最新成果ChatGPT被网友玩坏了!还会写代码修bug作诗
- 基于Python接口自动化测试框架+数据与代码分离实战(优化篇)
- 基于出租车GPS轨迹数据的研究:出租车行程的数据分析|附代码数据
- WordPress 中一行代码即可控制函数的输出并存到变量中
- 基于JAVA的违章查询助手数据调用代码实例详解编程语言
- 在哪里创建Oracle代码(oracle代码在哪里写)
- 在Redis项目中构建基于代码的应用(redis项目中代码应用)
- rubyonrails代码技巧
- 正则表达式匹配中文与双字节的代码
- 收集的一些Array及String原型对象的扩展实现代码
- 基于Jquery的动态创建DOM元素的代码
- 基于Jquery的将DropDownlist的选中值赋给label的实现代码
- 基于json的jquery地区联动效果代码
- 用PHP写的基于Memcache的Queue实现代码
- jquery判断浏览器类型的代码
- 基于C中一个行压缩图的简单实现代码
- jsp中一个页面引入另一个页面的实现代码
- 基于jquery异步传输json数据格式实例代码
- 日历显示读出输入的年月的java代码
- python复制文件代码实现
- Java基于swing实现的弹球游戏代码
- 深入分析在Python模块顶层运行的代码引起的一个Bug