即插即用!全新记忆回溯策略:一种元启发式算法的进化更新机制,含完整免费MATLAB代码

1. 简介

元启发式算法的搜索域总是不断变化,这使得难以适应多样化的优化问题。为了克服上述问题,提出了一种称为记忆回溯策略(MBS)的进化更新机制,包括思维阶段、回忆阶段和记忆阶段。总体而言,MBS的采用通过结合群体记忆、线索回忆和记忆遗忘机制来提高MHS的效率。这些策略提高了算法探索搜索空间、优化搜索过程和逃避局部最优的能力。MBS将应用于三种不同类型的MHS算法:基于进化(LSHADE_SPACMA)、基于物理(随机分形搜索,SFS)和基于生物(海洋捕食者算法,MPA),以展示MBS的普适性。

2. 提出的方法

2.1. MBS的设计灵感

动物性是区分生物和非生物的重要特征,是个体发展早期出现的基本认知能力之一。人类在婴儿早期就能区分生物和非生物[47],这几乎是一种天生的能力。从进化的角度来看,对环境中生物体的敏感性可以帮助个体生存和繁殖,因为它们可能是自然敌人或竞争对手,对它们的生存构成威胁,以及对生存有益的食物或配偶[48]。研究表明,人类的感知系统具有优先感知和处理重要信息的特征[49]。然而,仅仅检测和感知重要信息不足以帮助人类适应环境。真正反映适应价值的是随后的认知处理和受感知影响的行为反应[50],其中记忆是一个核心组成部分。回忆的三种主要方式包括自由回忆、识别和线索回忆。在其中,线索回忆指的是先学习某事物,然后将新学到的事物(线索)与以前学到的事物联系起来。哈德认为,遗忘不是记忆功能的失败,而是记忆的一种功能。环境总是在不断变化,为了生存,动物必须适应新环境。允许新信息覆盖旧信息可以帮助动物更好地生存[51]。

因此,为了模拟记忆的保存和回忆,并将其应用于MHS,本文提出了以下定义。

2.2. MBS定义

首先,我们将个体与事件进行比较,个体的每个维度的值与条件(线索)进行比较,适应度值是事件结果。因为当个体完全相等时,它们的适应度值相等,即当事件的条件相等时,它们的结果相等。这有利于将MBS应用于不同类型的算法,并可以合理解释。

受生物记忆机制的启发,当发现事件的线索时,可以回忆事件的条件,事件的结果可以被回忆。然而,当生物不知道当前结果是否是最佳时,它们会尝试获得与记忆中不同的结果,并尝试实现更好的结果。因此,当存在记忆时,它们将使用记忆混淆机制或记忆导向机制来尝试新方法。所有生物的记忆都是有限的,因为适当的记忆大小有助于快速有效的回忆,而“环境总是在不断变化,为了生存,动物必须适应新环境。允许新信息覆盖旧信息可以帮助动物更好地生存”。因此,我们引入了记忆周期的概念。记忆周期的容量越少,单个记忆周期的容量越大,回忆成功的可能性越大,但回忆时间也会越长。为了更好地平衡回忆时间和收益,提高算法适应新环境的速度,本文假设每个算法有20个记忆周期,其中每个52次评估(或迭代)经历一个记忆周期。同时,覆盖将用于模拟生物遗忘。同时,生物通常会优先忘记不好的记忆,而后来忘记好的记忆。因此,在每个记忆周期结束时,当前记忆周期中的记忆将被整合并用于模拟生物思维和总结,以便下一个记忆周期优先考虑当前记忆周期中更差的记忆。

该策略主要包括以下阶段:思考阶段、回忆阶段和记忆阶段,其数学定义如下所示。

2.3. MBS的数学定义和伪代码

(1) 思考阶段

