学堂 学堂 学堂公众号手机端

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

lewis 6年前 (2019-08-30) 阅读数 5 #技术
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).

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


版权声明

本文仅代表作者观点,不代表博信信息网立场。

热门