【智能優化算法】白鯊智能優化算法(White Shark Optimizer,WSO)

白鯊智能優化算法(White Shark Optimizer,WSO)是期刊“KNOWLEDGE-BASED SYSTEMS”(中科院一區期刊 IF=8.6)的2022年智能優化算法

01.引言

白鯊智能優化算法(White Shark Optimizer,WSO)的核心理念和基礎靈感來自大白鯊的行為,包括它們在導航和覓食時非凡的聽覺和嗅覺。行為的這些方面被數學建模,以適應對WSO的探索和利用之間的充分平衡,并協助搜索代理探索和利用搜索空間的每個潛在區域,以實現優化。WSO的搜索代理會根據目前最佳的解決方案隨機更新自己的位置,最終得到最優的結果。在CEC-2017測試套件的29個測試功能的基礎上,對WSO的性能進行了多個維度的綜合基準測試。進一步將WSO應用于CEC-2011進化算法競賽的基準問題,證明其可靠性和對現實問題的適用性。對計算結果和收斂結果進行了全面分析,以闡明WSO的有效性和穩定性水平。基于生成的解,將WSO在幾種統計方法下的性能得分與9種成熟的元啟發式方法進行比較。Friedman和Holm對結果的測試表明,與其他現有的元啟發式方法相比,WSO在全局最優性、避免局部最小值和解決方案質量方面揭示了合理的解決方案。

02.優化算法的流程

03.論文中算法對比圖

04.部分代碼

function [fmin0,gbest,ccurve]=WSO(whiteSharks,itemax,lb,ub,dim,fobj)%% Convergence curve
ccurve=zeros(1,itemax);
%% Show the convergence curve
%     figure (1);
%     set(gcf,'color','w');
%     hold on
%     xlabel('Iteration','interpreter','latex','FontName','Times','fontsize',10)
%     ylabel('fitness value','interpreter','latex','FontName','Times','fontsize',10); 
%     grid;
%% Start the WSO  Algorithm
% Generation of initial solutions
WSO_Positions=initialization(whiteSharks,dim,ub,lb);% Initial population
% initial velocity
v=0.0*WSO_Positions; 
%% Evaluate the fitness of the initial population
fit=zeros(whiteSharks,1);
for i=1:whiteSharksfit(i,1)=fobj(WSO_Positions(i,:));
end
%% Initalize the parameters of WSO
fitness=fit; % Initial fitness of the random positions of the WSO[fmin0,index]=min(fit);
wbest = WSO_Positions; % Best position initialization
gbest = WSO_Positions(index,:); % initial global position
%% WSO Parametersfmax=0.75; %  Maximum frequency of the wavy motionfmin=0.07; %  Minimum frequency of the wavy motion   tau=4.11;  mu=2/abs(2-tau-sqrt(tau^2-4*tau));pmin=0.5;pmax=1.5;a0=6.250;  a1=100;a2=0.0005;%% Start the iterative process of WSO 
for ite=1:itemaxmv=1/(a0+exp((itemax/2.0-ite)/a1)); s_s=abs((1-exp(-a2*ite/itemax))) ;p1=pmax+(pmax-pmin)*exp(-(4*ite/itemax)^2);p2=pmin+(pmax-pmin)*exp(-(4*ite/itemax)^2);%% Update the speed of the white sharks in water  nu=floor((whiteSharks).*rand(1,whiteSharks))+1;for i=1:size(WSO_Positions,1)rmin=1; rmax=3.0;rr=rmin+rand()*(rmax-rmin);wr=abs(((2*rand()) - (1*rand()+rand()))/rr);       v(i,:)=  mu*v(i,:) +  wr *(wbest(nu(i),:)-WSO_Positions(i,:));%% or                
%          v(i,:)=  mu*(v(i,:)+ p1*(gbest-WSO_Positions(i,:))*rand+.... 
%                    + p2*(wbest(nu(i),:)-WSO_Positions(i,:))*rand);          end%% Update the white shark positionfor i=1:size(WSO_Positions,1)f =fmin+(fmax-fmin)/(fmax+fmin);a=sign(WSO_Positions(i,:)-ub)>0;b=sign(WSO_Positions(i,:)-lb)<0;wo=xor(a,b);% locate the prey based on its sensing (sound, waves)if rand<mvWSO_Positions(i,:)=  WSO_Positions(i,:).*(~wo) + (ub.*a+lb.*b); % random allocation  else   WSO_Positions(i,:) = WSO_Positions(i,:)+ v(i,:)/f;  % based on the wavy motionendend %% Update the position of white sharks consides_sng fishing school 
for i=1:size(WSO_Positions,1)for j=1:size(WSO_Positions,2)if rand<s_s      Dist=abs(rand*(gbest(j)-1*WSO_Positions(i,j)));if(i==1)WSO_Positions(i,j)=gbest(j)+rand*Dist*sign(rand-0.5);else    WSO_Pos(i,j)= gbest(j)+rand*Dist*sign(rand-0.5);WSO_Positions(i,j)=(WSO_Pos(i,j)+WSO_Positions(i-1,j))/2*rand;end   endend       
end
%     
%% Update global, best and new positionsfor i=1:whiteSharks % Handling boundary violationsif WSO_Positions(i,:)>=lb & WSO_Positions(i,:)<=ub%         % Find the fitnessfit(i)=fobj(WSO_Positions(i,:));    % Evaluate the fitnessif fit(i)<fitness(i)wbest(i,:) = WSO_Positions(i,:); % Update the best positionsfitness(i)=fit(i);   % Update the fitnessend%% Finding out the best positionsif (fitness(i)<fmin0)fmin0=fitness(i);gbest = wbest(index,:); % Update the global best positionsend endend
%% Obtain the results
%   outmsg = ['Iteration# ', num2str(ite) , '  Fitness= ' , num2str(fmin0)];
%   disp(outmsg);ccurve(ite)=fmin0; % Best found value until iteration ite
%  if ite>2
%         line([ite-1 ite], [ccurve(ite-1) ccurve(ite)],'Color','b'); 
%         title({'Convergence characteristic curve'},'interpreter','latex','FontName','Times','fontsize',12);
%         xlabel('Iteration');
%         ylabel('Best score obtained so far');
%         drawnow 
%  end end 
end

04.本代碼效果圖

獲取代碼請關注MATLAB科研小白的個人公眾號(即文章下方二維碼),并回復智能優化算法本公眾號致力于解決找代碼難,寫代碼怵。各位有什么急需的代碼,歡迎后臺留言~不定時更新科研技巧類推文,可以一起探討科研,寫作,文獻,代碼等諸多學術問題,我們一起進步。

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

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

相關文章

從項目開始學習Vue——02(若依框架)

往期&#xff1a; 從項目開始學習Vue——01 目錄標題 一、基礎插件&#xff08;一&#xff09;路由Vue Router&#xff08;二&#xff09;導航守衛&#xff08;路由攔截器&#xff09;二、Vuex&#xff08;一&#xff09;什么是VuexVuex的部分介紹內容&#xff1a; &#xff08…

QQ超大文件共享(別用,傳進去后,壓縮都顯示不出來,LJ qq!)(共享文件)

文章目錄 需要共享雙方同時在線開啟方法第一次會提示設置默認共享目錄&#xff0c;默認是E:\QQFileShare\<qq號>\&#xff1a;然后新建共享會在其后創建共享目錄&#xff0c;共享目錄中只能共享文件。需要點擊添加文件&#xff0c;直接把文件拷貝到目錄里好像還不行&…

C語言/數據結構——(相交鏈表)

一.前言 今天在力扣上刷到了一道題&#xff0c;想著和大家一起分享一下這道題——相交鏈表https://leetcode.cn/problems/intersection-of-two-linked-lists廢話不多說&#xff0c;讓我們開始今天的分享吧。 二.正文 1.1題目描述 是不是感覺好長&#xff0c;我也這么覺得。哈…

網絡編程套接字和傳輸層tcp,udp協議

認識端口號 我們知道在網絡數據傳輸的時候&#xff0c;在IP數據包頭部有兩個IP地址&#xff0c;分別叫做源IP地址和目的IP地址。IP地址是幫助我們在網絡中確定最終發送的主機&#xff0c;但是實際上數據應該發送到主機上指定的進程上的&#xff0c;所以我們不僅要確定主機&…

OAuth 2.0 和 OAuth 2.1

OAuth 2.0 和 OAuth 2.1比較&#xff1a; OAuth 2.0 和 OAuth 2.1 是授權框架的不同版本&#xff0c;它們用于允許應用程序安全地訪問用戶在另一個服務上的數據。以下是它們之間的一些主要區別&#xff1a; 安全性增強&#xff1a;OAuth 2.1 旨在提高安全性&#xff0c;它整合…

什么是云原生架構,我們該如何做好云原生安全,引領云計算時代的應用程序革新

隨著云計算技術的飛速發展&#xff0c;企業面臨著前所未有的機遇和挑戰。在這個高度競爭的市場中&#xff0c;傳統的應用程序架構因其僵化、不易擴展和維護的特點&#xff0c;已難以滿足當今企業對靈活性、可伸縮性和高效性的追求。在這樣的背景下&#xff0c;云原生架構應運而…

git rebase 合并當前分支的多個commit記錄

git rebase 合并當前分支的多個commit記錄 git rebase 相關的選項和用法step1&#xff1a;找到想要合并的 commitstep2. 使用 rebase -istep3. 編輯提交歷史&#xff1a;step4.編輯合并后的提交信息step5.完成 rebase 過程&#xff1a;step6.**推送更新&#xff1a;**step6.**再…

使用ollama離線部署小模型

在有網的機器下載ollama和模型 啟動服務 docker run --rm -it -v ./ollama:/root/.ollama -p 8000:11434 --name ollama ollama/ollama下載模型 docker exec -it ollama ollama pull qwen:0.5b將鏡像和ollama目錄復制到離線的機器中 docker啟動ollama服務 驗證 curl ht…