传统方法直接计算算法获得的个体的适应度值,使用MBS在思考阶段,首先通过回忆阶段获得的记忆来确定它们是否以前经历过。如果不是,将直接计算其适应度值,并将记忆阶段的结果直接用作新方法的结果。如果结果将直接获得作为新方法的结果,并且记忆阶段将被执行以比较哪种方法更好并保留更好的方法。由于算法处于记忆的早期阶段并且具有有限的记忆内容,因此无法通过记忆为算法提供良好的指导。此外,算法应在早期阶段专注于探索。总体而言,算法在第一个记忆周期中不会执行面向记忆的机制,但只会执行记忆混淆机制。同时,为了模拟生物在发现它们以前经历过的部分过程后通常只改变部分过程的行为,引入了以下内容:h表示需要更改的过程数,j表示需要更改的过程。具体计算过程如下:

j = { w 1 , w 2 , . . . , w h } j = \{w_1, w_2, ..., w_h\} j={w1,w2,...,wh}
w = randperm ( dim ) w = \text{randperm}(\text{dim}) w=randperm(dim)
h = ceil ( dim / 5 ) h = \text{ceil}(\text{dim}/5) h=ceil(dim/5)
popnew = pop ( w ) \text{popnew} = \text{pop}(w) popnew=pop(w)

其中randperm(dim)表示dim的自然数的随机排列,dim是问题维度,ceil()是向上取整和向下取整函数,j是h维的非重复子索引,取w的前h个值。popnew是该个体的新位置,初始值与第i个个体pop(:,i)一致。

为了模拟生物渴望获得更好结果并尝试改变已知过程的行为,采用了记忆混淆机制。当个体成功回忆并执行时,计算将使用以下数学模型进行。

popnew ( j ) = pop ( i , j ) + step ( j ) , a ≤ r i \text{popnew}(j) = \text{pop}(i,j) + \text{step}(j), a \leq r_i popnew(j)=pop(i,j)+step(j),ari
step ( j ) = tan ⁡ ( π ∗ ( r 2 − 0.5 ) ) ∗ ( − l b ( j ) ) / log ⁡ 2 ( FEs ) \text{step}(j) = \tan(\pi * (r_2 - 0.5)) * (-lb(j))/\log_2(\text{FEs}) step(j)=tan(π(r20.5))(lb(j))/log2(FEs)

其中r1和r2是0和1之间的随机值,参数a是执行记忆混淆或记忆导向机制的概率,ub(j)和lb(j)分别是第j维的上限和下限,FEs是当前评估次数。

为了模拟生物渴望获得更好结果并尝试接近记忆中更好位置的行为,引入了记忆导向机制。当个体成功回忆并执行时,计算将使用以下数学模型进行。

popnew ( j ) = ∑ mi = M Mmax Memory ( mi , j ) ( Mmax − M + 1 ) , a > r i \text{popnew}(j) = \frac{\sum_{\text{mi}=M}^{\text{Mmax}} \text{Memory}(\text{mi},j)}{(\text{Mmax} - M + 1)}, a > r_i popnew(j)=(MmaxM+1)mi=MMmaxMemory(mi,j),a>ri
M = Mmax − ceil ( dim ∗ ( 3 / 2 − r 3 ) ) M = \text{Mmax} - \text{ceil}(\text{dim} * (3/2 - r_3)) M=Mmaxceil(dim(3/2r3))

其中Mmax是内存大小的上限,其值是最大评估次数的5%。Mmax是内存中的个体位置,r3是0和1之间的随机值。

在引入伪代码之前,需要了解以下参数:Mw是当前内存位置,其值是值,初始值为0。Mmax是MBS的上限内存大小,其值是值。Memory是内存中的个体位置数组,大小为Mmaxdim。个体内存是大小为Mmax * 1的数组。pop:当前位置是大小为Ndim的数组,N是种群中的个体数。popfit是当前种群适应度值,是大小为N1的数组。popnew:当前个体的新位置,是大小为Ndim的数组。popnewfit:popnew的适应度值,是大小为N1的数组。 p o p i n pop_in popin:输入个体位置,是大小为1dim的数组。 p o p i n f i t : p o p i n pop_in_fit:pop_in popinfitpopin的个体适应度值,其值是值。FEs是最大评估次数,其值是值。当前评估次数是a值。以下是思考阶段的伪代码。
在这里插入图片描述

算法1. 思考阶段的MBS算法

(1). 回忆阶段

