智能优化算法:纵横交叉算法-附代码

文章目录

  • 智能优化算法:纵横交叉算法-附代码
    • 1.算法原理
      • 1.1 横向交叉操作
      • 1.2 纵向交叉操作
    • 2.算法结果
    • 3.参考文献
    • 4.Matlab代码
    • 5.Python代码

摘要:纵横交叉算法(Crisscross optimization algorithm,CSO) 是一种全新的基于种群的随机搜索算法。有两种不同的交叉方式,能较好地解决一般智能算法存在的局部最优问题。

1.算法原理

纵横交叉算法在迭代过程中每一代都会进行横向交叉和纵向交叉两种交叉方式,从而使得种群中某些陷入维局部最优的维有机会跳出迭代。纵横交叉算法每次交叉后得出的解称为中庸解 ( MShc,MSvcMS_{hc}, MS_{vc}MShc​,MSvc​ ) ,通过引入竞争算子,使得这两种交叉方式有机的结合起来:每次交叉操作之后都会进入竞争算子,与父代进行竞争,只有比父代更优秀的粒子会被保留下来进入下次迭代,得出的解称为占优解 ( DShc,DSvcDS_{hc} , DS_{vc}DShc​,DSvc​) 。

1.1 横向交叉操作

横向交叉类似于 GA 的交叉操作,是在种群中两个不同个体粒子相同维之间进行的一种算数交叉。假设父代个体粒子 X(i)X ( i )X(i) 和 X(j)X ( j )X(j) 的第 ddd 维进行横向交叉,则它们产生子代的公式如下:
MShc(i,d)=r1∗X(i,d)+(1−r1)∗X(j,d)+c1∗(X(i,d)−X(j,d))(1)MS_{hc}(i,d) =r_1*X(i,d) + (1 -r_1)*X(j,d)+c_1*(X(i,d)-X(j,d))\tag{1} MShc​(i,d)=r1​∗X(i,d)+(1−r1​)∗X(j,d)+c1​∗(X(i,d)−X(j,d))(1)

MShc(j,d)=r1∗X(j,d)+(1−r1)∗X(i,d)+c1∗(X(j,d)−X(i,d))(2)MS_{hc}(j,d) =r_1*X(j,d) + (1 -r_1)*X(i,d)+c_1*(X(j,d)-X(i,d))\tag{2} MShc​(j,d)=r1​∗X(j,d)+(1−r1​)∗X(i,d)+c1​∗(X(j,d)−X(i,d))(2)

式中: r1,r2r_1 , r_2r1​,r2​ 是 [0, 1] 之间的随机数; c1,c2c_1 , c_2c1​,c2​ 是 [ - 1, 1] 之间的随机数; X(i,d),X(j,d)X ( i , d ), X ( j , d )X(i,d),X(j,d)分别是父代种群中个体粒子 X(i)X ( i )X(i) 和 X(j)X ( j )X(j) 的第 ddd维; MShc(i,d)MS_{hc} ( i , d )MShc​(i,d)和 MShc(j,d)MS_{hc} ( j , d )MShc​(j,d) 分别是X(i,d)X ( i , d )X(i,d) 和 X(j,d)X ( j , d )X(j,d) 通过横向交叉产生的第 ddd 维子代。

不同个体粒子的相同维度的上下限范围是相同的,从社会学的角度来看,式 (1) 中的 r1∗X(i,d)r_1 * X ( i , d )r1​∗X(i,d)是粒子 X(i)X ( i )X(i) 的记忆项,是粒子本身的当前最优值。(1−r1)∗X(j,d)(1 - r_1 )*X ( j , d )(1−r1​)∗X(j,d) 是粒子 X(i)X ( i )X(i) 和 X(j)X ( j )X(j) 的群体认知项,表示了不同粒子间的相互影响。这两项通过惯性权重因子r1r_1r1​ 较好的结合在一起。 c1c_1c1​ 是学习因子,第三项c1∗(X(i,d)−X(j,d))c_1 *( X ( i , d ) - X ( j , d ))c1​∗(X(i,d)−X(j,d)) 可以增大搜索区间,在边缘寻优。横向交叉操作完成后,得到的中庸解 MShc(i,d),MShc(j,d)MS_{hc} ( i , d ),MS_{hc} ( j , d )MShc​(i,d),MShc​(j,d) 必须分别与父代粒子 X(i),X(j)X ( i ), X ( j )X(i),X(j) 的适应度比较,只有适应度更好的中庸解才可以保留下来,成为占优解 DShcDS_{hc}DShc​ ,参与下一次迭代。

