RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

粒子群算法的MATLAB實(shí)現(xiàn)(1)

冬至子 ? 來源:軟件開發(fā)架構(gòu) ? 作者:源哥的傀儡 ? 2023-07-21 15:25 ? 次閱讀

10.1 粒子群算法MATLAB實(shí)現(xiàn)(1)

粒子群算法(Particle Swarm Optimization,PSO)屬于進(jìn)化算法的一種,和模擬退火算法相似,它也是從隨機(jī)解出發(fā),通過迭代尋找最優(yōu)解。它也是通過適應(yīng)度來評價解的品質(zhì),但它比遺傳算法規(guī)則更為簡單,沒有遺傳算法的“交叉”(Crossover)和“變異”(Mutation)操作,它通過追隨當(dāng)前搜索到的最優(yōu)值來尋找全局最優(yōu)。

**10.1.1 **基本原理

PSO可以用于解決優(yōu)化問題。在PSO中,每個優(yōu)化問題的潛在解都是搜索空間中的一只鳥,稱為粒子。所有的粒子都有一個由被優(yōu)化的函數(shù)決定的適值(Fitness Value),每個粒子還有一個速度決定它們“飛行”的方向和距離。然后粒子們就追隨當(dāng)前的最優(yōu)粒子在解空間中搜索。

粒子位置的更新方式如圖10-1所示。

圖片

圖10-1 粒子位置的更新方式

其中,x表示粒子起始位置,v表示粒子“飛行”的速度,p表示搜索到的粒子的最優(yōu)位置。

PSO初始化為一群隨機(jī)粒子(隨機(jī)解),然后通過迭代找到最優(yōu)解。在每一次迭代中,粒子通過跟蹤兩個極值來更新自己:一個是粒子本身所找到的最優(yōu)解,這個解稱為個體極值;另一個極值是整個種群目前找到的最優(yōu)解,這個極值是全局極值。

另外,也可以不用整個種群而只用其中一部分作為粒子的鄰居,那么在所有鄰居中的極值就是局部極值。

假設(shè)在一個D維的目標(biāo)搜索空間中,有N個粒子組成一個群落,其中第i個粒子表示為一個D維的向量

圖片

第i個粒子的“飛行”速度也是一個D維的向量,記為

圖片

第i個粒子迄今為止搜索到的最優(yōu)位置稱為個體極值,記為

圖片

整個粒子群迄今為止搜索到的最優(yōu)位置為全局極值,記為

圖片

在找到這兩個最優(yōu)值時,粒子根據(jù)如下公式來更新自己的速度和位置:

圖片

其中,c1和c2為學(xué)習(xí)因子,也稱加速常數(shù)(Acceleration Constant);r1和r2為[0,1]范圍內(nèi)的均勻隨機(jī)數(shù)。

圖片右邊由三部分組成:

● 第一部分為“慣性”(Inertia)或“動量”(Momentum)部分,反映了粒子的運(yùn)動“習(xí)慣(Habit)”,代表粒子有維持自己先前速度的趨勢。

● 第二部分為“認(rèn)知”(Cognition)部分,反映了粒子對自身歷史經(jīng)驗(yàn)的記憶或回憶,代表粒子有向自身歷史最佳位置逼近的趨勢。

● 第三部分為“社會”(Social)部分,反映了粒子間協(xié)同合作與知識共享的群體歷史經(jīng)驗(yàn),代表粒子有向群體或鄰域歷史最佳位置逼近的趨勢。

由于粒子群算法具有高效的搜索能力,因此有利于得到多目標(biāo)意義下的最優(yōu)解;通過代表整個解集種群,按并行方式同時搜索多個非劣解,即搜索到多個Pareto最優(yōu)解。

同時,粒子群算法的通用性比較好,適合處理多種類型的目標(biāo)函數(shù)和約束,并且容易與傳統(tǒng)的優(yōu)化方法結(jié)合,從而改進(jìn)自身的局限性,更高效地解決問題。因此,將粒子群算法應(yīng)用于解決多目標(biāo)優(yōu)化問題上具有很大的優(yōu)勢。