在回忆阶段,人们会根据线索逐渐回忆,当线索被打断时,就认为没有匹配的经验。图1、图2、图3模拟了成功回忆的过程,其中绿色虚线表示比较后相等的两个值,红色虚线表示不等。图1显示了假设Memory(1, 1)、Memory(3, 1)和Memory(Mmax, 1)在使用记忆索引wh = {1, 2, 3, …, Mmax-1, Mmax}和当前回忆维度n=1进行回忆时与pop_in(1, 1)一致。因此,记忆索引wh将仅保留1、3和Mmax,然后重复上述操作,直到当前回忆维度n=2,直到记忆索引wh是一个值。如图3所示,当记忆索引wh是一个值时,只需比较所有维度中与pop_in对应的Memory即可确定记忆中是否有相应的结果。
在这里插入图片描述
图1.线索召回,当内存索引wh={1,2,3,…, Mmax-1,Mmax}和召回的当前维度n=1时。
在这里插入图片描述
图2.线索召回,当内存索引wh={1,3, Mmax}且召回的当前维度n=2时
在这里插入图片描述
图3.线索召回成功,记忆指数wh=3

在记忆阶段,Mw是当前的记忆位置指标,Mmax是最大的记忆容量。当Mw大于Mmax时,Mw会回到开始,即1。同时,由于每个记忆周期中的回忆思维过程,下一个记忆周期会优先忘记不好的记忆,稍后忘记更好的记忆。因此,记忆会根据其适应度值进行排序,适应度值较差的记忆被优先放置以进行覆盖。它的伪代码如算法3。

2.4. MBS各阶段流程图

图4、图5、图6分别显示了召回阶段、记忆阶段和思考阶段的算法流程。图7显示了MBS版本算法和基本算法的区别。红色箭头表示它存在于基本算法中,但不存在于MBS版本算法中,而绿色箭头表示它不存在于基本算法中,存在于MBS版本算法中。
在这里插入图片描述
在这里插入图片描述

%% Thinking stage
function [Mw,Memory,Memoryf,pop,popf,FES]=...Memorybacktracking(Mmax,Mw,Memory,Memoryf,pop,fobj,FES,dim,lu)i=1;% global githowdeswhich1=findMemory(Memory,pop(i,:));if isequal(Memory(which1,:),pop(i,:))% githowdes=githowdes+1;popnew=pop;popf=Memoryf(which1,:);how=ceil(dim/5);what1=randperm(dim);what2=what1(1:how);if rand<0.8&&FES>Mmaxpopnew(i,what2)=mean(Memory(Mmax-dim+ceil(sign(rand-0.5)*rand*dim/2):Mmax,what2),1);elsepopnew(i,what2)=popnew(i,what2)+tan(pi.*(rand(1,how)-0.5)).*(lu(2,what2)-lu(1,what2))/log(FES);endpopnew(popnew>lu(2,:))=rand.*(lu(2,popnew>lu(2,:)) - lu(1,popnew>lu(2,:))) + lu(1,popnew>lu(2,:));popnew(popnew<lu(1,:))=rand.*(lu(2,popnew<lu(1,:)) - lu(1,popnew<lu(1,:))) + lu(1,popnew<lu(1,:));which1=findMemory(Memory,popnew(i,:));if isequal(Memory(which1,:),popnew(i,:))popnewf(i,1)=Memoryf(which1,1);elsepopnewf(i,1)=feval(fobj,popnew(i,:));FES=FES+1;[Mw,Memory,Memoryf]=saveMemory(Mmax,Mw,Memory,Memoryf,popnew(i,:),popnewf(i,1));endif popnewf(i,1)<popfpop=popnew(i,:);popf=popnewf(i,1);endelsepopf(i,1)=feval(fobj,pop(i,:));FES=FES+1;[Mw,Memory,Memoryf]=saveMemory(Mmax,Mw,Memory,Memoryf,pop(i,:),popf(i,1));endend

Heming Jia, Chenghao Lu, Zhikai Xing, Memory backtracking strategy:an evolutionary updating mechanism for meta-heuristic algorithms.DOI: https://doi.org/10.1016/j.swevo.2023.101456

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring AI框架快速入门

