群體智能優化算法-旗魚優化算法 (Sailfish Optimizer, SFO,含Matlab源代碼)

摘要

旗魚優化算法(Sailfish Optimizer, SFO)是一種模擬旗魚(Sailfish)和沙丁魚(Sardine)之間捕食關系的新型元啟發式算法。通過在搜索過程中模擬旗魚對沙丁魚的捕食行為,以及沙丁魚群的逃逸與防御機制,SFO 平衡了全局探索局部開發,在處理復雜優化問題時具有良好的收斂性能。本文提供了 SFO 的核心思路并提供了完整 MATLAB 代碼及詳細中文注釋,以幫助讀者快速理解并應用該算法。

1. 算法介紹

1.1 旗魚優化算法 (SFO) 的靈感與思路

  1. 旗魚(Sailfish)
    • 旗魚是一種速度極快的海洋捕食者,能迅速發起攻擊并精準捕獲獵物。算法中,旗魚對應較小規模但具有高“適應度”的個體。
  2. 沙丁魚(Sardine)
    • 沙丁魚以群居方式求生,彼此密集形成群體逃離策略,以降低被捕風險。算法中,沙丁魚則對應數量更多、且在后期可能被旗魚“替換”以模擬被捕食的場景。
  3. 捕食關系與進化
    • 當旗魚捕獲沙丁魚之后,會將其從沙丁魚種群中移除,同時旗魚種群可能獲得“更優基因”(即更新位置)。
    • 此過程在搜索過程中不斷迭代,使得種群在全局和局部中進行動態平衡,幫助跳出局部最優并逐漸收斂。

1.2 算法主要步驟

  1. 初始化:隨機生成一定數量的旗魚個體(NSF)與沙丁魚個體(NF),計算它們在搜索空間中的適應度。
  2. 最優個體識別:在旗魚與沙丁魚種群中分別找出其當前最優解(旗魚最優沙丁魚最優)。
  3. 更新
    • 旗魚更新:根據最優旗魚與最優沙丁魚位置,引入隨機擾動來移動旗魚個體。
    • 沙丁魚更新:按照一定幾率對沙丁魚進行“方向調整”,并在后期迭代中可能被旗魚捕獲而移除。
  4. 捕食機制:若旗魚個體適應度較差并隨機選中,則其位置可能被“受傷沙丁魚”所替代,同時沙丁魚群規模減少。
  5. 終止條件:迭代最大次數或到達可接受收斂標準,輸出全局最優解(旗魚種群的最優)。

2. 完整 MATLAB 代碼及詳細中文注釋

下面是 SFO(旗魚優化算法)的完整 MATLAB 源碼:

function [Fbest_SF,x_eliteSF,HisBestFit] = SFO(npop, MaxIt, lb, ub, dim, fobj)
% SFO 主函數
% 輸入參數:
%   npop   :旗魚數量 (Sailfish)
%   MaxIt  :最大迭代次數
%   lb, ub :搜索空間下界與上界(可為標量或向量)
%   dim    :問題維度
%   fobj   :目標函數句柄
%
% 輸出參數:
%   Fbest_SF   :最終找到的最優旗魚適應度值
%   x_eliteSF  :對應的最優旗魚位置
%   HisBestFit :每次迭代記錄的旗魚最優適應度歷史%% ------------------- 人工參數定義 ---------------------%%
NSF = npop;          % Number of Sailfish (旗魚數量)
NF = 2*npop;         % Number of Sardine (沙丁魚數量 = 旗魚的2倍)
NF_rest = NF;        % 當前剩余沙丁魚數量% 初始化種群空間
x_SF = zeros(NSF, dim);   % 旗魚位置
x_F  = zeros(NF, dim);    % 沙丁魚位置% 若 lb, ub 為標量,則擴展為向量
if length(lb)==1lb = lb*ones(1,dim);ub = ub*ones(1,dim);
end%% ------------------- 1. 種群初始化 ------------------ %%
for i = 1:dimx_SF(:,i) = lb(i) + (ub(i)-lb(i)).*rand(NSF,1);  % 隨機分布x_F(:,i)  = lb(i) + (ub(i)-lb(i)).*rand(NF,1);
end% 計算初始適應度
for j = 1:NSFFitness_SF(j) = fobj(x_SF(j,:)); % 旗魚適應度
end
for j = 1:NFFitness_F(j) = fobj(x_F(j,:));   % 沙丁魚適應度
end% 找到旗魚與沙丁魚最優解
[Fbest_SF, eliteSF] = min(Fitness_SF);  % 最優旗魚適應度 & 下標
[Fbest_F, injuredS] = min(Fitness_F);   % 最優沙丁魚適應度 & 下標x_eliteSF = x_SF(eliteSF,:);   % 最優旗魚位置
x_injuredS= x_F(injuredS,:);   % 最優沙丁魚位置% 參數設置
PD = 2/3;       % prey density (沙丁魚密度)
ks = 0.5/MaxIt; % 用于衰減的系數%% ------------------- 2. 主循環迭代 ------------------ %%
for it = 1:MaxIt% A 用于控制收斂系數, A 隨迭代線性衰減A = 4*(1 - it/MaxIt);% AP 為進一步衰減AP = A*(1 - (2*it*ks));%----------- 2.1 更新所有旗魚的位置 --------------%for ii=1:NSFlamda = 2*rand*PD - PD; % x_SF(ii,:) = x_eliteSF - lamda*(rand*0.5*(x_eliteSF+x_injuredS)- x_SF(ii,:));% 旗魚向(最優旗魚 & 最優沙丁魚)之間的位置靠近,同時加入隨機擾動 lamdax_SF(ii,:) = x_eliteSF - lamda*( rand*0.5*(x_eliteSF + x_injuredS) - x_SF(ii,:) );end%----------- 2.2 更新沙丁魚位置 --------------%% alpha=ceil(AP*NF_rest) and beta=ceil(AP*dim)alpha = ceil(AP * NF_rest);  % 選取沙丁魚群中 alpha 個beta  = ceil(AP * dim);      % 選取維度的數量for jj=1:NF_restif AP < 0.5% 當 AP < 0.5時sizepop_value = randperm((NF_rest-alpha+1), alpha) + alpha -1;D_value       = randperm((dim-beta+1), beta)+ beta -1;for kk=1:dimif ismember(jj,sizepop_value) && ismember(kk,D_value)x_F(jj,kk) = rand*( x_eliteSF(kk) - x_F(jj,kk) + AP );endendx_F(jj,:) = rand*(x_eliteSF - x_F(jj,:) + AP);else% 當 AP >= 0.5x_F(jj,:) = rand*(x_eliteSF - x_F(jj,:) + AP);endend%----------- 2.3 邊界處理 --------------%for k=1:dim% 旗魚的越界處理Flag4ub = x_SF(:,k) > ub(k);Flag4lb = x_SF(:,k) < lb(k);x_SF(:,k) = ( x_SF(:,k).*(~(Flag4ub + Flag4lb)) ) + ub(k).*Flag4ub + lb(k).*Flag4lb;% 沙丁魚的越界處理Flag4ub = x_F(:,k) > ub(k);Flag4lb = x_F(:,k) < lb(k);x_F(:,k) = ( x_F(:,k).*(~(Flag4ub + Flag4lb)) ) + ub(k).*Flag4ub + lb(k).*Flag4lb;end%----------- 2.4 重新計算旗魚和沙丁魚的適應度 --------------%for i=1:NSFFitness_SF(i) = fobj(x_SF(i,:));endfor j=1:NF_restFitness_F(j)  = fobj(x_F(j,:));end% 找到當前最優旗魚, 最優沙丁魚[fbest_SF, eliteSF] = min(Fitness_SF);[fbest_F, injuredS] = min(Fitness_F);% 如果發現更優旗魚則更新全局最優if fbest_SF < Fbest_SFFbest_SF = fbest_SF;x_eliteSF= x_SF(eliteSF,:);end% 如果發現更優沙丁魚if fbest_F < Fbest_FFbest_F = fbest_F;x_injuredS = x_F(injuredS,:);end%----------- 2.5 捕食過程:將某個旗魚替換為受傷沙丁魚 --------------%replace_num_SF = ceil(rand * NSF); if Fitness_SF(replace_num_SF) > fbest_F% 選中的旗魚若適應度比最優沙丁魚差,則被沙丁魚替換x_SF(replace_num_SF,:) = x_F(injuredS,:);Fitness_SF(replace_num_SF)= fbest_F;% 從沙丁魚群移除該受傷(最優)沙丁魚x_F(injuredS,:)=[];Fitness_F(injuredS)=[];NF_rest = NF_rest - 1;  % 沙丁魚減少一條end%----------- 2.6 記錄歷史最優適應度 --------------%HisBestFit(it) = Fbest_SF;
end
end