**10.1.2 **程序設(shè)計

基本粒子群算法的流程圖如圖10-2所示。其具體過程如下:

圖片

圖10-2 基本粒子群算法流程圖

① 初始化粒子群,包括群體規(guī)模N、每個粒子的位置xi和速度v i

② 計算每個粒子的適應(yīng)度值F it [i]。

③ 對每個粒子,用它的適應(yīng)度值F it [i]和個體極值p best (i)比較,如果F it [i] > p best (i),則用F it [i]替換p best (i)。

④ 對每個粒子,用它的適應(yīng)度值F it [i]和個體極值g best (i)比較,如果F it [i] > p best (i),則用F it [i]替換g best (i)。

⑤ 更新粒子的速度vi和位置x i 。

⑥ 如果滿足結(jié)束條件(誤差足夠好或達(dá)到最大循環(huán)次數(shù))則退出,否則返回②。

在MATLAB中編程實(shí)現(xiàn)的基本粒子群算法基本函數(shù)為PSO,其調(diào)用格式如下:

[xm, fv] = PSO(fitness, N, c1, c2, w, M, D)

其中,fitness為待優(yōu)化的目標(biāo)函數(shù),也稱適應(yīng)度函數(shù)。N是粒子數(shù)目,c1是學(xué)習(xí)因子1,c2是學(xué)習(xí)因子2,w是慣性權(quán)重,M是最大迭代次數(shù),D是自變量的個數(shù),xm是目標(biāo)函數(shù)取最小值時的自變量,fv是目標(biāo)函數(shù)的最小值。

使用MATLAB實(shí)現(xiàn)基本粒子群算法代碼如下:

function [xm, fv] = PSO(fitness, N, c1, c2, w, M, D)

%%%%% 給定初始化條件 %%%%%%

% c1學(xué)習(xí)因子1

% c2學(xué)習(xí)因子2

% w慣性權(quán)重

% M最大迭代次數(shù)

% D搜索空間維數(shù)

% N初始化群體個數(shù)數(shù)目

%%%%%% 初始化種群的個體(可以在這里限定位置和速度的范圍) %%%%%%

format long;

for i = 1 : N

for j = 1 : D

    x(i, j) = randn;        % 隨機(jī)初始化位置

    v(i, j) = randn;        % 隨機(jī)初始化速度

end

end

%%%%%% 先計算各個粒子的適應(yīng)度,并初始化Pi和Pg %%%%%%

for i = 1 : N

p(i) = fitness(x(i, :));

y(i, :) = x(i, :);

end

pg = x(N, :); %Pg為全局最優(yōu)

for i = 1 : (N - 1)

if fitness(x(i, :)) < fitness(pg)

    pg = x(i, :);

end

end

%%%%%% 進(jìn)入主要循環(huán),按照公式依次迭代,直到滿足精度要求 %%%%%%

for t = 1 : M

for i = 1 : N       % 更新速度、位移

    v(i, :) = w * v(i, :) + c1 * rand * (y(i, :) - x(i, :)) + c2 * rand * (pg - x(i, :));

    x(i, :) = x(i, :) + v(i, :);

    if fitness(x(i, :)) < p(i)

        p(i) = fitness(x(i, :));

        y(i, :) = x(i, :);

    end

    if p(i) < fitness(pg)

        pg = y(i, :);

    end

end

Pbest(t) = fitness(pg);

end

%%%%%% 最終給出計算結(jié)果 %%%%%%

disp('*************************************************')

disp('目標(biāo)函數(shù)取最小值時的自變量:')

xm = pg'

disp('目標(biāo)函數(shù)的最小值為:')

fv = fitness(pg)

disp('*************************************************')

將上面的函數(shù)保存到MATLAB可搜索路徑中,即可調(diào)用該函數(shù)。再定義不同的目標(biāo)函數(shù)fitness和其他輸入量,就可以用粒子群算法求解不同問題。