​​前言&#xff1a;在经历了八个里程碑式的版本之后&#xff08;M1~M8&#xff09;&#xff0c;Spring AI 1.0 正式版本&#xff0c;终于在 2025 年 5 月 20 日正式发布&#xff0c;这是另一个新高度的里程碑式的版本&#xff0c;标志着 Spring 生态系统正式全面拥抱人工智能…

Python实战:打造高效通讯录管理系统

&#x1f4cb; 编程基础第一期《8-30》–通讯录管理系统 &#x1f4d1; 项目介绍 在信息化时代&#xff0c;高效管理个人或团队联系人信息变得尤为重要。本文将带您实现一个基于Python的通讯录管理系统&#xff0c;该系统采用字典数据结构和JSON文件存储&#xff0c;实现了联系…

89. Java 数字和字符串 - Math 类深入解析

文章目录 89. Java 数字和字符串 - Math 类深入解析一、引言二、常量与基本方法2.1 Math 类常量2.2 绝对值和舍入绝对值方法舍入方法最小值和最大值 三、指数与对数方法四、三角函数方法五、总结 89. Java 数字和字符串 - Math 类深入解析 一、引言 在 Java 中&#xff0c;除…

STM32之SG90舵机控制(附视频讲解)

目录 前言&#xff1a; 一、硬件准备与接线 1.1 硬件清单 1.2 接线 二、 SG90舵机简介 1.1 外观 1.2 基本参数 1.3 引脚说明 1.4 控制原理 1.5 特点 1.6 常见问题 三、 单片机简介 四、 程序设计 4.1 定时器配置 4.2 角度控制函数 4.3 主函数调用 五、 总结 …

netstat命令Windows与Linux双平台

深入解析netstat命令:Windows与Linux双平台实战指南 netstat(Network Statistics)是网络诊断中最经典的工具之一,能够帮助用户查看网络连接、端口监听状态、路由表等信息。然而,Windows和Linux系统下的netstat在参数和输出格式上存在差异,容易让人混淆。本文将详细对比两…

攻防世界-ics-07

