關于粒子群算法的一些簡單嘗試

粒子群算法核心思想:(鳥 = 粒子)

(1)許多的鳥站在不同的地方;

(2)每一只鳥都有自己尋找食物的初始飛行方向、飛行速度;

(3)這些鳥兒每隔一段時間尋找一次食物,通過搜集所有鳥的信息,來尋找食物最充足的地方;

一、以公式原理的實現過程逐步講解;

1、初始化N個粒子,這些粒子有著隨機的初始位置和隨機的初始速度;

2、計算這些粒子下一步位置,所有的粒子均朝著隨機方向以隨機的速度移動;

3、尋找所有粒子中的最小值,以及尋找每個粒子在不同時刻的最小值;

先尋找所有粒子中的最小值,對所有的粒子求最小值;

然后選在每個粒子在不同時刻的最小值;每個粒子自身的最小值是能夠決定下一步該粒子移動方向和速度的量;

4、更新粒子搜尋的速度,并且更新粒子搜尋的方向,這里不僅有速度的大小,還有方向的角度,因此是一個矢量;

這個里面,隨機優化的核心是其初始位置和速度的隨機性。因此,更新后的速度應一定程度盡可能保持其先前的速度,以保持其隨機性;這個α是慣性權重系數,建議為[0.5,0.8]。

我們還應該在這次迭代中調整速度以接近組最小值,因為它至少是這一步中最好的一個;這個里面c1是權重系數,r1是隨機權重系數,第一個c1代表全局最小的權重,推薦范圍 0.1-2 ,r1是為了提高隨機性,推薦范圍 0-1;

另一個同理,c2是代表局部最優的權重,推薦范圍 [0.1~2],r2是隨機權重系數,推薦范圍 0-1;

5、設計停止條件

重復迭代并在特定位置停止:

(1)達到最大迭代次數k;

(2)變化的目標函數小于預設閾值ε;

? ?(3)我們經常設置速度和位置的限制,以避免不穩定和大的振蕩

二、以代碼進行逐步講解

最后通過代碼進行實現:求取函數最小值

第一步:首先初始化;

1、定義粒子群個數;N = 100; %群體粒子個數

2、定義粒子維數;幾個變量幾維度;D = 2;?

3、定義權重因子大小;c1 =2;c2 =2;

4、定義速度范圍;這個Vmax = 1;?Vmin = -1;

5、定義位置范圍;(變量的范圍)(這里這么寫是因為xy的范圍不一致,就分開給出范圍)

X1max =1;?

X1min =-1;

X2max =3;

X2min =-2;

Xmax = [X1max X2max];

Xmin = [X1min X2min];

第二步:然后定義初始隨機量:

1、定義初始隨機位置;

x1 = ?rand(N,1) * (X1max-X1min)+X1min;?

x2 = ?rand(N,1) * (X2max-X2min)+X2min;

2、定義初始隨機速度;

v = rand(N,D) * (Vmax-Vmin)+Vmin;

第三步:初始化個體最優位置和最優值

p=x; ?
pbest = ones(N,1); %% 創建一個數組,用于存儲每個粒子對應的適應度函數值
for i = 1:N
? ? pbest(i) = func2(x(i,:)); % 求出初始化種群對應的目標函數值
end

第四步:初始化全局最優位置和最優值;

g = ones(1,D);?
gbest = inf;? ?
for i = 1:N? ?
? ? if(pbest(i) < gbest)
? ? ? ? g = p(i,:);
? ? ? ? gbest = pbest(i);
? ? end
end

第五步:粒子群群體尋優;這里就不列了,直接把所有代碼給出來;這里是大頭;

%%%%%%%%%%%%%%粒子群算法求函數極值%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%初始化%%%%%%%%%%%%%%%%%%%
function counti()
clear all; %清除所有變量
% close all; %清圖
clc; %清屏
N = 100; %群體粒子個數
D = 2; %粒子維數   變量的個數
T = 1000; %最大迭代次數
c1 =2; %權重因子 c1 [0.1 - 2] 越大,保持原來速度的能力越強
c2 =2; %權重因子 c2 [0.1 - 2]
Wmax = 0.8; %慣性權重最大值   
Wmin = 0.4; %慣性權重最小值X1max =1; %位置最大值
X1min =-1; %位置最小值X2max =3; %位置最大值
X2min =-2; %位置最小值Xmax = [X1max X2max];
Xmin = [X1min X2min];Vmax = 1; %速度最大值
Vmin = -1; %速度最小值
%%%%%%%%%%%%初始化種群個體(限定位置和速度)%%%%%%%%%%%%
x1 =  rand(N,1) * (X1max-X1min)+X1min;
x2 =  rand(N,1) * (X2max-X2min)+X2min;
x = [x1 x2];v = rand(N,D) * (Vmax-Vmin)+Vmin;
%%%%%%%%%%%%%初始化個體最優位置和最優值%%%%%%%%%%%%%
p = x;  
pbest = ones(N,1); %% 創建一個數組,用于存儲每個粒子對應的適應度函數值
for i = 1:Npbest(i) = func2(x(i,:)); % 求出初始化種群對應的目標函數值
end
%%%%%%%%%%%%%初始化全局最優位置和最優值%%%%%%%%%%%%
g = ones(1,D); % 創建一個數組和變量用于保存最優變量和目標函數 
gbest = inf;   %inf 無窮大
for i = 1:N   % 這一步當中找到種群最優目標函數值if(pbest(i) < gbest)g = p(i,:);gbest = pbest(i);end
end
gb = ones(1,T); % 建立此項用于保存種群中每一代中的的最優值
%%%%%%%%%按照公式依次迭代直到滿足精度或者迭代次數%%%%%%%%
for i = 1:Tfor j = 1:N%%%%%%%%%更新個體最優位置和最優值%%%%%%%%%%%%%if (func2(x(j,:)) < pbest(j))  % 新的個體是否小于原來的個體,如果小于則保存新的個體p(j,:) = x(j,:);pbest(j) = func2(x(j,:));end%%%%%%%%%%更新全局最優位置和最優值%%%%%%%%%%%%if(pbest(j) < gbest)g = p(j,:);gbest = pbest(j);end%%%%%%%%%%%計算動態慣性權重值%%%%%%%%%%%%%%%w = Wmax-(Wmax-Wmin)*i/T;%%%%%%%%%%%%更新位置和速度值%%%%%%%%%%%%%%%v(j,:) = w*v(j,:)+c1*rand*(p(j,:)-x(j,:))...+c2*rand*(g-x(j,:)); %計算對應的速度公式x(j,:) = x(j,:)+v(j,:);  %更新粒子群當中對應的基因%%%%%%%%%%%%%%邊界條件處理%%%%%%%%%%%%%%%% 檢查單個粒子的速度和位置信息是否超過當前最大限制for ii = 1:D  % 如果超過的話就在原來的范圍內重新生成個體if (v(j,ii) > Vmax) || (v(j,ii) < Vmin)v(j,ii) = rand * (Vmax-Vmin)+Vmin;end  if (x(j,ii) > Xmax(ii)) || (x(j,ii) < Xmin(ii))x(j,ii) = rand * (Xmax(ii)-Xmin(ii))+Xmin(ii);endendend%%%%%%%%%%%%%%記錄歷代全局最優值%%%%%%%%%%%%%%gb(i) = gbest;
end
g;       %最優個體
gb(end); %最優值
figure(1)
plot(gb)
hold on 
grid on
xlabel('迭代次數');
ylabel('適應度值');
title('適應度進化曲線')
hold on 
end
%%%%%%%%%%%%%%%%%%適應度函數%%%%%%%%%%%%%%%%%function value = func2(x)
value = (3*cos(x(1)*x(2))+x(1)+x(2)^2);end      %這里是適應度函數,也可以在同一文件夾下獨立建立函數,也可以直接寫在后面。

最終仿真結果:

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

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

相關文章

ISP-EE(Edge Enhance)

ISP-EE(Edge Enhance) EE模塊在某些ISP主控中叫做sharpness或者sharpen&#xff0c;這些名稱指代的模塊是同一個&#xff0c;不用再糾結。主要就是在YUV域內彌補成像過程中圖像的銳度損失&#xff0c;對邊緣和細節進行加強&#xff0c;從而恢復場景本應具有的自然銳度。 銳度…

Linux基礎指令(2)

今天我們繼續來學我們有關于Linux的指令&#xff0c;今天的指令要比上次多多了。開始我們的學習吧。 man手冊 先來看標題&#xff0c;手冊我們第一時間想到的就是手冊的查閱功能&#xff0c;我們都知道在我們上小學的時候&#xff0c;如果遇到不會的字&#xff0c;我們會通過…

網絡工程師【目錄】

前言 從2023年下半年開始&#xff0c;所有的軟考全面改革&#xff0c;由原來的筆試改為機考&#xff0c;據說難度會有一些增加&#xff0c;望悉知。 報名地址&#xff1a;中國計算機技術職業資格網 歷史報名時間和考試時間&#xff1a;3月份報名&#xff0c;5月底考試&#xf…

互聯網商業史--1.3Q大戰

一.起因 奇虎360與騰訊間的糾葛被業界形象地稱為“3Q大戰”。 這場大戰源于雙方之間的“互掐”。 雙方為了各自利益&#xff0c;從2010年到2014年&#xff0c;上演了一系列互聯網之戰&#xff0c;并走上訴訟之路 騰訊先是推出QQ醫生1.0&#xff0c;隨后推出QQ醫生3.2&#x…

【wvp】無響應sip 日志記錄

23-12-11 17:25:18.179 [https-jsse-nio-8970-exec-7] INFO c.g.wvp.vmp.gb28181.transmit.cmd.impl.SIPCommander - 34010200001130000006_34010200001310000006 分配的ZLM為: wvpmediaserver001 [10.30.2.8:30406] 2023-12-11 17:25:18.337 [wvp-9] INFO c.g.w.v.g.t.e.r.i…

【高數:3 無窮小與無窮大】

【高數&#xff1a;3 無窮小與無窮大】 1 無窮小與無窮大2 極限運算法則3 極限存在原則4 趨于無窮小的比較 參考書籍&#xff1a;畢文斌, 毛悅悅. Python漫游數學王國[M]. 北京&#xff1a;清華大學出版社&#xff0c;2022. 1 無窮小與無窮大 無窮大在sympy中用兩個字母o表示無…

IvorySQL榮獲 OSCHINA「2023 年度優秀開源技術團隊」獎

2023 年&#xff0c;OSCHINA 綜合平臺上各大認證官方技術團隊、開源社區帳號年度發表的內容深度及廣度、開展各種活動運營影響力等多方面的表現&#xff0c;瀚高股份IvorySQL榮獲 OSCHINA頒布的「2023 年度優秀開源技術團隊」獎項。未來&#xff0c;IvorySQL將繼續為國內開源事…

golang游戲服務器 - tgf系列課程04

