群體智能優化算法-粒子群優化算法(Particle Swarm Optimization, PSO,含Matlab源代碼)

摘要(Abstract)

粒子群優化(PSO)是一種基于群體智能的優化算法,受鳥群覓食行為的啟發。PSO 通過模擬粒子(個體)在搜索空間中的運動來尋找最優解。每個粒子根據自身的歷史最優位置(pBest)和全局最優位置(gBest)動態調整速度和位置,從而在全局搜索和局部搜索之間取得平衡。PSO 具有收斂速度快、實現簡單、計算復雜度低等優點,廣泛應用于函數優化、神經網絡訓練、工程優化等領域。


算法介紹

1. 主要思想

PSO 通過群體協作的方式優化問題。算法初始化一組隨機粒子,每個粒子表示一個可能的解。粒子在搜索空間中不斷移動,并根據以下兩種信息調整自身位置:

  • 個體最優解(pBest):每個粒子自身找到的歷史最優解。
  • 全局最優解(gBest):整個種群中的最佳解。

粒子速度和位置的更新遵循以下公式:


詳細代碼

以下是 基礎粒子群優化(PSO) 算法的 MATLAB 實現:

%% 粒子群優化算法(PSO)
% 輸入:
%   N - 種群大小(粒子個數)
%   Max_iteration - 最大迭代次數
%   lb - 搜索空間下界
%   ub - 搜索空間上界
%   dim - 變量維度
%   fobj - 目標優化函數
% 輸出:
%   gBestScore - 全局最優解對應的目標函數值
%   gBest - 全局最優解的位置
%   cg_curve - 收斂曲線function [gBestScore, gBest, cg_curve] = PSO(N, Max_iteration, lb, ub, dim, fobj)% 如果搜索邊界是單個值,將其擴展為與維度相同的向量
ub = ub .* ones(1, dim);
lb = lb .* ones(1, dim);  % 設定參數
Vmax = 6;        % 速度上限,防止粒子速度過大
wMax = 0.9;      % 最大慣性權重
wMin = 0.6;      % 最小慣性權重
c1 = 2;          % 個體學習因子
c2 = 2;          % 社會學習因子% 初始化變量
noP = N;         % 粒子數量
iter = Max_iteration; % 迭代次數
vel = zeros(noP, dim); % 速度初始化
pBestScore = inf * ones(noP, 1); % 記錄每個粒子的歷史最優適應度值
pBest = zeros(noP, dim); % 記錄每個粒子的歷史最優位置
gBest = zeros(1, dim); % 記錄全局最優位置
cg_curve = zeros(1, iter); % 收斂曲線% 初始化粒子位置和速度
pos = zeros(N, dim);
for i = 1:Nfor j = 1:dimpos(i, j) = (ub(j) - lb(j)) * rand() + lb(j); % 在搜索范圍內隨機初始化位置vel(i, j) = 0.3 * rand(); % 隨機初始化速度end
end% 初始化全局最優值
gBestScore = inf;% PSO 主要循環
for l = 1:iter % 確保粒子位置在邊界范圍內for i = 1:NFlag4ub = pos(i, :) > ub;Flag4lb = pos(i, :) < lb;pos(i, :) = (pos(i, :) .* (~(Flag4ub + Flag4lb))) + ub .* Flag4ub + lb .* Flag4lb;end% 計算每個粒子的適應度值for i = 1:Nfitness = fobj(pos(i, :));% 更新個體最優解if pBestScore(i) > fitnesspBestScore(i) = fitness;pBest(i, :) = pos(i, :);end% 更新全局最優解if gBestScore > fitnessgBestScore = fitness;gBest = pos(i, :);endend% 計算當前迭代的慣性權重w = wMax - l * ((wMax - wMin) / iter);% 更新速度和位置for i = 1:Nfor j = 1:dimvel(i, j) = w * vel(i, j) + ...c1 * rand() * (pBest(i, j) - pos(i, j)) + ...c2 * rand() * (gBest(j) - pos(i, j));% 限制速度范圍if vel(i, j) > Vmaxvel(i, j) = Vmax;endif vel(i, j) < -Vmaxvel(i, j) = -Vmax;end% 更新粒子位置pos(i, j) = pos(i, j) + vel(i, j);endend% 記錄收斂曲線cg_curve(l) = gBestScore;endend

代碼解讀

  1. 初始化

    • 設定搜索空間邊界 lbub
    • 設置慣性權重 wMaxwMin,用于動態調整搜索范圍。
    • 設定個體學習因子 c1 和社會學習因子 c2,用于權衡個體和群體影響。
    • 初始化每個粒子的位置 pos速度 vel
    • 設定初始的個體最優 pBest 和全局最優 gBest
  2. 迭代優化

    • 計算每個粒子的適應度值 fitness,并更新 pBestgBest
    • 計算慣性權重 w,確保前期較大慣性(探索),后期較小慣性(開發)。
    • 計算新的速度,確保粒子不會移動過快(受 Vmax 限制)。
    • 更新粒子位置 pos,并確保其在邊界范圍內。
  3. 終止條件

    • 迭代 Max_iteration 輪后,返回最優解 gBest 及其適應度 gBestScore

