混合模拟退火和教与学的鸽群优化算法-附代码

2023-10-28 10:59

本文主要是介绍混合模拟退火和教与学的鸽群优化算法-附代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

混合模拟退火和教与学的鸽群优化算法

文章目录

  • 混合模拟退火和教与学的鸽群优化算法
    • 1.鸽群算法
    • 2.改进鸽群优化算法
      • 2.1 模拟退火鸽群优化算法
      • 2.2 线性递减的惯性权重和速度更新
      • 2.3 教与学优化算法
    • 3.实验结果
    • 4.参考文献
    • 5.Matlab代码
    • 6.python代码

摘要:为了改善鸽群优化算法(PIO)容易陷入局部最优和解精度较低的特点,提出一种混合模拟退火和教与学的鸽群优化算法。首先,将鸽群优化算法和模拟退火相结合,可以利用模拟退火跳出局部最优,得到较为精确的解。然后,在鸽群优化算法的速度更新公式中加入惯性权重,并采用线性递减的策略,与教与学算法相结合,增加种群的多样性。

1.鸽群算法

基础鸽群算法的具体原理参考,我的博客:https://blog.csdn.net/u011835903/article/details/109774886

2.改进鸽群优化算法

2.1 模拟退火鸽群优化算法

模拟退火 [ 4 ] { }^{[4]} [4] 是模拟物体从高温降为低温的过程, 根据 Metropolis 准则, 由于降温操作, 物体从状态 i \mathrm{i} i 变为状态 j \mathrm{j} j, 能 量也从 E ( i ) E(i) E(i) 变为 E ( j ) E(j) E(j), 能量的变化量为 Δ E = E ( i ) − E ( j ) \Delta E=E(i)-E(j) ΔE=E(i)E(j), 当 Δ E > 0 \Delta E>0 ΔE>0, 接受变化的新状态; 当 Δ E < 0 \Delta E<0 ΔE<0, 以一定的概率接 受当前的新状态。当概率 p = exp ⁡ ( E ( i ) − E ( j ) / T ) > p=\exp (E(i)-E(j) / T)> p=exp(E(i)E(j)/T)> rand 时, 接受 当前的新状态, 否则保留旧的状态。其中, T = T ⋅ \mathrm{T}=\mathrm{T} \cdot T=T decayscale, decayscale 为退火系数。
模拟退火鸽群优化算法(SAPIO ) 是以鸽群优化算法为主 流程, 加人了模拟退火机制, 对每个鸽子的位置进行局部寻优, 使算法在接受较优解的同时, 以一定的概率接受较差解, 能够 使算法跳出局部最优。随着物体的降温, 能量逐渐趋于稳定状 态,算法达到全局最优。

2.2 线性递减的惯性权重和速度更新

在鸽群优化算法中, 前期需要较大的速度, 有利于全局搜 索, 能较快地定位最优解的大致位置。随着惯性权重的减小, 速度减小, 能够进行精细的局部搜索和得到更精确的解, 该方 法加快了算法的收敛速度, 提高了算法性能 [ 5 ] { }^{[5]} [5] 。惯性权重的调 节和速度公式如下:
w = w start  − w start  − w end  T 1 × t (6) w=w_{\text {start }}-\frac{w_{\text {start }}-w_{\text {end }}}{T 1} \times t \tag{6} w=wstart T1wstart wend ×t(6)

v i t = w ∗ v i t − 1 ⋅ e − R t + rand ⁡ ⋅ ( x gbest  − x i t − 1 ) (7) \begin{gathered} v_i^t=w * v_i^{t-1} \cdot e^{-R t}+\operatorname{rand} \cdot\left(x_{\text {gbest }}-x_i^{t-1}\right) \end{gathered}\tag{7} vit=wvit1eRt+rand(xgbest xit1)(7)

2.3 教与学优化算法

