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

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

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

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

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

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

**10.1.3 **經(jīng)典應(yīng)用

粒子群算法經(jīng)常與其他算法混合使用?;旌喜呗跃褪菍⑵渌M(jìn)化算法、傳統(tǒng)優(yōu)化算法或其他技術(shù)應(yīng)用到PSO中,用于提高粒子多樣性、增強(qiáng)粒子的全局探索能力,或者提高局部開發(fā)能力、增強(qiáng)收斂速度與精度。

常用的粒子群混合方法基于免疫的粒子群算法。該算法是在免疫算法的基礎(chǔ)上采用粒子群優(yōu)化對(duì)抗體群體進(jìn)行更新,可以解決免疫算法收斂速度慢的缺點(diǎn)。

基于免疫的混合粒子群算法步驟如下所示。

① 確定學(xué)習(xí)因子c1和c 2 、粒子(抗體)群體個(gè)數(shù)M。

② 由logistic回歸分析映射產(chǎn)生M個(gè)粒子(抗體)xi及其速度v i ,其中i=1,…,N,最后形成初始粒子(抗體)群體P 0 。

③ 產(chǎn)生免疫記憶粒子(抗體):計(jì)算當(dāng)前粒子(抗體)群體P中粒子(抗體)的適應(yīng)度值并判斷算法是否滿足結(jié)束條件,如果滿足則結(jié)束并輸出結(jié)果,否則繼續(xù)運(yùn)行。

④ 更新局部和全局最優(yōu)解,并根據(jù)下面的公式更新粒子位置和速度。

圖片

⑤ 由logistic映射產(chǎn)生N個(gè)新的粒子(抗體)。

⑥ 基于濃度的粒子(抗體)選擇:用群體中相似抗體百分比計(jì)算產(chǎn)生N + M個(gè)新粒子(抗體)的概率,依照概率大小選擇N個(gè)粒子(抗體)形成粒子(抗體)群體P。然后轉(zhuǎn)入第③步。

算法流程圖如圖10-5所示。

圖片

圖10-5 免疫粒子群算法流程圖

將實(shí)現(xiàn)自適應(yīng)權(quán)重的優(yōu)化函數(shù)命名為PSO_immu.m,在MATLAB中編寫實(shí)現(xiàn)以上步驟的代碼:

function [x, y, Result] = PSO_immu(func, N, c1, c2, w, MaxDT, D, eps, DS, replaceP, minD, Psum)

format long;

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

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

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

% w = 0.8; % 慣性權(quán)重

% MaxDT = 100; % 最大迭代次數(shù)

% D = 2; % 搜索空間維數(shù)(未知數(shù)個(gè)數(shù))

% N = 100; % 初始化群體個(gè)體數(shù)目

% eps = 10^(-10); % 設(shè)置精度(在已知最小值時(shí)用)

% DS = 8; % 每隔DS次循環(huán)就檢查最優(yōu)個(gè)體是否變優(yōu)

% replaceP = 0. 5; % 粒子的概率大于replaceP將被免疫替換

% minD = 1e-10; % 粒子間的最小距離

% Psum = 0; % 個(gè)體最佳的和

range = 100;

count = 0;

%%%%%% 初始化種群的個(gè)體 %%%%%%

for i = 1 : N

for j = 1 : D

    x(i,j) = -range + 2 * range  * rand;    %隨機(jī)初始化位置

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

end

end

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

for i = 1 : N

p(i) = feval(func,x(i, : ));

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

end

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

for i = 2 : N

if feval(func, x(i, :)) < feval(func, pg)

    pg = x(i, :);

end

end

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

for t = 1 : MaxDT

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 feval(func,x(i, :)) < p(i)

        p(i) = feval(func, x(i, :));

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

    end

    if p(i) < feval(func, pg)

        pg = y(i, :);

        subplot(1, 2, 1);

        bar(pg, 0.25);

        axis( [0 3 -40 40]);

        title ( [ 'Iteration', num2str(t)]); pause(0.1);

        subplot(1, 2, 2);

        plot(pg(1, 1), pg(1, 2), 'rs', 'MarkerFacecolor', 'r', 'Markersize', 8)

        hold on;

        plot(x(:, 1),x(:, 2), 'k.');

        set(gca, 'Color', 'g')

        hold off;

        grid on;

        axis([-100 100 -100 100]);

        title(['Global Min = ' , num2str(p(i))]);

        xlabel(['Min_x= ', num2str(pg(1, 1)), 'Min_y= ', num2str(pg(1, 2))]);

    end

end



Pbest(t) = feval(func, pg);

% if Foxhole(pg,D)

% break;

% end

%%%%%% 開始進(jìn)行免疫 %%%%%%