用戶登錄 介紹了如何使用tgf自帶的登錄功能進行用戶的登錄操作,并且編寫機器人客戶端的一個模擬請求代碼需求描述 用戶請求登錄,登錄成功之后請求HelloWorld接口.Common 接口定義和生成接口定義 新增登錄接口 type IHallService interface {Login(ctx context.Context, args…

Hough算法數學原理

直線的極坐標方程&#xff1a; x x 0 r cos ? θ x x_0 r\cos \theta xx0?rcosθ y y 0 r sin ? θ y y_0 r\sin \theta yy0?rsinθ x cos ? θ x 0 cos ? θ r cos ? 2 θ x \cos \theta x_0 \cos \theta r \cos^2 \theta xcosθx0?cosθrcos2θ y sin ? θ…

E4990A 阻抗分析儀,20 Hz 至 10/20/30/50/120 MHz

01 E4990A 阻抗分析儀 20 Hz 至 10/20/30/50/120 MHz 產品綜述&#xff1a; E4990A 阻抗分析儀具有 20 Hz 至 120 MHz 的頻率范圍&#xff0c;可在寬阻抗范圍內提供出色的 0.045%&#xff08;典型值&#xff09;基本準確度&#xff0c;并內置 40 V 直流偏置源&#xff0c;適…

計算機科學與技術認識實習【報告】

一、實習目的 此次認識實習主要面對計算機科學與技術專業的同學&#xff0c;了解專業在未來的發展趨勢&#xff0c;通過觀看公司的介紹視頻和技術發展情況招聘信息后的感想和學習體會等多種方式&#xff0c;使我們了解本專業相關領域的發展現狀&#xff0c;讓我們在校園內課堂上…

C# 數據的保存和提取(.TXT格式)

紅色部分的才是最終版 一、將頁面內容保存到文件中 第一步 創建Visual的Windows窗體應用,使用的是 第二步 創建幾個Label控件、TextBox控件、以及Button按鈕,而TextBox控件放入Panel中 第三步 先對寫法進行了解,了解保存的語句 StreamWriter sw= new StreamWriter(TXT…

從視頻中截取指定幀圖片

前言&#xff1a; 我們在很多時候需要對視頻文件進行分析&#xff0c;或者對視頻產生縮略圖。因此視頻截取技術必不可少。 從本地文件中讀取視頻幀 導包 <dependency><groupId>org.jcodec</groupId><artifactId>jcodec</artifactId><versio…

http代理和SOCK5代理誰更安全?

在這個網絡化的時代&#xff0c;我們常常聽到HTTP代理和SOCKS5代理這兩個名詞&#xff0c;不過很多人并不了解是什么意思。今天&#xff0c;我們將揭開這兩種代理的神秘面紗&#xff0c;看看到底HTTP代理和SOCKS5代理哪個更安全&#xff1f; HTTP代理&#xff1a;高效通信的“樞…

Anaconda+Pytorch(GPU版)深度學習環境配置筆記

主要參考以下文章進行配置&#xff1a; https://blog.csdn.net/qq_43757976/article/details/131173301 配置版本略有更新&#xff0c;最新版本時間為2023.12.11 一、準備工作 個人電腦配置&#xff1a;laptop RTX4060 win11 個人配置版本&#xff1a;cuda&#xff08;12.1&…

JS:讓2個li標簽排列在同一行

前言 在js中&#xff0c;ul元素中li標簽是塊級元素&#xff0c;現在需要讓2個分行的li元素顯示在同一行&#xff0c;并且去掉li元素自帶的標記符號 li元素處理前的樣式如下&#xff1a; 實現 html代碼 <div><ul><li>數據1&#xff1a;</li><li&…

微服務和無服務器架構時代的持續測試

軟件開發中對速度和敏捷性的追求催生了超越傳統界限的方法和實踐。持續測試是現代 DevOps 實踐的基石&#xff0c;它已經發展到滿足加速軟件交付的需求。在本文中&#xff0c;我們將探討持續測試的最新進展&#xff0c;重點關注它如何與微服務和無服務器架構相結合。 一、持續…

第十六屆山東省職業院校技能大賽中職組網絡安全賽項競賽正式試題

第十六屆山東省職業院校技能大賽中職組網絡安全"賽項競賽試題 一、競賽時間 總計&#xff1a;360分鐘 二、競賽階段 競賽階段任務階段競賽任務競賽時間分值A、B模塊A-1登錄安全加固180分鐘200分A-2本地安全策略設置A-3流量完整性保護A-4事件監控A-5服務加固A-6防火墻策…

人機交互——自然語言理解

人機交互中的自然語言理解是人機交互的核心&#xff0c;它是指用自然語言&#xff08;例如中文、英文等&#xff09;進行交流&#xff0c;使計算機能理解和運用人類社會的自然語言&#xff0c;實現人機之間的自然語言通信。 自然語言理解在人工智能領域中有著非常重要的地位&a…

【力扣】刷題備忘錄-動歸-343. 整數拆分

343. 整數拆分 class Solution { public:int integerBreak(int n) {vector<int> dp(n1);dp[2] 1;for (int i 3; i < n; i) {for (int j 1; j < i - 1; j){ // 這里j的最大值去到i-2就可以&#xff0c;這時i - j 2 正好能用初始化的值dp[i] max(dp[i], max(j …