總結

  • PSO 算法簡單易實現,適用于連續優化問題。
  • 慣性權重 w 控制全局和局部搜索,前期探索,后期收斂。
  • 個體學習因子 c1 和群體學習因子 c2 控制粒子的更新方式。
  • 適用于求解函數優化、路徑規劃、神經網絡權重優化等問題。

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

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

相關文章

Redis 在windows下的下載安裝與配置

參考鏈接:https://developer.aliyun.com/article/1395346 下載 Redis 訪問 Redis 下載地址&#xff1a;https://github.com/tporadowski/redis/releases 下載 Redis 時&#xff0c;你可以選擇 ZIP 包或 MSI 安裝&#xff1a; ZIP包&#xff1a;需要手動解壓、初始化、配置和…

UE5材質法線強度控制節點FlattenNormal

連法 FlattenNormal內部是這樣的 FlattenNormal的作用是用來調整法線強度 連上FlattenNormal后 拉高數值

在 Elasticsearch 中探索基于 NVIDIA 的 GPU 加速向量搜索

作者&#xff1a;來自 Elastic Chris Hegarty 及 Hemant Malik 由 NVIDIA cuVS 提供支持&#xff0c;此次合作旨在為開發者在 Elasticsearch 中的向量搜索提供 GPU 加速。 在 Elastic Engineering 組織內&#xff0c;我們一直致力于優化向量數據庫的性能。我們的使命是讓 Lucen…

Android 13深度定制:SystemUI狀態欄時間居中顯示終極實戰指南

一、架構設計與技術解析 1. SystemUI狀態欄核心布局機制 層級結構 mermaid 復制 graph TDPhoneStatusBarView --> StatusBarContents[status_bar_contents]StatusBarContents --> LeftLayout[status_bar_left_side]StatusBarContents --> ClockLayout[Clock控件]Left…

ArcGIS10.X影像智能下載!遷移ArcGIS Pro批量智能高清影像下載工具至ArcGIS!

上周我們分享了 我寫的一個ArcGIS Pro版批量下載高清影像&#xff08;谷歌、天地圖、ESRI等&#xff09;工具給大家&#xff0c;Deepseek我&#xff01;寫一個ArcGIS Pro批量下載高清影像&#xff08;谷歌、天地圖、ESRI等&#xff09;工具給大家-CSDN博客文章瀏覽閱讀130次。深…

前端面經分享(25/03/19)

北京一家做協同辦公軟件出海的公司&#xff0c;技術一面&#xff0c;20k-40k&#xff0c;要求3-5年 詳細聊了一下上家公司的項目上家公司的項目是不做了嗎&#xff0c;離職原因是什么&#xff0c;你覺得公司的這個產品怎么樣在做AI類的業務時&#xff0c;作為前端感覺跟常規業務…

7 款可視化爬蟲工具全解析:案例示范與操作指南

目錄 1. ParseHub 2.WebHarvy 3.DataMiner 4.Dexi.io 5.ContentGrabber 6.Portia 7.UiPath 文檔聚焦 7 款熱門可視化爬蟲工具&#xff0c;突出簡便的可視化操作&#xff0c;簡單拖拽、設置&#xff0c;無需編程知識&#xff0c;人人皆可上手。 1. ParseHub ParseHub 是一…

使用 `pytest` 框架時,可以通過極限封裝將 YAML 文件的讀取、解析

在使用 pytest 框架時,可以通過極限封裝將 YAML 文件的讀取、解析和測試用例的通用邏輯封裝成共享的方法或 fixture,從而減少重復代碼。以下是詳細的實現步驟和示例。 1. 封裝 YAML 文件讀取和解析 將 YAML 文件的讀取和解析邏輯封裝到一個工具函數中,供所有測試用例調用。…

HarmonyOS next性能優化:多維度策略與實戰案例

HarmonyOS next性能優化&#xff1a;多維度策略與實戰案例 在HarmonyOS next開發中&#xff0c;性能優化是提升用戶體驗、確保應用流暢運行的關鍵。本文將從多個角度探討HarmonyOS next的性能優化策略&#xff0c;并通過示例代碼展示優化前后的效果對比&#xff0c;幫助開發者…

springboot項目,mapper.xml里面,jdbcType報錯 已解決