粒子群算法使用的函數(shù)有很多個,下面介紹兩個常用的適應(yīng)度函數(shù)。

1.Griewank函數(shù)

Griewank函數(shù)的MATLAB代碼如下:

function y = Griewank(x) % Griewank函數(shù)

% 輸入x,給定相應(yīng)的y值,在x = (0, 0, ……, 0)處有全局極小點(diǎn)0

[row, col] = size(x);

if row > 1

error('輸入的參數(shù)錯誤');

end

y1 = 1 / 4000 * sum(x .^ 2);

y2 = 1;

for h = 1 : col

y2 = y2 * cos(x(h) / sqrt(h));

end

y = y1 - y2 + 1;

y = - y;

繪制以上函數(shù)圖像的MATLAB代碼如下:

function DrawGriewank() % 繪制Griewank函數(shù)圖像

x = [-8 : 0.1 : 8];

y = x;

[X, Y] = meshgrid(x, y);

[row, col] = size(X);

for l = 1 : col

for h = l : row

    z(h, l) = Griewank([X(h, l), Y(h, l)]);

end

end

surf(X, Y, z);

shading interp

將以上代碼保存為DrawGriewank.m文件,并運(yùn)行上述代碼,得到Griewank函數(shù)圖像,如圖10-3所示。

圖片

圖10-3 Griewank函數(shù)圖像

2.Rastrigin函數(shù)

Rastrigin函數(shù)的MATLAB代碼如下:

function y = Rastrigin(x) % Rastrigin函數(shù)

% 輸入x,給定相應(yīng)的y值,在x = (0, 0, ……, 0)處有全局極小點(diǎn)0

[row, col] = size(x);

if row > 1

error('輸入的參數(shù)錯誤');

end

y = sum(x .^ 2 - 10 * cos(2 * pi * x) + 10);

y = - y;

繪制以上函數(shù)圖像的MATLAB代碼如下:

function DrawRastrigin()

x = [-4 : 0.05 : 4];

y = x;

[X, Y] = meshgrid(x, y);

[row, col] = size(X);

for l = 1 : col

for h = 1 : row

    z(h, l) = Rastrigin([X(h, l), Y(h, l)]);

end

end

surf(X, Y, z);

shading interp

將以上代碼保存為DrawRastrigin.m文件,并運(yùn)行上述代碼,得到Rastrigin函數(shù)圖像,如圖10-4所示。

圖片

圖10-4 Rastrigin函數(shù)圖像

例10-1:利用上文介紹的基本粒子群算法求解下列函數(shù)的最小值。

圖片

利用基本粒子群算法求解最小值,首先需要確認(rèn)不同迭代步數(shù)對結(jié)果的影響。設(shè)定題中函數(shù)的最小點(diǎn)均為0,粒子群規(guī)模為50,慣性權(quán)重為0.5,學(xué)習(xí)因子c1為1.5,學(xué)習(xí)因子c2為2.5,迭代步數(shù)分別取100、1000、10000。

在MATLAB中建立目標(biāo)函數(shù)代碼,并保存為fitness.m文件:

function F = fitness(x)

F = 0;

for i = 1 : 30

F = F + x(i)^2 + x(i) - 6

end

在MATLAB命令行窗口中依次輸入:

x = zeros(1, 30);

[xm1, fv1] = PSO(@fitness, 50, 1.5, 2.5, 0.5, 100, 30);

[xm2, fv2] = PSO(@fitness, 50, 1.5, 2.5, 0.5, 1000, 30);

[xm3, fv3] = PSO(@fitness, 50, 1.5, 2.5, 0.5, 10000, 30);

運(yùn)行以上代碼,比較目標(biāo)函數(shù)取最小值時的自變量,如表10-1所示。

表10-1 比較不同迭代步數(shù)下的目標(biāo)函數(shù)值和最小值

圖片

從表10-1中可以看出,迭代步數(shù)不一定與獲得解的精度成正比,即迭代步數(shù)越大,獲得解的精度不一定越高。這是因?yàn)榱W尤核惴ㄊ且环N隨機(jī)算法,同樣的參數(shù)也會算出不同的結(jié)果。

