【數學建模】(智能優化算法)螢火蟲算法(Firefly Algorithm)詳解與實現

螢火蟲算法(Firefly Algorithm)詳解與實現

文章目錄

  • 螢火蟲算法(Firefly Algorithm)詳解與實現
    • 前言
    • 1. 算法原理
    • 2. 算法流程
    • 3. Python實現
    • 4. 算法特點
      • 4.1 優點
      • 4.2 缺點
    • 5. 應用領域
    • 6. 算法變種
    • 7. 總結與展望
    • 參考文獻

前言

大家好,今天給大家介紹一種有趣且高效的群體智能優化算法——螢火蟲算法(Firefly Algorithm, FA)。作為一種生物啟發式算法,它模擬了自然界中螢火蟲的社會行為,特別是它們通過熒光相互吸引的特性。這個算法由劍橋大學的楊翔宇(Xin-She Yang)教授于2008年提出,在解決復雜優化問題方面表現出色。

1. 算法原理

螢火蟲算法的靈感來源于熱帶地區螢火蟲的閃爍行為。在自然界中,螢火蟲通過發光來吸引異性或捕食。這種行為被抽象為以下幾個規則:

  1. 所有螢火蟲都是無性別的,一個螢火蟲會被其他所有螢火蟲吸引
  2. 吸引力與亮度成正比與距離成反比。對于任意兩只螢火蟲,較不明亮的會向較明亮的移動
  3. 螢火蟲的亮度由目標函數值決定

螢火蟲算法的核心在于定義吸引力和移動方式:

吸引力公式

β = β 0 ? e x p ( ? γ r 2 ) β = β? * exp(-γr2) β=β0??exp(?γr2)

其中:

  • β 0 β? β0? 是距離為0時的吸引力(通常設為1)
  • γ γ γ 是光吸收系數,控制吸引力隨距離衰減的速度
  • r r r 是兩只螢火蟲之間的距離

位置更新公式
x i = x i + β ? ( x j ? x i ) + α ? ( r a n d ? 0.5 ) x? = x? + β * (x? - x?) + α * (rand - 0.5) xi?=xi?+β?(xj??xi?)+α?(rand?0.5)

其中:

  • x i x? xi? 是當前螢火蟲的位置
  • x j x? xj? 是更亮螢火蟲的位置
  • β β β 是計算得到的吸引力
  • α α α 是隨機擾動參數
  • r a n d rand rand 是0到1之間的隨機數,所以 ( r a n d ? 0.5 ) (rand - 0.5) (rand?0.5) ? 0.5 -0.5 ?0.5 0.5 0.5 0.5 之間的隨機數

2. 算法流程

螢火蟲算法的基本流程如下:

  1. 初始化參數:設定種群大小、最大迭代次數、光吸收系數 γ γ γ、吸引力參數 β 0 β? β0?、隨機因子 α α α
  2. 初始化螢火蟲種群:隨機生成初始位置
  3. 計算適應度:根據目標函數計算每只螢火蟲的亮度
  4. 更新位置
    • 對每只螢火蟲 i i i
    • 對每只比i亮的螢火蟲 j j j
    • 計算i和j之間的距離 r r r
    • 計算吸引力 β β β
    • 更新 i i i的位置
  5. 評估新解:重新計算每只螢火蟲的亮度
  6. 排序和找出當前最優解
  7. 迭代直到滿足終止條件

3. Python實現

下面是螢火蟲算法的Python實現示例:

import numpy as np
import matplotlib.pyplot as pltclass FireflyAlgorithm:def __init__(self, func, dim, lb, ub, pop_size=40, max_iter=100, alpha=0.5, beta0=1.0, gamma=1.0):self.func = func          # 目標函數self.dim = dim            # 問題維度self.lb = lb              # 下界self.ub = ub              # 上界self.pop_size = pop_size  # 種群大小self.max_iter = max_iter  # 最大迭代次數self.alpha = alpha        # 隨機擾動參數self.beta0 = beta0        # 初始吸引力self.gamma = gamma        # 光吸收系數# 初始化螢火蟲位置self.fireflies = np.random.uniform(lb, ub, (pop_size, dim))self.intensity = np.zeros(pop_size)self.best_solution = Noneself.best_fitness = float('inf')def evaluate(self):for i in range(self.pop_size):self.intensity[i] = self.func(self.fireflies[i])if self.intensity[i] < self.best_fitness:self.best_fitness = self.intensity[i]self.best_solution = self.fireflies[i].copy()def distance(self, i, j):return np.sqrt(np.sum((self.fireflies[i] - self.fireflies[j])**2))def move_fireflies(self):for i in range(self.pop_size):for j in range(self.pop_size):if self.intensity[j] < self.intensity[i]:  # j更亮r = self.distance(i, j)beta = self.beta0 * np.exp(-self.gamma * r**2)# 更新位置self.fireflies[i] = self.fireflies[i] + \beta * (self.fireflies[j] - self.fireflies[i]) + \self.alpha * (np.random.rand(self.dim) - 0.5)# 邊界處理self.fireflies[i] = np.clip(self.fireflies[i], self.lb, self.ub)def run(self):convergence_curve = np.zeros(self.max_iter)for t in range(self.max_iter):self.evaluate()self.move_fireflies()convergence_curve[t] = self.best_fitness# 動態調整alpha參數(可選)self.alpha *= 0.98print(f"迭代 {t+1}/{self.max_iter}, 最優值: {self.best_fitness}")return self.best_solution, self.best_fitness, convergence_curve# 測試函數:Sphere函數
def sphere(x):return np.sum(x**2)# 運行算法
if __name__ == "__main__":dim = 10fa = FireflyAlgorithm(func=sphere,dim=dim,lb=-5.12 * np.ones(dim),ub=5.12 * np.ones(dim),pop_size=30,max_iter=100)best_solution, best_fitness, convergence = fa.run()print("\n最優解:", best_solution)print("最優值:", best_fitness)# 繪制收斂曲線plt.figure(figsize=(10, 6))plt.semilogy(range(1, fa.max_iter+1), convergence)plt.xlabel('迭代次數')plt.ylabel('目標函數值 (對數刻度)')plt.title('螢火蟲算法收斂曲線')plt.grid(True)plt.show()

4. 算法特點

4.1 優點

  • 全局搜索能力強:螢火蟲算法能夠有效地探索解空間,避免陷入局部最優
  • 自動分組:算法能夠自動將螢火蟲分成多個子群,增強了多峰函數的尋優能力
  • 參數少:相比其他元啟發式算法,參數較少且易于調整
  • 收斂速度快:在許多測試函數上表現出較快的收斂速度

4.2 缺點

  • 計算復雜度高:時間復雜度為O(n2),n為種群大小
  • 參數敏感:算法性能對參數γ和α較為敏感
  • 維數災難:在高維問題上性能可能下降

5. 應用領域

螢火蟲算法已成功應用于多個領域:

  1. 工程優化問題:結構設計、參數優化等
  2. 機器學習:特征選擇、神經網絡訓練
  3. 圖像處理:圖像分割、邊緣檢測
  4. 調度問題:作業調度、資源分配
  5. 路徑規劃:旅行商問題、物流配送路徑優化
  6. 電力系統:負載分配、電網優化

6. 算法變種

隨著研究的深入,螢火蟲算法也衍生出多種變體:

  1. 離散螢火蟲算法:用于解決組合優化問題
  2. 混合螢火蟲算法:與其他算法(如PSO、GA)結合
  3. 多目標螢火蟲算法:處理多目標優化問題
  4. 混沌螢火蟲算法:引入混沌映射提高搜索效率
  5. 自適應螢火蟲算法:動態調整參數值

7. 總結與展望

螢火蟲算法作為一種生物啟發式優化算法,通過模擬螢火蟲的社會行為,在解決復雜優化問題方面展現出良好的性能。它簡單易實現,全局搜索能力強,在多個領域都有成功應用。

未來的研究方向可能包括:

  • 進一步改進算法以提高計算效率
  • 開發更有效的參數自適應機制
  • 將算法擴展到更多實際應用場景
  • 與深度學習等前沿技術結合

希望這篇文章能幫助大家理解螢火蟲算法的原理和應用。如有問題,歡迎在評論區留言討論!

參考文獻

  1. Yang, X. S. (2008). Nature-inspired metaheuristic algorithms. Luniver press.
  2. Yang, X. S. (2009). Firefly algorithms for multimodal optimization. In International symposium on stochastic algorithms (pp. 169-178). Springer.
  3. Fister, I., Fister Jr, I., Yang, X. S., & Brest, J. (2013). A comprehensive review of firefly algorithms. Swarm and Evolutionary Computation, 13, 34-46.

以上就是螢火蟲算法的詳細介紹,希望對你有所幫助!如果你對算法有任何疑問或需要更深入的討論,歡迎在評論區交流。

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

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

相關文章

VSCode會擊敗Cursor和Windsurf嗎?

VSCode 會擊敗 Cursor 和 Windsurf 嗎&#xff1f;微軟能不能靠自己的地盤優勢和規則限制打壓對手&#xff1f;答案是"能"&#xff0c;但他們真的會這么干嗎&#xff1f; Cursor & Windsurf vs VSCode Copilot 大PKAI編程工具大戰越來越激烈現在最火最賺錢的AI…

2025-4-11 情緒周期視角復盤(mini)

簡單說兩句好了&#xff0c;做一個階段記錄&#xff0c;目前階段就是上一輪 中毅達 第二輪補漲的退潮結束&#xff0c;回盛生物 金河生物 它們的題材導致 農業和醫藥這2個題材退潮&#xff0c;注意的是不靠譜導致的反制題材是在這個二輪補漲周期里一起走的&#xff0c;所以 海…

【SLAM】將realsense-viewer錄制的rosbag視頻導出成圖片序列(RealSense D435)

本文介紹了如何將realsense-viewer錄制的rosbag格式的視頻導出成圖片序列&#xff0c;方便合并成mp4視頻或插入到論文中。 本文首發于?慕雪的寒舍 說明 Intel提供的realsense-viewer軟件錄制的視頻都是rosbag格式的&#xff0c;為了編寫論文&#xff0c;需要從錄制的視頻中截…

Ubuntu ROS 對應版本

Ubuntu 18.04 (Bionic Beaver) - 2018年4月發布 對應的ROS版本&#xff1a;ROS Melodic (2018年5月發布) Ubuntu 20.04 (Focal Fossa) - 2020年4月發布 對應的ROS版本&#xff1a;ROS Noetic (2020年5月發布) Ubuntu 22.04 (Jammy Jellyfish) - 預計2022年4月發布 對應的ROS版…

Ubuntu 軟件卸載與清理終極指南

Ubuntu 軟件卸載與清理指南 適用范圍&#xff1a;Ubuntu 及其衍生發行版&#xff08;如 Linux Mint、Pop!_OS 等&#xff09;&#xff0c;Debian 系統大部分方法也適用。 目標&#xff1a;幫助你快速、徹底卸載軟件并清理殘余文件&#xff0c;保持系統整潔。 前提&#xff1a;建…

基于javaweb的SpringBoot新聞視頻發布推薦評論系統(源碼+部署文檔)

技術范圍&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬蟲、數據可視化、小程序、安卓app、大數據、物聯網、機器學習等設計與開發。 主要內容&#xff1a;免費功能設計、開題報告、任務書、中期檢查PPT、系統功能實現、代碼編寫、論文編寫和輔導、論文…

Linux-內核驅動

open uboot.bin target-connect U-Boot&#xff08;Universal Boot Loader&#xff09;是一種廣泛使用的開源引導加載程序&#xff0c;它允許用戶從各種設備&#xff08;如硬盤、USB設備、網絡等&#xff09;加載操作系統。U-Boot提供了豐富的命令行接口&#xff08;CLI&#…

DAPP實戰篇:使用ethers.js連接以太坊智能合約

專欄:區塊鏈入門到放棄查看目錄-CSDN博客文章瀏覽閱讀344次。為了方便查看將本專欄的所有內容列出目錄,按照順序查看即可。后續也會在此規劃一下后續內容,因此如果遇到不能點擊的,代表還沒有更新。聲明:文中所出觀點大多數源于筆者多年開發經驗所總結,如果你想要知道區塊…

[原創](現代Delphi 12指南): 設置、運行和調試你的第一個macOS應用程序.

[作者] 常用網名: 豬頭三 出生日期: 1981.XX.XX 企鵝交流: 643439947 個人網站: 80x86匯編小站 編程生涯: 2001年~至今[共24年] 職業生涯: 22年 開發語言: C/C、80x86ASM、Object Pascal、Objective-C、C#、R、Python、PHP、Perl、 開發工具: Visual Studio、Delphi、XCode、C …

Adobe Photoshop 2025 Mac中文 Ps圖像編輯

