即插即用!全新記憶回溯策略:一種元啟發式算法的進化更新機制,含完整免費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(π?(r2??0.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)=(Mmax?M+1)mi=MMmax?Memory(mi,j)?,a>ri?
M = Mmax ? ceil ( dim ? ( 3 / 2 ? r 3 ) ) M = \text{Mmax} - \text{ceil}(\text{dim} * (3/2 - r_3)) M=Mmax?ceil(dim?(3/2?r3?))

其中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 popi?n:輸入個體位置,是大小為1dim的數組。 p o p i n f i t : p o p i n pop_in_fit:pop_in popi?nf?itpopi?n的個體適應度值,其值是值。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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82587.shtml
英文地址,請注明出處:http://en.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…