1.2 纵向交叉操作

纵向交叉是种群中一个粒子的两个不同的维之间进行的一种算数交叉。由于不同维元素的取值范围不同,因而交叉前须将两维进行归一化处理,并且为了使已陷入维局部最优而停滞的那一维跳出局部最优而又不破坏另外一维的信息,每次纵向交叉操作只产生一个子代粒子,只对其中一维进行更新。

假定粒子 X(i)X ( i )X(i) 的第 d1d_1d1​ 维和第 d2d_2d2​ 维是参与纵向交叉,根据公式 (3) 产生中庸解 MSvc(i,d1)MS vc ( i , d_1 )MSvc(i,d1​) 。
MSvc(i,d1)=r∗X(i,d1)+(1−r)∗X(i,d2),i∈N(1,M),d1,d2∈N(1,D)(3)MS_{vc}(i,d_1)=r*X(i,d_1)+(1 - r)*X(i,d_2),i\in N(1,M),d_1,d_2\in N(1,D) \tag{3} MSvc​(i,d1​)=r∗X(i,d1​)+(1−r)∗X(i,d2​),i∈N(1,M),d1​,d2​∈N(1,D)(3)
式中: r∈[0,1]r \in [0,1]r∈[0,1] ; MSvc(i,d1)MS_{vc} ( i , d_1 )MSvc​(i,d1​) 是个体粒子 X(i)X ( i )X(i) 的第 d1d_1d1​ 维和第 d2d_2d2​ 维通过纵向交叉产生的第 d1d_1d1​ 维后代。

式 (3) 中的第一项是粒子 X(i)X ( i )X(i) 的第 d1d_1d1​ 维的记忆项,第二项是粒子 X(i)X ( i )X(i) 的第 d1d_1d1​ 维和第 d2d_2d2​ 维相互影响,通过惯性权重因子 rrr 结合在一起。这样得到的中庸解MSvc(i,d1)MS_{vc} ( i , d_1 )MSvc​(i,d1​)不但包含父代粒子 X(i)X ( i )X(i) 的第 d1d_1d1​ 维的信息,还依一定概率含有 X(i)X ( i )X(i) 的第 d2d_2d2​ 维信息,并不会破坏 X(i)X ( i )X(i)的第 d2d_2d2​ 维信息。中庸解 MSvc(i,d1)MS_vc ( i , d_1 )MSv​c(i,d1​) 与父代粒子X(i)X ( i )X(i) 比较适应度,较好的保留下来作为占优解 DSvcDS_{vc}DSvc​ ,进行下一次迭代。

CSO 的操作流程可总结如下:
1)根据具体的问题初始化种群
2)执行横向交叉,然后执行竞争算子,得到 DSh 作为纵向交叉的父代
3)执行纵向交叉,然后执行竞争算子,得到 DSv 作为下一次横向交叉的父代
4)判断是否达到最大迭代次数或者指定的结束条件,如果是,则终止算法,否,
则转到步骤 2)。

2.算法结果

3.参考文献

[1] 孟安波, 胡函武, 刘向东. 基于纵横交叉算法优化神经网络的负荷预测模型[J]. 电力系统保护与控制, 2016, 44(07):102-106.

4.Matlab代码

5.Python代码

个人资料介绍