3. 小結

旗魚優化算法(SFO)通過模擬旗魚和沙丁魚的捕食與被捕關系,在搜索過程中動態減少沙丁魚個體,并由旗魚種群吸收最優沙丁魚的優勢“基因”。其交互更新越界處理以及個體替換等機制,可在高維非線性問題中展現出良好的搜索性能。本文提供了SFO的完整實現詳細注釋,為讀者在實際應用或學術研究中提供參考并便于進一步改進與擴展。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73566.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73566.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73566.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【C語言】編譯和鏈接詳解

hi&#xff0c;各位&#xff0c;讓我們開啟今日份博客~ 小編個人主頁點這里~ 目錄 一、翻譯環境和運行環境1、翻譯環境1.1預處理&#xff08;預編譯&#xff09;1.2編譯1.2.1詞法分析1.2.2語法分析1.2.3語義分析 1.3匯編1.4鏈接 2.運行環境 一、翻譯環境和運行環境 在ANSI C…

VIC模型率定驗證

在氣候變化問題日益嚴重的今天&#xff0c;水文模型在防洪規劃&#xff0c;未來預測等方面發揮著不可替代的重要作用。目前&#xff0c;無論是工程實踐或是科學研究中都存在很多著名的水文模型如SWAT/HSPF/HEC-HMS等。雖然&#xff0c;這些軟件有各自的優點&#xff1b;但是&am…

【AWS入門】AWS云計算簡介

【AWS入門】AWS云計算簡介 A Brief Introduction to AWS Cloud Computing By JacksonML 什么是云計算&#xff1f;云計算能干什么&#xff1f;我們如何利用云計算&#xff1f;云計算如何實現&#xff1f; 帶著一系列問題&#xff0c;我將做一個普通布道者&#xff0c;引領廣…

Flutter_學習記錄_ ImagePicker拍照、錄制視頻、相冊選擇照片和視頻、上傳文件

插件地址&#xff1a;https://pub.dev/packages/image_picker 添加插件 添加配置 android無需配置開箱即用&#xff0c;ios還需要配置info.plist <key>NSPhotoLibraryUsageDescription</key> <string>應用需要訪問相冊讀取文件</string> <key>N…

藍橋與力扣刷題(藍橋 星期計算)

題目&#xff1a;已知今天是星期六&#xff0c;請問 20^22 天后是星期幾? 注意用數字 1 到 7 表示星期一到星期日。 本題為填空題&#xff0c;只需要算出結果后&#xff0c;在代碼中使用輸出語句將所填結果輸出即可。 解題思路&#xff0b;代碼&#xff1a; 代碼&#xff1…

向量數據庫原理及選型

向量數據庫 什么是向量什么是向量數據庫原理應用場景 向量數據庫的選型主流向量數據庫介紹向量數據庫對比主流向量數據庫對比表 選型建議 什么是向量 向量是一組有序的數值&#xff0c;表示在多維空間中的位置或方向。向量通常用一個列或行的數字集合來表示&#xff0c;這些數…

以實現生產制造、科技研發、人居生活等一種或多種復合功能的智慧油站開源了

AI視頻監控平臺簡介 AI視頻監控平臺是一款功能強大且簡單易用的實時算法視頻監控系統。它的愿景是最底層打通各大芯片廠商相互間的壁壘&#xff0c;省去繁瑣重復的適配流程&#xff0c;實現芯片、算法、應用的全流程組合&#xff0c;從而大大減少企業級應用約95%的開發成本。用…

小程序網絡大文件緩存方案

分享一個小程序網絡大圖加載慢的解決方案 用到的相關api getSavedFileList 獲取已保存的文件列表&#xff1b;getStorageSync 獲取本地緩存&#xff1b;downloadFile 下載網絡圖片&#xff1b;saveFile 保存文件到本地&#xff1b;setStorage 將數據儲存到小程序本地緩存&…

軟考系統架構師 — 3 操作系統

目錄 3.1 考點分析 3.1 操作系統概述 3.1.1 操作系統的功能 3.1.2 操作系統的分類 3.1.3 嵌入式操作系統主要特點 3.2 進程 3.2.1 進程的組成和狀態 3.2.2 前趨圖與進程資源圖&#xff08;重點&#xff09; 3.2.3 進程同步與互斥 3.2.4 進程調度 3.2.5 死鎖 3.3 線…