在上述參數(shù)的基礎(chǔ)上,保持慣性權(quán)重為0.5、學(xué)習(xí)因子c1為1.5、學(xué)習(xí)因子c2為2.5、迭代步數(shù)為100不變,粒子群規(guī)模分別取10、100和500,運(yùn)行以下MATLAB代碼:

x = zeros(1, 30);

[xm1, fv1] = PSO(@fitness, 10, 1.5, 2.5, 0.5, 100, 30);

[xm2, fv2] = PSO(@fitness, 100, 1.5, 2.5, 0.5, 100, 30);

[xm3, fv3] = PSO(@fitness, 500, 1.5, 2.5, 0.5, 100, 30);

比較目標(biāo)函數(shù)取最小值時的自變量,如表10-2所示。

表10-2 比較不同粒子群規(guī)模下的目標(biāo)函數(shù)值和最小值

圖片

從表10-2中可以看出,粒子群規(guī)模越大,獲得解的精度不一定越高。

綜合以上不同迭代步數(shù)和不同粒子群規(guī)模運(yùn)算得到的結(jié)果可知,在粒子群算法中,要想獲得精度高的解,關(guān)鍵是各個參數(shù)之間的匹配。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 人工智能
    +關(guān)注

    關(guān)注

    1791

    文章

    47181

    瀏覽量

    238173
  • MATLAB仿真
    +關(guān)注

    關(guān)注

    4

    文章

    176

    瀏覽量

    19921
  • PSO
    PSO
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    12938
  • 粒子群算法
    +關(guān)注

    關(guān)注

    0

    文章

    63

    瀏覽量

    13031
  • 機(jī)器學(xué)習(xí)

    關(guān)注

    66

    文章

    8406

    瀏覽量

    132547