智能优化算法:纵横交叉算法-附代码相关推荐

  1. 智能优化算法:闪电搜索算法-附代码

    智能优化算法:闪电搜索算法-附代码 文章目录 智能优化算法:闪电搜索算法-附代码 1.算法原理 1.1 过渡放电体 1.2 空间放电体 1.3 引导放电体 2.算法结果 3.参考文献 4.Matlab ...

  2. 智能优化算法:布谷鸟搜索算法-附代码

    智能优化算法:布谷鸟搜索算法-附代码 文章目录 智能优化算法:布谷鸟搜索算法-附代码 1.算法原理 2.算法结果 3.参考文献 4.Matlab代码 摘要:谷鸟搜索算法(cuckoo search , ...

  3. 基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码

    基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码 文章目录 基于灰狼算法优化支持向量机的数据分类算法及其MATLAB实现-附代码 1 GWO-SVM 模型 1.1 灰狼优化器GWO ...

  4. 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码

    基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 文章目录 基于蝙蝠算法优化BP神经网络的数据分类算法及其MATLAB实现-附代码 1 蝙蝠算法与BP神经网络分类模型 1.1 蝙 ...

  5. 相位 unwrap 与 wrap 算法详解(附代码)

    相位 unwrap 与 wrap 算法详解(附代码) 最近接手了一个项目,光通信方面的,我负责编写初测结果的数据处理算法,其中有一个算法叫做 unwrap 与 wrap,之前没有听说过.通过询问同事与 ...

  6. 数据挖掘领域十大经典算法之—SVM算法(超详细附代码)

    相关文章: 数据挖掘领域十大经典算法之-C4.5算法(超详细附代码) 数据挖掘领域十大经典算法之-K-Means算法(超详细附代码) 数据挖掘领域十大经典算法之-Apriori算法 数据挖掘领域十大经 ...

  7. 二分查找算法详解(附代码)

    二分查找算法详解(附代码) 注: 现有一个升序 不重复的数组 查询target是否在此数组中并返回序号 使用条件 使用二分算法的两个条件: 有序 不重复 混淆处 二分算法两种方式容易弄混淆的地方:就是 ...

  8. 数据挖掘领域十大经典算法之—AdaBoost算法(超详细附代码)

    相关文章: 数据挖掘领域十大经典算法之-C4.5算法(超详细附代码) 数据挖掘领域十大经典算法之-K-Means算法(超详细附代码) 数据挖掘领域十大经典算法之-SVM算法(超详细附代码) 数据挖掘领 ...

  9. 数学建模——智能优化之遗传算法详解Python代码

    数学建模--智能优化之遗传算法详解Python代码 import numpy as np import matplotlib.pyplot as plt from matplotlib import ...

  10. 麻雀优化算法_多种智能优化算法应用案例分享-附代码

    1.智能优化算法应用:基于灰狼算法的Otsu图像多阈值分割 智能优化算法应用:基于灰狼算法的Otsu图像多阈值分割-附代码_Jack旭的博客-CSDN博客​blog.csdn.net 2.智能优化算法 ...

最新文章

  1. 大数据时代:从1.0到3.0 | 专访清华社会学系教授罗家德
  2. 微软宣布MySQL和PostgreSQL的Azure数据库服务正式可用
  3. 006_P名称空间的属性注入
  4. UOJ #588. 图图的旅行
  5. 电脑开机后,就会自动运行chkdsk,我想取消chkdsk,怎么取消
  6. 多线程写mysql数据库_多线程读写mysql数据库
  7. LeetCode:999. 车的可用捕获量
  8. 实现ip数据包抓取并分析_一些网站https证书出现问题的情况分析
  9. 移动电话之父第一个电话打给对手,起底现代移动通信崛起之路!
  10. 惠普企业:自今年10月起,固件 bug 将导致某些 SSD 不可用
  11. addressof表达式不能转换为long_2.3 C++赋值运算符与表达式 | 将有符号数据赋给无符号...
  12. HDU2561 第二小整数【水题+序列处理】
  13. Java Scanner 类,获取用户输入的值
  14. Gradle之全局配置
  15. 【数学建模】基于matlab模糊二元决策树【含Matlab源码 038期】
  16. Logisim实现运动码表
  17. FreeImage的学习资料汇总
  18. 各种排序是否稳定,不稳定是为什么
  19. 搭档之家:14天1.5万人民币!悉尼将征收入境隔离费
  20. 【EasyExcel】 模板填充批量导出,多文件以zip压缩包格式导出

热门文章

  1. 快速排序QuickSort
  2. c语言程序改错:求两个整数的最小公倍数,【C语言】求两个整数的最大公约数、最小公倍数...
  3. python自动发邮件mysql_python自动化六--操作mysql,redis,发送邮件,EXCEL,MD5加密
  4. Android按下多任务java_Android 使用AsyncTask实现多任务多线程断点续传下载
  5. 阿里代码规范pdf_看完阿里的代码规范,立马学会代码分层,再也不会被同事怼...
  6. oracle-merge语法
  7. PHP数组数据结构图,PHP数组与数据结构
  8. python按钮代码_Python QPalette.Button方法代码示例
  9. 实施和开发哪个前景好_现在学习苹果ios开发还有发展前景吗?学android和ios哪个更好?...
  10. java工程师_北京java工程师课程