PE,ELF,COFF

本文來自 (1)騰訊元寶 (2)程序員的自我修養 PE&#xff08;Portable Executable&#xff09;是一種文件格式&#xff0c;主要用于Windows操作系統中的可執行文件&#xff08;如.exe、.dll、.sys等&#xff09;。PE格式是Windows操作系統中標準的可執行文件格式&#xff0c;由…

MySQL 在 CentOS 7 上安裝的步驟指南

目錄 1. 卸載不需要的環境 2. 獲取 MySQL YUM 倉庫 3. 安裝 MySQL 4. 啟動 MySQL 服務 5. 獲取臨時 Root 密碼 6. 登錄 MySQL 7. 更改 Root 密碼 8. 設置 MySQL 開機自啟動 9. 配置 MySQL 編碼 10. 重啟 MySQL 配置生效 11. 常見問題解決 1. 卸載不需要的環境 如果…

C++初階——類和對象(三) 構造函數、析構函數

C初階——類和對象&#xff08;三&#xff09; 上期內容&#xff0c;我們圍繞類對象模型的大小計算&#xff0c;成員存儲方式&#xff0c;this指針&#xff0c;以及C實現棧和C語言的比較&#xff0c;進一步認識了C的封裝特性。本期內容&#xff0c;我們開始介紹類的默認成員函…

【NLP】 5. Word Analogy Task(詞類比任務)與 Intrinsic Metric(內在度量)

Word Analogy Task&#xff08;詞類比任務&#xff09; 定義&#xff1a;Word Analogy Task 是用于評估詞向量質量的內在指標&#xff08;Intrinsic Metric&#xff09;。該任務基于這樣的假設&#xff1a;如果詞向量能夠捕捉單詞之間的語義關系&#xff0c;那么這些關系應該能…

矩陣冪(矩陣k次冪)

矩陣冪 #include<stdio.h> //矩陣乘法 void cf(int a[20][20],int b[20][20],int result[20][20],int n){for(int i0;i<n;i){for(int j0;j<n;j){result[i][j]0;for(int k0;k<n;k){result[i][j]a[i][k]*b[k][j];}}} }void print(int a[20][20],int n){for(int…

信火一體作戰模式運用特點分析及對一體化防空反導能力建設的啟示

文章目錄 內容摘要1. 引言2. 信火一體作戰模式在現代戰爭中的新內涵和特征2.1 充當火力和信息要素的作戰單元種類更加豐富2.2 信息利用更加凸顯異構平臺間的數據共享和情報融合2.3 作戰環節上更加強調指揮決策的敏捷性和智能化3. 增強防空反導能力的舉措建議3.1 強化各類作戰單…

樣本是怎么估計總體的

樣本是怎么估計總體的 flyfish 1. 什么是樣本估計總體&#xff1f; 樣本估計總體是指通過樣本數據&#xff08;例如100人的身高&#xff09;推斷總體參數&#xff08;例如全國人口的平均身高&#xff09;。核心方法包括&#xff1a; 點估計&#xff1a;用樣本統計量直接估計…

自己動手打造AI Agent:基于DeepSeek-R1+websearch從零構建自己的Manus深度探索智能體AI-Research

第一章&#xff1a;AI Agent基礎與DeepSeek-R1架構解析&#xff08;1/10&#xff09; 1.1 AI Agent技術演進與核心價值 人工智能代理&#xff08;AI Agent&#xff09;經歷了從規則驅動到數據驅動的范式轉移。早期基于專家系統的符號主義方法&#xff08;如MYCIN醫療診斷系統…

DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加列寬調整功能,示例Table14_13可展開行的固定表頭表格

前言:哈嘍,大家好,今天給大家分享一篇文章!并提供具體代碼幫助大家深入理解,徹底掌握!創作不易,如果能幫助到大家或者給大家一些靈感和啟發,歡迎收藏+關注哦 ?? 目錄 DeepSeek 助力 Vue3 開發:打造絲滑的表格(Table)之添加列寬調整功能,示例Table14_13可展開行的固…

Gemini Robotics:將人工智能帶入物理世界

25年3月來自谷歌的技術報告“Gemini Robotics: Bringing AI into the Physical World”。 大型多模態模型的最新進展&#xff0c;已使數字領域出現卓越的通才能力&#xff0c;但將其轉化為機器人等物理智體仍然是一項重大挑戰。一般有用的機器人需要能夠理解周圍的物理世界&am…