找了很多資料&#xff0c;最后發現原來是依賴版本不兼容的問題。改了版本號即可 報錯原因&#xff1a; springboot版本為2.16.3 但是我導入的依賴版本是3.0.1&#xff0c;不兼容&#xff0c;報錯 解決&#xff1a;修改版本號&#xff0c;2.3.1兼容springboot2.6.x。依賴下載完…

rust學習筆記16-206.反轉鏈表(遞歸)

rust函數遞歸在14中已經提到&#xff0c;接下來我們把206.反轉鏈表&#xff0c;用遞歸法實現 遞歸函數通常包含兩個主要部分&#xff1a; 基準條件&#xff08;Base Case&#xff09;&#xff1a;遞歸終止的條件&#xff0c;避免無限遞歸。 遞歸步驟&#xff08;Recursive Ste…

QT-LINUX-Bluetooth藍牙開發

BlueToothAPI QT-BlueToothApi Qt Bluetooth 6.8.2 官方提供的藍牙API不支持linux。 D-Bus的API實現藍牙 確保系統中安裝了 BlueZ(版本需≥5.56),并且 Qt 已正確安裝并配置了 D-Bus 支持。 默默看了下自己的版本.....D-BUS的API也不支持。 在 D-Bus 中,org 目錄是 D-Bus…

鴻蒙Next開發與未來發展的變革:全場景操作系統的全新紀元

文章目錄 引言&#xff1a;從兼容到自主的跨越式進化一、鴻蒙Next技術架構解析1.1 系統架構全景圖1.1.1 微內核架構優勢 1.2 與OpenHarmony的關系 二、開發范式革命2.1 應用開發模式對比2.1.1 元服務&#xff08;Meta Service&#xff09;定義 2.2 開發工具鏈升級&#xff08;D…

【docker】--- 詳解 WSL2 中的 Ubuntu 和 Docker Desktop 的區別和關系!

在編程的藝術世界里,代碼和靈感需要尋找到最佳的交融點,才能打造出令人為之驚嘆的作品。而在這座秋知葉i博客的殿堂里,我們將共同追尋這種完美結合,為未來的世界留下屬于我們的獨特印記。【WSL 】--- Windows11 遷移 WSL 超詳細指南 —— 給室友換一個宿舍! 開發環境一、引…

利用Python爬蟲獲取Shopee(蝦皮)商品詳情:實戰指南

在跨境電商領域&#xff0c;Shopee&#xff08;蝦皮&#xff09;作為東南亞及臺灣地區領先的電商平臺&#xff0c;擁有海量的商品信息。無論是進行市場調研、數據分析&#xff0c;還是尋找熱門商品&#xff0c;獲取Shopee商品詳情都是一項極具價值的任務。然而&#xff0c;手動…

【OCR】總結github上開源 OCR 工具:讓文字識別更簡單

前言 在數字化的時代&#xff0c;光學字符識別&#xff08;OCR&#xff09;技術成為了我們處理文檔、圖像文字信息的得力助手。它能夠將圖像中的文字信息轉換為可編輯和可處理的文本數據&#xff0c;極大地提高了信息處理的效率。今天&#xff0c;我要給大家介紹一些優秀的開源…

GenICam標準

GenICam的目標是為所有類型的相機提供一個統一的編程接口。無論相機使用的是哪種傳輸協議或實現了哪些功能&#xff0c;編程接口&#xff08;API&#xff09;都是一樣的。 GenICam&#xff08;Generic Interface for Cameras&#xff09;是一個為工業相機和圖像采集設備設計的…

Docker學習筆記(十)搭建Docker私有倉庫

一、環境配置 1、宿主機系統&#xff1a;macOS Sequoia(版本15.2) 2、虛擬機VMware Fusion版本&#xff1a;專業版 13.6.2 (24409261) 3、虛擬機系統&#xff1a;AlmaLinux-9-latest-x86_64-boot.iso 二、安裝Harbor開源企業級Docker鏡像 Harbor 是一個開源的企業級 Docker…

關于微信小程序端base64解碼問題

由于atob是瀏覽器端的&#xff0c;對于微信小程序不支持&#xff0c;導致模擬器【開發工具】顯示正常&#xff0c;但真機異常解析失敗問題&#xff0c;微信小程序原有的api&#xff0c;官方文檔中也廢棄了 解決方案&#xff1a; 調用&#xff1a; const decodedString ba…

鴻蒙NEXT項目實戰-百得知識庫03

代碼倉地址&#xff0c;大家記得點個star IbestKnowTeach: 百得知識庫基于鴻蒙NEXT穩定版實現的一款企業級開發項目案例。 本案例涉及到多個鴻蒙相關技術知識點&#xff1a; 1、布局 2、配置文件 3、組件的封裝和使用 4、路由的使用 5、請求響應攔截器的封裝 6、位置服務 7、三…