FFmpeg常用API與示例(三)—— 音視頻解碼與編碼

編解碼層 1.解碼 (1) 注冊所有容器格式和 CODEC:av_register_all() (2) 打開文件:av_open_input_file() (3) 從文件中提取流信息:av_find_stream_info() (4) 窮舉所有的流&#xff0c;查找其中種類為 CODEC_TYPE_VIDEO (5) 查找對應的解碼器:avcodec_find_decoder() (6) …

C++ 實現以xml的格式寫入文件

C XML類 該類主要將xml中的標簽分為兩類&#xff0c;無內容標簽統一稱為父標簽&#xff0c;有內容的就以鍵值對的方式直接輸出。 后面可能會優化通過函數參數的方式管控層級關系&#xff0c;現在是通過類里自動記錄層級深度來表示的。 #include <fstream> #include <…

【QT教程】QT6硬件圖形界面編程 QT硬件編程

QT6硬件圖形界面編程 使用AI技術輔助生成 QT界面美化視頻課程 QT性能優化視頻課程 QT原理與源碼分析視頻課程 QT QML C擴展開發視頻課程 免費QT視頻課程 您可以看免費1000個QT技術視頻 免費QT視頻課程 QT統計圖和QT數據可視化視頻免費看 免費QT視頻課程 QT性能優化視頻免費看…

數據結構-二叉樹結尾+排序

一、二叉樹結尾 1、如何判斷一棵樹是完全二叉樹。 我們可以使用層序遍歷的思路&#xff0c;利用一個隊列&#xff0c;去完成層序遍歷&#xff0c;但是這里會有些許的不同&#xff0c;我們需要讓空也進隊列。如果隊列里到最后只剩下空那么這棵樹就是完全二叉樹。具體的實現如下…

js 數據格式轉換,對象轉數組,數組轉對象

1.對象轉數組 // 對象obj轉換成數組格式 let obj { orgCode:分局編碼, alertId:告警ID, name:告警名稱 } let arr [] for(let key in obj) { console.log(11,key,obj[key]); // 定義一個對象&#xff0c;賦值 let o { id: key, // key是obj對象的鍵值 label: obj[key] …

學習Vue 3.0中的onMounted和onUnmounted鉤子函數

學習Vue 3.0中的onMounted和onUnmounted鉤子函數 一、什么是onMounted和onUnmounted&#xff1f;二、如何使用onMounted和onUnmounted&#xff1f;1、使用onMounted2、使用onUnmounted 三、總結 一、什么是onMounted和onUnmounted&#xff1f; Vue 3.0帶來了許多令人興奮的新特…

Modal h函數寫法

Modal h函數寫法 if (res.data.flag) {const ocapWarn res.data.ocaplList;Modal.warning({title: "提示",content: h("div", {}, [ocapWarn.map((item, index) > {return h("div", {}, [h("p",${index 1}、${item.defectItem}(…

IntersectionObserver對象

IntersectionObserver對象 IntersectionObserver對象&#xff0c;從屬于Intersection Observer API&#xff0c;提供了一種異步觀察目標元素與其祖先元素或頂級文檔視窗viewport交叉狀態的方法&#xff0c;祖先元素與視窗viewport被稱為根root&#xff0c;也就是說Intersectio…

c#---多態

在 C#語言中體現多態有三種方式&#xff1a;虛方法&#xff0c;抽象類&#xff0c; 接口 一、虛方法 什么是虛方法&#xff1f; 在父類中使用 virtual 關鍵字修飾的方法&#xff0c; 就是虛方法。在子類中可以使用 override 關鍵字對該虛方法進行重寫。 class Animal {public…

android apk沒有源碼如何修改程序

如果您擁有一個APK文件但沒有源代碼&#xff0c;您可以嘗試以下幾種方法來進行修改&#xff1a; 反編譯APK&#xff1a;使用工具如apktool對APK文件進行反編譯&#xff0c;這將為您提供源代碼和資源文件。 動態調試&#xff1a;使用調試工具連接設備或模擬器&#xff0c;并動態…

重裝前端整體流程

用戶管理 --匯總 -- 明細-CSDN博客 一、node 這個看環境變量 2023最新版Node.js下載安裝及環境配置教程&#xff08;非常詳細&#xff09;從零基礎入門到精通&#xff0c;看完這一篇就夠了_nodejs安裝及環境配置-CSDN博客 配置到國內鏡像的時候&#xff0c;去看&#xff0c;淘…

理解固化的Maven依賴:spring-boot-starter-parent 與 spring-boot-dependencies

目錄 理解固化的Maven依賴&#xff1a;spring-boot-starter-parent 與 spring-boot-dependencies1. spring-boot-starter-parent1.1 簡介1.2 特點 2. spring-boot-dependencies2.1 簡介2.2 特點 3. 異同點對比3.1 相同點3.2 不同點案例一&#xff1a;使用 spring-boot-starter-…