收藏 人收藏

    評論

    相關(guān)推薦

    基于粒子群算法的自適應(yīng)LMS濾波器設(shè)計及可重構(gòu)硬件實(shí)現(xiàn)

    自適應(yīng)濾波器設(shè)計是典型的多參數(shù)組合優(yōu)化問題,利用一種改進(jìn)的粒子群優(yōu)化算法(MPSO)來優(yōu)化設(shè)計自適應(yīng)LMS濾波器.將濾波器設(shè)計問題轉(zhuǎn)化為濾波器參數(shù)優(yōu)化的問題,利用改進(jìn)的粒子群算法MPS
    發(fā)表于 04-26 16:13

    粒子群算法仿真

    粒子群實(shí)例介紹
    發(fā)表于 12-25 10:29

    粒子群算法城鎮(zhèn)能源優(yōu)化調(diào)度問題

    粒子群算法城鎮(zhèn)能源優(yōu)化調(diào)度問題,一、簡介1 粒子群算法的概念粒子群優(yōu)化
    發(fā)表于 07-07 06:04

    什么是粒子群算法?

    粒子群算法1.初步了解)? 1995年,受鳥類捕食行為的啟發(fā),Kennedy和Eberhart正式提出了粒子群優(yōu)化算法的概念。研究中發(fā)現(xiàn),
    發(fā)表于 07-07 07:50

    【Simulink】粒子群算法(PSO)整定PID參數(shù)(附代碼和講解)精選資料分享

    本文提供粒子群算法簡介和一個算法舉例,提供粒子群算法仿真PID的M文件代碼及simulink仿真。另外,本文還提供了一種動態(tài)simulink
    發(fā)表于 09-08 07:53

    基于模擬退火結(jié)合粒子群算法介紹

    【優(yōu)化選址】基于模擬退火結(jié)合粒子群算法求解分布式電源定容選址問題matlab源碼1 算法介紹1.1 模擬退火
    發(fā)表于 12-29 07:04

    基于模擬退火結(jié)合粒子群算法分析

    【優(yōu)化選址】基于模擬退火結(jié)合粒子群算法求解分布式電源定容選址問題matlab源碼1 算法介紹1.1 模擬退火
    發(fā)表于 01-03 06:41

    基于模擬退火結(jié)合粒子群算法相關(guān)資料分享

    【優(yōu)化選址】基于模擬退火結(jié)合粒子群算法求解分布式電源定容選址問題matlab源碼1 算法介紹1.1 模擬退火
    發(fā)表于 01-03 07:58

    基于matlab粒子群配電網(wǎng)重構(gòu)簡介

    一、簡介基于matlab粒子群配電網(wǎng)重構(gòu)二、源代碼%主函數(shù)clearclcwarning offN=10;%節(jié)點(diǎn)總數(shù)(包括電源節(jié)點(diǎn))R=16;%支路總數(shù)sizepop=10;%粒子群種群規(guī)模
    發(fā)表于 01-03 07:05

    簡化的位置隨機(jī)擾動粒子群算法

    針對基本粒子群算法(PSO)易陷入局部極值,后期迭代效率不高的缺點(diǎn),提出了一種簡化的位置隨機(jī)擾動粒子群算法 (SPSDPSO)。新算法通過取
    發(fā)表于 01-09 11:36 ?9次下載

    一種共享并行粒子群算法

    ,其算法流程具有較好的通用性,允許利用多種串行粒子群算法完成粒子信息更新工作。在標(biāo)準(zhǔn)優(yōu)化測試集CEC 2014上的實(shí)驗(yàn)結(jié)果顯示新算法的執(zhí)行時
    發(fā)表于 01-03 11:48 ?1次下載
    一種共享并行<b class='flag-5'>粒子群</b><b class='flag-5'>算法</b>

    如何使用免疫粒子群優(yōu)化算法實(shí)現(xiàn)增量式的PID控制

    基于粒子群優(yōu)化算法的收斂速度快簡單易實(shí)現(xiàn)的特點(diǎn)和免疫算法的免疫記憶、免疫自我調(diào)節(jié)和多峰值收斂的特點(diǎn),本文設(shè)計出免疫粒子群
    發(fā)表于 11-01 15:41 ?7次下載
    如何使用免疫<b class='flag-5'>粒子群</b>優(yōu)化<b class='flag-5'>算法</b><b class='flag-5'>實(shí)現(xiàn)</b>增量式的PID控制

    【優(yōu)化選址】基于模擬退火結(jié)合粒子群算法求解分布式電源定容選址問題matlab源碼

    【優(yōu)化選址】基于模擬退火結(jié)合粒子群算法求解分布式電源定容選址問題matlab源碼1 算法介紹1.1 模擬退火
    發(fā)表于 01-07 11:29 ?4次下載
    【優(yōu)化選址】基于模擬退火結(jié)合<b class='flag-5'>粒子群</b><b class='flag-5'>算法</b>求解分布式電源定容選址問題<b class='flag-5'>matlab</b>源碼

    粒子群優(yōu)化算法的應(yīng)用 粒子群優(yōu)化算法研究方法

      摘要:粒子群優(yōu)化算法是一種基于群智能的隨機(jī)優(yōu)化算法,具有簡單易實(shí)現(xiàn)、設(shè)置參數(shù)少、全局優(yōu)化能力強(qiáng)等優(yōu)點(diǎn).著重對粒子群優(yōu)化
    發(fā)表于 07-19 15:01 ?0次下載

    粒子群算法MATLAB實(shí)現(xiàn)(2)

    粒子群算法經(jīng)常與其他算法混合使用?;旌喜呗跃褪菍⑵渌M(jìn)化算法、傳統(tǒng)優(yōu)化算法或其他技術(shù)應(yīng)用到PSO中,用于提高
    的頭像 發(fā)表于 07-21 15:27 ?1024次閱讀
    <b class='flag-5'>粒子群</b><b class='flag-5'>算法</b>的<b class='flag-5'>MATLAB</b><b class='flag-5'>實(shí)現(xiàn)</b>(2)
    RM新时代网站-首页