进入环境 进入项目管理 点击进行访问 是一堆代码进行审计 <?php session_start();if (!isset($_GET[page])) {show_source(__FILE__);die(); }if (isset($_GET[page]) && $_GET[page] ! index.php) {include(flag.php); }else {header(Location: ?pageflag.php);…

基于 Node.js 的 Express 服务是什么?

Express 是基于 ‌Node.js‌ 的一个轻量级、灵活的 Web 应用框架&#xff0c;用于快速构建 ‌HTTP 服务‌&#xff08;如网站、API 接口等&#xff09;&#xff0c;以下是详细解析&#xff1a; ‌一、Express 的核心作用‌ ‌简化 Node.js 原生开发‌ Node.js 原生 http 模块虽…

linux安装vscode以及配置vscode

vscode配置 1&#xff0c;准备工作2&#xff0c;VsCode安装插件3&#xff0c;cmake Tools 的使用 1&#xff0c;准备工作 所谓的准备工作&#xff0c;就是要让linux具备 vim gcc g编译器&#xff0c;可使用cmake&#xff0c;makefile等开发的条件。 首先我么以及有一个以安装好…

基于AI的智能农业病虫害识别系统实战指南

引言 在农业现代化进程中&#xff0c;病虫害防治始终是保障粮食安全的核心挑战。传统人工识别方式存在效率低、误判率高、响应滞后等问题。本文将通过完整的技术实现流程&#xff0c;展示如何利用Python生态构建智能病虫害识别系统&#xff0c;实现从图像采集到防治建议输出的…

【MySQL】第11节|MySQL 8.0 主从复制原理分析与实战(一)

一、MySQL主从复制基础 1. 核心概念 定义&#xff1a; MySQL主从复制是将主库&#xff08;Source/Master&#xff09;的数据变更同步到一个或多个从库&#xff08;Replica/Slave&#xff09;的机制&#xff0c;默认采用异步复制&#xff0c;支持全库、指定库或表的同步。 角…

【RabbitMQ】记录 InvalidDefinitionException: Java 8 date/time type

目录 1. 添加必要依赖 2. 配置全局序列化方案&#xff08;推荐&#xff09; 3. 配置RabbitMQ消息转换器 关键点说明 1. 添加必要依赖 首先确保项目中包含JSR-310支持模块&#xff1a; <dependency><groupId>com.fasterxml.jackson.datatype</groupId>&l…

【机器学习基础】机器学习入门核心算法:K-近邻算法(K-Nearest Neighbors, KNN)

机器学习入门核心算法&#xff1a;K-近邻算法&#xff08;K-Nearest Neighbors, KNN&#xff09; 一、算法逻辑1.1 基本概念1.2 关键要素距离度量K值选择 二、算法原理与数学推导2.1 分类任务2.2 回归任务2.3 时间复杂度分析 三、模型评估3.1 评估指标3.2 交叉验证调参 四、应用…

在h5端实现录音发送功能(兼容内嵌微信小程序) recorder-core

本文将通过一个实际的 Vue3 组件示例&#xff0c;带你一步步实现“按住录音&#xff0c;松开发送&#xff0c;上滑取消”的语音录制功能。 我们将使用强大且小巧的开源库 recorder-core&#xff0c;支持 MP3、WAV、AAC 等编码格式&#xff0c;兼容性较好。 &#x1f527; 项目…

深入掌握Node.js HTTP模块:从开始到放弃

文章目录 一、HTTP模块入门&#xff1a;从零搭建第一个服务器1.1 基础概念解析1.2 手把手创建服务器 二、核心功能深入解析2.1 处理不同请求类型2.2 实现文件下载功能 三、常见问题解决方案3.1 跨域问题处理3.2 防止服务崩溃3.3 调试技巧 四、安全最佳实践4.1 请求头安全设置4.…

SSM整合:Spring+SpringMVC+MyBatis完美融合实战指南

前言 在Java企业级开发领域&#xff0c;SSM&#xff08;SpringSpringMVCMyBatis&#xff09;框架组合一直占据着重要地位。这三个轻量级框架各司其职又相互配合&#xff0c;为开发者提供了高效、灵活的开发体验。本文将深入探讨SSM框架的整合过程&#xff0c;揭示整合背后的原…

[AI]大模型MCP快速入门及智能体执行模式介绍

[AI]大模型MCP快速入门及智能体执行模式介绍 一、MCP入门 介绍 MCP&#xff08;Model Context Protocol&#xff0c;模型上下文协议&#xff09;是一种由Anthropic公司于2024年提出的开放标准协议&#xff0c;旨在为大型语言模型&#xff08;LLM&#xff09;提供统一接口&am…

Mac M1 安装 ffmpeg

1.前言 官网那货没有准备m系列的静态包&#xff0c;然后我呢&#xff0c;不知道怎么想的就从maven项目中的 javacv-platform&#xff0c;且版本为1.5.11依赖里面将这个静态包把了出来&#xff0c;亲测能用&#xff0c;感觉比那些网上说的用什么wget编译安装、brew安装快多了。…

unity控制相机围绕物体旋转移动

记录一下控制相机围绕物体旋转与移动的脚本&#xff0c;相机操作思路分为两块&#xff0c;一部分为旋转&#xff0c;一部分为移动&#xff0c;旋转是根据当前center中心点的坐标&#xff0c;根据距离设置与默认的旋转进行位置移动&#xff0c;移动是根据相机的左右和前后进行计…

python打卡day38@浙大疏锦行

知识点回顾&#xff1a; Dataset类的__getitem__和__len__方法&#xff08;本质是python的特殊方法&#xff09;Dataloader类minist手写数据集的了解 作业&#xff1a;了解下cifar数据集&#xff0c;尝试获取其中一张图片 一、首先加载CIFAR数据集 import torch import torchvi…

用户配置文件(Profile)

2.4.5 用户配置文件&#xff08;Profile&#xff09; 用户配置文件由以下组件构成&#xff1a; 一个运营商安全域&#xff08;MNO-SD&#xff09; 辅助安全域&#xff08;SSD&#xff09;和CASD Applets 应用程序&#xff08;如NFC应用&#xff09; 网络接入应用&#xff…