教与学优化算法(TLBO) [6] 包括教师阶段和学习阶段。在教师阶段,选择种群中最好的个体作为教师,通过教行为提高学生的平均成绩。设 x teacher  x_{\text {teacher }} xteacher  是教师, α \alpha α 是学习因子, 且 α = \alpha= α= round ( 1 + (1+ (1+ rand ( 0 , 1 ) ) , x mean  (0,1)), x_{\text {mean }} (0,1)),xmean  种群内所有个体的平均值。教 师阶段的更新公式如下:
x i t = x i t − 1 + rand ⁡ ( 0 , 1 ) × ( x teacher  − α × x mean  ) (8) x_i^t=x_i^{t-1}+\operatorname{rand}(0,1) \times\left(x_{\text {teacher }}-\alpha \times x_{\text {mean }}\right) \tag{8} xit=xit1+rand(0,1)×(xteacher α×xmean )(8)
在学习阶段, 从种群中随机选出两个不同的个体 x p x_p xp x q x_q xq, 比较两个个体之间的差异。令 x i x_i xi 向其中优秀的个体进行学习。 学生阶段的更新公式如下:
x i t = { x i t − 1 + rand ⁡ ( 0 , 1 ) × ( x p t − x i t − 1 ) , f ( x p ) < f ( x q ) x i t − 1 + rand ⁡ ( 0 , 1 ) × ( x q t − x i t − 1 ) , f ( x p ) > f ( x q ) (9) x_i^t= \begin{cases}x_i^{t-1}+\operatorname{rand}(0,1) \times\left(x_p^t-x_i^{t-1}\right), & f\left(x_p\right)<f\left(x_q\right) \\ x_i^{t-1}+\operatorname{rand}(0,1) \times\left(x_q^t-x_i^{t-1}\right), & f\left(x_p\right)>f\left(x_q\right)\end{cases} \tag{9} xit={xit1+rand(0,1)×(xptxit1),xit1+rand(0,1)×(xqtxit1),f(xp)<f(xq)f(xp)>f(xq)(9)
TLSAPIO 算法实现

输入: 种群规模 N \mathrm{N} N, 最大迭代次数 T 1 + T 2 \mathrm{T} 1+\mathrm{T} 2 T1+T2
输出:最优个体 x gbest 。  x_{\text {gbest 。 }} xgbest  
Step1: 初始化鸽群算法相关的参数, 包括速度和位置。
Step2: 计算鸽子的适应度值, 找出个体极值 x p x_p xp 和全局极值 x gbest  ∘ x_{\text {gbest } \circ} xgbest 

Step3: 执行地图和指南针算子, 并根据公式(1)和(2) 更新鸽子的速度和位置。

Step4: 当 t > T 1 t>\mathrm{T} 1 t>T1 时, 停止执行地图和指南针算子, 转而去执 行地标算子。否则继续 Step3。

Step5: 执行地标算子, 对鸽子的适应度值进行排序, 适应 度值较低的鸽子执行教与学优化算法, 并根据公式 (7) 、(8) 和(9)更新速度和位置, 同时计算适应度值。

Step6: 当 t > T 2 t>\mathrm{T} 2 t>T2 时, 停止执行地标算子, 输出最后结果。否 则继续 Step5。

Step7: 计算两次位置变化引起的适应度值的变化量 Δ f = f i ( x i ( t + 1 ) ) − f i ( x i ( t ) ) \Delta f=f_i\left(x_i(t+1)\right)-f_i\left(x_i(t)\right) Δf=fi(xi(t+1))fi(xi(t)), 如果 Δ f < 0 \Delta f<0 Δf<0 exp ⁡ ( − Δ f / T ) > \exp (-\Delta f / T)> exp(Δf/T)> rand, 则接受新位置, 否则保留旧位置。
Step8: 执行降温操作, T = T ⋅ \mathrm{T}=\mathrm{T} \cdot T=T decayscale。
Step9: 判断是否满足终止条件, 若满足, 则结束算法, 输 出全局最优值。否则转 Step2。

3.实验结果

请添加图片描述

4.参考文献

[1]未建英,张丽娜,付发.混合模拟退火和教与学的鸽群优化算法[J].科技经济导刊,2019,27(12):153-155.

5.Matlab代码

6.python代码

这篇关于混合模拟退火和教与学的鸽群优化算法-附代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/292743

相关文章

SpringBoot中四种AOP实战应用场景及代码实现

《SpringBoot中四种AOP实战应用场景及代码实现》面向切面编程(AOP)是Spring框架的核心功能之一,它通过预编译和运行期动态代理实现程序功能的统一维护,在SpringBoot应用中,AO... 目录引言场景一:日志记录与性能监控业务需求实现方案使用示例扩展:MDC实现请求跟踪场景二:权限控制与

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

使用Java将DOCX文档解析为Markdown文档的代码实现

《使用Java将DOCX文档解析为Markdown文档的代码实现》在现代文档处理中,Markdown(MD)因其简洁的语法和良好的可读性,逐渐成为开发者、技术写作者和内容创作者的首选格式,然而,许多文... 目录引言1. 工具和库介绍2. 安装依赖库3. 使用Apache POI解析DOCX文档4. 将解析

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim