一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

matlab-粒子群算法優(yōu)化simulink中的pid參數(shù)詳解

冬至子 ? 來源:算法工程師的學(xué)習(xí)日志 ? 作者:搬磚工程師domi ? 2023-07-20 14:20 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

圖片

PSO(粒子群算法)在處理連續(xù)問題上有著較強(qiáng)的能力,因此很適合用來做參數(shù)優(yōu)化,而PID控制器由三個(gè)參數(shù)組成,它們分別是:Kp 、Ki 、Kd 。

我們可以把PID控制器當(dāng)做一個(gè)“黑箱”,輸入為這三個(gè)參數(shù),輸出為響應(yīng)曲線,我們要做的就是優(yōu)化這個(gè)響應(yīng)曲線。而一個(gè)控制效果好的PID控制器應(yīng)針對(duì)不同類型輸入都有較快的響應(yīng)速度,較小的超調(diào)以及穩(wěn)態(tài)誤差。在本次分享中,選擇輸入信號(hào)為階躍輸入用來衡量PID控制效果。

PSO的適應(yīng)函數(shù)選用綜合指標(biāo)來衡量設(shè)計(jì)效果,由于是數(shù)字控制器,我們選用求和而不是積分的方式:

圖片

在特定的問題中,這個(gè)適應(yīng)函數(shù)也可以按照實(shí)際需求修改,比如分析超調(diào)量、穩(wěn)定時(shí)間等,具體問題具體分析

PSO的主函數(shù)和之前的案例類似

參數(shù)設(shè)置

wmax = 1;     % 最大慣性因子 
wmin = 0.6;   % 最小慣性因子 


% w = 0.6;      % 慣性因子 
c1 = 2;       % 加速常數(shù)
c2 = 2;       % 加速常數(shù)


Dim = 3;            % 維數(shù)
SwarmSize = 30;    % 粒子群規(guī)模
ObjFun = @PSO_PID;  % 待優(yōu)化函數(shù)句柄


MaxIter = 10;      % 最大迭代次數(shù)  
MinFit = 0.1;       % 最小適應(yīng)值 


Vmax = 1;
Vmin = -1;
Ub = [300 300 300];
Lb = [0 0 0];

其中的Ub和Lb分別是kp ki kd的上下限,開始優(yōu)化的時(shí)候可以設(shè)置大一點(diǎn),如果大概知道范圍,也可以縮小范圍,減少迭代次數(shù)

粒子群初始化

Range = ones(SwarmSize,1)*(Ub-Lb);
Swarm = rand(SwarmSize,Dim).*Range + ones(SwarmSize,1)*Lb;      % 初始化粒子群
VStep = rand(SwarmSize,Dim)*(Vmax-Vmin) + Vmin;                 % 初始化速度
fSwarm = zeros(SwarmSize,1);
for i=1:SwarmSize
    fSwarm(i,:) = PSO_PID(Swarm(i,:));                         % 粒子群的適應(yīng)值
end


%% 個(gè)體極值和群體極值
[bestf,bestindex]=min(fSwarm);
zbest=Swarm(bestindex,:);   % 全局最佳
gbest=Swarm;                % 個(gè)體最佳
fgbest=fSwarm;              % 個(gè)體最佳適應(yīng)值
fzbest=bestf;               % 全局最佳適應(yīng)值

迭代尋優(yōu)

iter = 0;
y_fitness = zeros(1,MaxIter);   % 預(yù)先產(chǎn)生4個(gè)空矩陣
K_p = zeros(1,MaxIter);         
K_i = zeros(1,MaxIter);
K_d = zeros(1,MaxIter);
while( (iter < MaxIter) && (fzbest > MinFit) )
    w = wmax-(wmax-wmin)/MaxIter*iter;  %% 慣性權(quán)重因子調(diào)整
    for j=1:SwarmSize
        % 速度更新
        VStep(j,:) = w*VStep(j,:) + c1*rand*(gbest(j,:) - Swarm(j,:)) + c2*rand*(zbest - Swarm(j,:));
        if VStep(j,:) >Vmax, VStep(j,:)=Vmax; end
        if VStep(j,:)< Vmin, VStep(j,:)=Vmin; end
        % 位置更新
        Swarm(j,:)=Swarm(j,:)+VStep(j,:);
        for k=1:Dim
            if Swarm(j,k) >Ub(k), Swarm(j,k)=Ub(k); end
            if Swarm(j,k)< Lb(k), Swarm(j,k)=Lb(k); end
        end
        % 適應(yīng)值
        fSwarm(j,:) = PSO_PID(Swarm(i,:));
        % 個(gè)體最優(yōu)更新     
        if fSwarm(j) < fgbest(j)
            gbest(j,:) = Swarm(j,:);
            fgbest(j) = fSwarm(j);
        end
        % 群體最優(yōu)更新
        if fSwarm(j) < fzbest
            zbest = Swarm(j,:);
            fzbest = fSwarm(j);
        end
    end 
    iter = iter+1;                      % 迭代次數(shù)更新
    y_fitness(1,iter) = fzbest;         % 為繪圖做準(zhǔn)備
    K_p(1,iter) = zbest(1);
    K_i(1,iter) = zbest(2);
    K_d(1,iter) = zbest(3);
end

繪圖輸出

figure     % 繪制性能指標(biāo)ITAE的變化曲線
plot(y_fitness,'LineWidth',2)
title('最優(yōu)個(gè)體適應(yīng)值','fontsize',18);
xlabel('迭代次數(shù)','fontsize',18);ylabel('適應(yīng)值','fontsize',18);
set(gca,'Fontsize',18);


