【PID优化】基于人工蜂群算法PID控制器优化设计含Matlab源码

1 内容介绍

由于PID控制器算法简单,鲁棒性强的特点,是目前使用最多的一种控制器,被广泛应用在各类工业控制领域.将基于人工蜂群算法的PID参数优化,在葡萄酒发酵温度控制系统中的应用进行了深入研究.

2 部分代码

clc;

clear;

close all;

%% Problem Definition

CostFunction=@(x) Sphere(x);        % Cost Function

nVar=5;             % Number of Decision Variables

VarSize=[1 nVar];   % Decision Variables Matrix Size

VarMin=-10;         % Decision Variables Lower Bound

VarMax= 10;         % Decision Variables Upper Bound

%% ABC Settings

MaxIt=200;              % Maximum Number of Iterations

nPop=100;               % Population Size (Colony Size)

nOnlooker=nPop;         % Number of Onlooker Bees

L=round(0.6*nVar*nPop); % Abandonment Limit Parameter (Trial Limit)

a=1;                    % Acceleration Coefficient Upper Bound

%% Initialization

% Empty Bee Structure

empty_bee.Position=[];

empty_bee.Cost=[];

% Initialize Population Array

pop=repmat(empty_bee,nPop,1);

% Initialize Best Solution Ever Found

BestSol.Cost=inf;

% Create Initial Population

for i=1:nPop

    pop(i).Position=unifrnd(VarMin,VarMax,VarSize);

    pop(i).Cost=CostFunction(pop(i).Position);

    if pop(i).Cost<=BestSol.Cost

        BestSol=pop(i);

    end

end

% Abandonment Counter

C=zeros(nPop,1);

% Array to Hold Best Cost Values

BestCost=zeros(MaxIt,1);

%% ABC Main Loop

for it=1:MaxIt

    

    % Recruited Bees

    for i=1:nPop

        

        % Choose k randomly, not equal to i

        K=[1:i-1 i+1:nPop];

        k=K(randi([1 numel(K)]));

        

        % Define Acceleration Coeff.

        phi=a*unifrnd(-1,+1,VarSize);

        

        % New Bee Position

        newbee.Position=pop(i).Position+phi.*(pop(i).Position-pop(k).Position);

        

        % Evaluation

        newbee.Cost=CostFunction(newbee.Position);

        

        % Comparision

        if newbee.Cost<=pop(i).Cost

            pop(i)=newbee;

        else

            C(i)=C(i)+1;

        end

        

    end

    

    % Calculate Fitness Values and Selection Probabilities

    F=zeros(nPop,1);

    MeanCost = mean([pop.Cost]);

    for i=1:nPop

        F(i) = exp(-pop(i).Cost/MeanCost); % Convert Cost to Fitness

    end

    P=F/sum(F);

    

    % Onlooker Bees

    for m=1:nOnlooker

        

        % Select Source Site

        i=RouletteWheelSelection(P);

        

        % Choose k randomly, not equal to i

        K=[1:i-1 i+1:nPop];

        k=K(randi([1 numel(K)]));

        

        % Define Acceleration Coeff.

        phi=a*unifrnd(-1,+1,VarSize);

        

        % New Bee Position

        newbee.Position=pop(i).Position+phi.*(pop(i).Position-pop(k).Position);

        

        % Evaluation

        newbee.Cost=CostFunction(newbee.Position);

        

        % Comparision

        if newbee.Cost<=pop(i).Cost

            pop(i)=newbee;

        else

            C(i)=C(i)+1;

        end

        

    end

    

    % Scout Bees

    for i=1:nPop

        if C(i)>=L

            pop(i).Position=unifrnd(VarMin,VarMax,VarSize);

            pop(i).Cost=CostFunction(pop(i).Position);

            C(i)=0;

        end

    end

    

    % Update Best Solution Ever Found

    for i=1:nPop

        if pop(i).Cost<=BestSol.Cost

            BestSol=pop(i);

        end

    end

    

    % Store Best Cost Ever Found

    BestCost(it)=BestSol.Cost;

    

    % Display Iteration Information

    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);

    

end

    

%% Results

figure;

%plot(BestCost,'LineWidth',2);

semilogy(BestCost,'LineWidth',2);

xlabel('Iteration');

ylabel('Best Cost');

grid on;

img =gcf;  %获取当前画图的句柄

print(img, '-dpng', '-r600', './运行结果.png')         %即可得到对应格式和期望dpi的图像

3 运行结果

4 参考文献

[1]马步云, 赵世海. 基于人工蜂群算法的PID控制技术应用研究[J]. 机械管理开发, 2016, 31(002):24-26.

[2]胡海涛, 高嵩, 陈超波,等. 一种改进人工蜂群的分数阶PID控制器优化算法[J]. 计算机测量与控制, 2017(7).

博主简介:擅长智能优化算法神经网络预测信号处理元胞自动机图像处理路径规划无人机雷达通信无线传感器等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值