if t > DS

    if (mod(t, DS) == 0) && ((Pbest(t - DS + 1) - Pbest(t)) < 1e-020)

        % 如果連續(xù)DS代數(shù),群體中的最優(yōu)沒有明顯變優(yōu),則進(jìn)行免疫

        % 在函數(shù)測(cè)試的過程中發(fā)現(xiàn),經(jīng)過一定代數(shù)的更新,個(gè)體最優(yōu)不完全相等,但變化極小

        for i = 1 : N       % 先計(jì)算出個(gè)體最優(yōu)的和

            Psum = Psum + p(i);

        end

        for i = 1 : N       % 免疫程序

            for j = 1 : N   % 計(jì)算每個(gè)個(gè)體與個(gè)體i的距離

                distance(j) = abs(p(j)-p(i));

            end

            num = 0;

            for j = 1 : N   % 計(jì)算與第i個(gè)個(gè)體距離小于minD的個(gè)數(shù)

                if distance(j) < minD

                    num = num + 1;

                end

            end

            PF(i) = p(N - i + 1) / Psum;    % 計(jì)算適應(yīng)度概率

            PD(i) = num / N;        % 計(jì)算個(gè)體濃度

           

            a=rand;         % 隨機(jī)生成計(jì)算替換概率的因子

            PR(i) = a * PF(i) + (1 - a) * PD(i);    % 計(jì)算替換概率

        end

        for i = 1 : N

            if PR(i) > replaceP

                x(i, :) = -range + 2 * range * rand(1, D);

                count=count+1;

            end

        end

    end

end

end

%%%%%% 最后給出計(jì)算結(jié)果 %%%%%%

x = pg(1, 1);

y = pg(1, 2);

Result = feval(func, pg);

%%%%%% 算法結(jié)束 %%%%%%

function probabolity(N, i)

PF = p(N - i) / Psum; % 適應(yīng)度概率

disp(PF);

for jj = 1 : N

distance(jj) = abs(P(jj)-P(i));

end

num = 0;

for ii = 1 : N

if distance(ii) < minD

    num = num + 1;

end

end

PD = num/N; % 個(gè)體濃度

PR = a * PF + (1 - a) * PD; % 替換概率

例10-2:使用基于模擬退火的混合粒子群算法,求解函數(shù)圖片的最小值。其中-10≤ xi ≤10,粒子數(shù)為50,學(xué)習(xí)因子均為2,退火常數(shù)取0.6,迭代步數(shù)為1000。

首先建立目標(biāo)函數(shù)代碼:

function y = immuFunc(x)

y = (cos(x(1)^2 + x(2)^2) - 1)/((1 + (x(1)^2 - x(2)^2))^2) + 0.5;

end

在MATLAB命令行窗口中輸入代碼:

[xm, fv] = PSO_immu(@immuFunc, 50, 2, 2, 0.8, 100, 5, 0.0000001, 10, 0.6, 0.0000000000000000001, 0)

運(yùn)行結(jié)果如下:

xm =

-0.735230545314342

fv =

1.241562924919382

得到目標(biāo)函數(shù)取最小值時(shí)的自變量xm變化圖,如圖10-6所示。

圖片

圖10-6 目標(biāo)函數(shù)取最小值時(shí)的自變量xm變化圖

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

    關(guān)注

    4

    文章

    175

    瀏覽量

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

    關(guān)注

    0

    文章

    49

    瀏覽量

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

    關(guān)注

    0

    文章

    63

    瀏覽量

    13001
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

    粒子群算法仿真

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

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

    computation)。源于對(duì)鳥群捕食的行為研究。粒子群優(yōu)化算法的基本思想:是通過群體中個(gè)體之間的協(xié)作和信息共享來尋找最優(yōu)解.PSO的優(yōu)勢(shì):在于簡(jiǎn)單容易實(shí)現(xiàn)并且沒有許多參數(shù)的調(diào)節(jié)。目前已被廣泛應(yīng)用于函數(shù)優(yōu)化
    發(fā)表于 07-07 06:04

    什么是粒子群算法?

    粒子群算法(1.初步了解)? 1995年,受鳥類捕食行為的啟發(fā),Kennedy和Eberhart正式提出了粒子群優(yōu)化算法的概念。研究中發(fā)現(xiàn),在鳥類捕食過程中,個(gè)體并不知道如何找到食物以
    發(fā)表于 07-07 07:50

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

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

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

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

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

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

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

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

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

    一、簡(jiǎn)介基于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

    簡(jiǎn)化的位置隨機(jī)擾動(dòng)粒子群算法

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

    一種共享并行粒子群算法

    針對(duì)串行粒子群算法在解決大任務(wù)耗時(shí)過長(zhǎng)的問題,提出一種共享并行粒子群( Shared-PSO)算法。充分利用多核處理能力縮短問題處理運(yùn)行時(shí)間,設(shè)置共享區(qū)和采取
    發(fā)表于 01-03 11:48 ?1次下載
    一種共享并行<b class='flag-5'>粒子群</b><b class='flag-5'>算法</b>

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

    基于粒子群優(yōu)化算法的收斂速度快簡(jiǎn)單易實(shí)現(xiàn)的特點(diǎn)和免疫算法的免疫記憶、免疫自我調(diào)節(jié)和多峰值收斂的特點(diǎn),本文設(shè)計(jì)出免疫粒子群
    發(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 模擬退火算法1.2
    發(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)化算法,具有簡(jiǎn)單易實(shí)現(xiàn)、設(shè)置參數(shù)少、全局優(yōu)化能力強(qiáng)等優(yōu)點(diǎn).著重對(duì)粒子群優(yōu)化
    發(fā)表于 07-19 15:01 ?0次下載

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

    粒子群算法(Particle Swarm Optimization,PSO)屬于進(jìn)化算法的一種,和模擬退火算法相似,它也是從隨機(jī)解出發(fā),通過迭代尋找最優(yōu)解。
    的頭像 發(fā)表于 07-21 15:25 ?1991次閱讀
    <b class='flag-5'>粒子群</b><b class='flag-5'>算法</b>的<b class='flag-5'>MATLAB</b><b class='flag-5'>實(shí)現(xiàn)</b>(1)