figure      % 繪制PID控制器參數(shù)變化曲線
plot(K_p)
hold on
plot(K_i,'k','LineWidth',3)
plot(K_d,'--r')
title('Kp、Ki、Kd 優(yōu)化曲線','fontsize',18);
xlabel('迭代次數(shù)','fontsize',18);ylabel('參數(shù)值','fontsize',18);
set(gca,'Fontsize',18);
legend('Kp','Ki','Kd');

目標(biāo)函數(shù)設(shè)計(jì)

function z=PSO_PID(x)
assignin('base','Kp',x(1));    %粒子依次賦值給Kp
assignin('base','Ki',x(2));    %粒子依次賦值給Ki
assignin('base','Kd',x(3));    %粒子依次賦值給Kd
try  %% simulink仿真異常,返回一個(gè)極大值
    y_out=sim('PID_Model',[0,20]);    %使用命令行運(yùn)行控制系統(tǒng)模型
    z = y_out.yout{1}.Values.Data(end);
catch
    z=1e6;
end

代碼中assignin實(shí)現(xiàn)了m文件和simulink傳遞參數(shù),其中y_out是simulink輸出的目標(biāo)變量,為啥這兒需要一個(gè)try呢,因?yàn)檫@個(gè)優(yōu)化的過程中,可能參數(shù)設(shè)置不合理,會(huì)拋出simulink報(bào)錯(cuò),故增加一個(gè)try避免代碼異常出錯(cuò)提前結(jié)束優(yōu)化過程

simulink模型用一個(gè)簡(jiǎn)單的pid控制帶時(shí)延的傳遞函數(shù)

圖片

仿真結(jié)果類似這樣,因?yàn)榈螖?shù)很少,設(shè)計(jì)中可以加大,得到更優(yōu)的結(jié)果

圖片

聲明:本文內(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

    文章

    176

    瀏覽量

    20338
  • PID控制器
    +關(guān)注

    關(guān)注

    2

    文章

    173

    瀏覽量

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

    關(guān)注

    0

    文章

    63

    瀏覽量

    13200
  • 數(shù)字控制器
    +關(guān)注

    關(guān)注

    0

    文章

    100

    瀏覽量

    19791
  • simulink仿真
    +關(guān)注

    關(guān)注

    0

    文章

    75

    瀏覽量

    8754
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    永磁同步直線電機(jī)的粒子群PID空間矢量控制

    PID 控制器,并通過 MAT- LAB/Simulink 對(duì)永磁同步直線電機(jī)和其空間矢量控制系統(tǒng)進(jìn)行建模和仿真實(shí)驗(yàn)。仿真結(jié)果表明,采用粒子群優(yōu)化
    發(fā)表于 03-27 12:07

    改進(jìn)粒子群算法的永磁同步電機(jī)PID控制器

    參數(shù)進(jìn)行控制約束參量分析。采用改進(jìn)的粒子群算法進(jìn)行PD控制的加權(quán)訓(xùn)練,實(shí)現(xiàn)控制目標(biāo)畫數(shù)最優(yōu)化求解,進(jìn)行永磁同步電機(jī)PID 控制律
    發(fā)表于 05-28 15:44

    PSO算法在數(shù)控機(jī)床交流伺服系統(tǒng)PID參數(shù)優(yōu)化的應(yīng)用

    PSO算法在數(shù)控機(jī)床交流伺服系統(tǒng)PID參數(shù)優(yōu)化的應(yīng)用摘要:針對(duì)發(fā)展高精度數(shù)控機(jī)床的要求,在數(shù)控機(jī)床交流伺服控制系統(tǒng)
    發(fā)表于 05-17 11:38

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

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

    什么是粒子群算法

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

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

    本文提供粒子群算法簡(jiǎn)介和一個(gè)算法舉例,提供粒子群算法仿真PID的M文件代碼及
    發(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

    PID控制器的量子粒子群多目標(biāo)優(yōu)化設(shè)計(jì)

    摘要:智能算法粒子群算法已被應(yīng)用于PID控制器的參數(shù)優(yōu)化,以彌補(bǔ)傳統(tǒng)
    發(fā)表于 01-27 13:48 ?27次下載

    基于新粒子群算法優(yōu)化向量機(jī)參數(shù)

    通過研究電力負(fù)荷預(yù)測(cè)中支持向量機(jī)的參數(shù)優(yōu)化問題,將改進(jìn)后新的粒子群算法導(dǎo)入支持向量機(jī)參數(shù),從而
    發(fā)表于 11-13 14:50 ?4次下載

    基于粒子群優(yōu)化的模糊PID控制器研究

    針對(duì)閥控非對(duì)稱伺服缸非線性、參數(shù)時(shí)變的特點(diǎn),考慮到油液壓縮特性的影響,建立了包含變體積彈性模量的系統(tǒng)數(shù)學(xué)模型。提出一種基于粒子群算法優(yōu)化( PSO)的模糊自適應(yīng)
    發(fā)表于 03-05 16:00 ?2次下載
    基于<b class='flag-5'>粒子群</b><b class='flag-5'>優(yōu)化</b>的模糊<b class='flag-5'>PID</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><b class='flag-5'>優(yōu)化</b><b class='flag-5'>算法</b>實(shí)現(xiàn)增量式的<b class='flag-5'>PID</b>控制

    基于免疫粒子群優(yōu)化算法的增量式PID控制

    基于免疫粒子群優(yōu)化算法的增量式PID控制(山東匯科工控技術(shù)有限公司官網(wǎng))-文檔為基于免疫粒子群優(yōu)化
    發(fā)表于 09-30 12:27 ?12次下載
    基于免疫<b class='flag-5'>粒子群</b><b class='flag-5'>優(yōu)化</b><b class='flag-5'>算法</b>的增量式<b class='flag-5'>PID</b>控制

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

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