Adobe Photoshop 2025 Mac中文 Ps圖像編輯 一、介紹 Adobe Photoshop 2025 Mac版集成了多種強大的圖像編輯、處理和創作功能。①強化了Adobe Sensei AI的應用&#xff0c;通過智能摳圖、自動修復、圖像生成等功能&#xff0c;用戶能夠快速而精確地編輯圖像。②3D編輯和動畫功…

藍橋杯備賽知識點總結

一、數論 如果想要計算整除向上取整&#xff08;xy-1&#xff09;/y 或者&#xff08;x-1&#xff09;/y 1 最大公約數&#xff1a; int gcd(int a,int b){return b0?a:gcd(b,a%b); }最小公倍數&#xff1a; int lcm(int a,int b){return a/gcd(a,b)*b; } 埃氏篩法&#…

設計模式 --- 狀態模式

狀態模式??是一種??行為型設計模式??&#xff0c;允許對象在內部狀態改變時動態改變其行為??&#xff0c;使對象的行為看起來像是改變了。該模式通過將狀態邏輯拆分為獨立類??&#xff0c;消除復雜的條件分支語句&#xff0c;提升代碼的可維護性和擴展性。 狀態模式的…

【讀者求助】如何跨行業進入招聘崗位?

文章目錄 讀者留言回信崗位細分1. 中介公司的招聘崗位2. 獵頭專員3. 公司的招聘專員選擇建議 面試建議1. 請簡單介紹你過去 3 年的招聘工作經歷&#xff0c;重點說下你負責的崗位類型和規模2. 你在招聘流程中最常用的渠道有哪些&#xff1f;如何評估渠道效果&#xff1f;3. 當你…

AI Agent入門指南

圖片來源網絡 ?一、開箱暴擊&#xff1a;你以為的"智障音箱"&#xff0c;其實是賽博世界的007? ?1.1 從人工智障到智能叛逃&#xff1a;Agent進化史堪比《甄嬛傳》? ?青銅時代&#xff08;2006-2015&#xff09;? “小娜同學&#xff0c;關燈” “抱歉&…

pnpm 中 Next.js 模塊無法找到問題解決

問題概述 項目在使用 pnpm 管理依賴時,出現了 “Cannot find module ‘next/link’ or its corresponding type declarations” 的錯誤。這是因為 pnpm 的軟鏈接機制在某些情況下可能導致模塊路徑解析問題。 問題診斷 通過命令 pnpm list next 確認項目已安裝 Next.js 15.2.…

vulnhub:sunset decoy

靶機下載地址https://www.vulnhub.com/entry/sunset-decoy,505/ 滲透過程 簡單信息收集 nmap 192.168.56.0/24 -Pn # 確定靶機ip&#xff1a;192.168.56.121 nmap 192.168.56.121 -A -T4 # 得到開放端口22,80 在80端口得到save.zip&#xff0c;需要密碼解壓。 john破解壓縮…

代碼學習總結(一)

代碼學習總結&#xff08;一&#xff09; 這個系列的博客是記錄下自己學習代碼的歷程&#xff0c;有來自平臺上的&#xff0c;有來自筆試題回憶的&#xff0c;主要基于 C 語言&#xff0c;包括題目內容&#xff0c;代碼實現&#xff0c;思路&#xff0c;并會注明題目難度&…

OSPF的接口網絡類型【復習篇】

OSPF在不同網絡環境下默認的不同工作方式 [a3]display ospf interface g 0/0/0 # 查看ospf接口的網絡類型網絡類型OSPF接口的網絡類型&#xff08;工作方式&#xff09;計時器BMA&#xff08;以太網&#xff09;broadcast &#xff0c;需要DR/BDR的選舉hello&#xff1a;10s…

PHM學習軟件|PHM預測性維護系統

使用步驟教程如下 1、登錄 用戶名&#xff1a;52phm 密碼&#xff1a;xxx &#xff08;區別在于不同用戶密鑰不一樣&#xff09; 2、上傳需要分析的數據集 支持數據集格式&#xff1a;csv、xlsx、xls、mat、json 3、主題1&#xff1a;機械參數計算 計算軸承、齒輪、皮帶的…

MySQL MVCC 機制詳解

MySQL MVCC 機制詳解 1. MVCC 基本概念 MVCC 是一種并發控制的方法&#xff0c;主要用于數據庫管理系統&#xff0c;允許多個事務同時讀取數據庫中的同一個數據項&#xff0c;而不需要加鎖&#xff0c;從而提高了數據庫的并發性能。 ┌──────────────────…