基于单纯形法的PID参数优化设计.docx
《基于单纯形法的PID参数优化设计.docx》由会员分享,可在线阅读,更多相关《基于单纯形法的PID参数优化设计.docx(18页珍藏版)》请在冰豆网上搜索。
基于单纯形法的PID参数优化设计
基于单纯形法的PID参数优化设计
摘要
PID参数整定是自动控制领域研究的重要内容,PID参数的最优性决定了控制的稳定性和快速性,也可保证系统的可靠性。
传统的PID参数多采用试验加试凑的方式由人工进行优化,往往费时并且难以满足控制的实时要求。
为了解决PID参数的优化问题,采用单纯形法对PID参数寻优,以获得满意的控制效果。
本文介绍了单纯形法的基本原理,并针对单纯形法在PID参数寻优中存在的问题进行了分析,并对其进行了实验仿真。
结果表明,用单纯形法整定PID参数,可以提高优化性能,对控制系统具有较好的控制精度、动态性能。
关键词:
PID控制器单纯形法PID整定
一、综述
1.1选题背景
PID调节器是最早发展起来的控制策略之一,因为它所涉及的设计算法和控制结构都是简单的,并且十分适用于工程应用背景,此外PID控制方案并不要求精确的受控对象的数学模型,且采用PID控制的控制效果一般是比较令人满意的,所以在工业实际应用中,PID调节器是应用最为广泛的一种控制策略,也是历史最久、生命力最强的基本控制方式。
调查结果表明在当今使用的控制方式中,PID型占84.5%,优化PID型占6.8%,现代控制型占有1.5%,手动控制型6.6%,人工智能(AI)型占0.6%。
如果把PID型和优化PID型二者加起来则占90%以上,这说明PID控制方式占绝大多数,如果把手动控制型再与上述两种加在一起,则占97.5%,这说明古典控制占绝大多数。
就连科学技术高度发达的日本,PID控制的使用率也高达84.%。
这是由于理论分析及实际运行经验已经证明了PID调节器对于相当多的工业过程能够起到较为满足的控制效果。
它结构简单、适用面广、鲁棒性强、参数易于调整、在实际中容易被理解和实现、在长期应用中已积累了丰富的经验。
特别在工业过程中,由于控制对象的精确数学模型难以建立,系统的参数又经常发生变化,运用现代控制理论分析综合要耗费很大的代价进行模型辨识,但往往不能达到预期的效果,所以不论常规调节仪表还是数字智能仪表都广泛采用这种调节方式。
正是PID控制算法具有以上多种优点,所以这种算法仍将在现场控制中居于主导地位
随着现代控制理论的建立和不断发展完善,对过程控制提出了新的方法和思路,同日寸也由于生产工艺不断地改进提高,对过程控制也提出了高要求。
科研人员在不断探索新方法的同时,也对传统的PID控制的改进做了大量的研究。
因为PID控制有其固有的优点,使得PID控制在今后仍会大量使用,如何进一步提高PID控制算法的能力或者依据新的现代控制理论来设计PID控制算法是一个非常吸引人的课题。
科研人员在这一领域做的工作主要有以下两方面。
①PID参数自整定。
由于受控对象存在着大量不可知因素,如随机扰动、系统时变、敏感误差等,这些不可知因素的作用常会导致受控对象参数的改变。
在一个PID反馈控制回路中,受控对象参数的变化就会造成原来的PID参数控制性能的降低,为了克服这个问题人们提出了PID参数自整定,也就是随着受控对象的变化PID调节器自我调整和重新设定PID参数,科研人员根据古典控制理论和现代控制理论提出了许多种PID参数的在线自整定的方法。
至今仍有人在这方面继续作研究。
PID参数在线自整定方法比较典型的有改进型Ziegler-Nichols临界比例度法、基于过程模型辨识的参数自整定、基于经验的专家法参数自整定、模糊型PID调节器等。
②PID参数优化。
PID参数优化是指依据一定的控制目标和给定的生产过程的模型通过理论计算得到最优的PID参数,PID参数优化在PID控制应用之初人们就开始作了大量研究工作,已经提出了许多种方法,如粒子群优化算法,免疫算法,单纯形法,差分进化算法,神经网络算法,遗传算法等。
本文就是应用单纯性算法对二阶对象的PID控制器参数优化,使系统进行具有更好的性能。
1.2PID参数优化方法综述
1.2.1Ziegler-Nichols设定方法
Ziegler与Nichols(1942)提出了调节PID控制器的参数的经验公式,这一调节器可根据带有时滞环节的一阶近似模型的阶跃响应或频率响应数据来设定。
假设对象模型为
根据对象参数K、T、和
可以由经验公式求取控制器的参数。
1.2.2临界比例度法
当已系统的临界比例增益
和振荡周期
时,也可以用经验整定公式来确定PID控制器的参数,例如:
以上两种传统方法都是根据大量的实验计算或实际工程经验所得到的数据整理汇总所得到的公式而得来的,在实际的工程应用中有很大的弊端。
1.2.3单纯形法
单纯形是美国数学家G.B.丹齐克于1947年首先提出来的。
它的理论根据是:
线性规划问题的可行域是n维向量空间Rn中的多面凸集,其最优值如果存在必在该凸集的某顶点处达到。
单纯形法的基本思想是:
先找出一个基本可行解,对它进行鉴别,看是否是最优解;若不是,则按照一定法则转换到另一改进的基本可行解,再鉴别;若仍不是,则再转换,按此重复进行。
因基本可行解的个数有限,故经有限次转换必能得出问题的最优解。
如果问题无最优解也可用此法判别。
单纯形法具有初值敏感性。
在初始条件选择不当的情况下,单纯形法无法寻找到合适的参数,控制目标无法满足要求。
同时单纯形法难以解决多值函数最优化问题。
在多参数寻优(如串级系统)问题中,容易造成寻优失败或时间过长。
1.2.4粒子群优化算法
粒子群优化(ParticleSwarmOptimization-PSO)算法是近年来发展起来的一种新的进化算法(EvolutionaryAlgorithm-EA)。
PSO算法属于进化算法的一种,和遗传算法相似,它也是从随机解出发,通过迭代寻找最优解,它也是通过适应度来评价解的品质。
但是它比遗传算法规则更为简单,它没有遗传算法的“交叉”(Crossover)和“变异”(Mutation)操作。
它通过追随当前搜索到的最优值来寻找全局最优。
1.2.5差分进化算法
差分进化(DE)算法是一种采用浮点矢量编码的在连续空间中进行随机搜索的优化算法。
在差分进化算法中,首先由父代个体间的差分矢量构成变异算子;接着按一定的概率,父代个体与变异个体之间进行交叉操作,生成一个试验个体;然后在父代个体和试验个体之间根据适应度的大小进行选择操作,适应度大的保存到下一代群体中去。
1.2.6神经网络法
常规的PID参数优化方法中,直接基于目标函数的单纯形法等优化方法是最常用的方法,这是因为在工业控制中很多被控对象的模型难以用精确的数学模型描述,即使在某一工况下,被控对象可以用数学模型描述,但在运行过程中,对象的特性一旦发生变化,这一确定的模型便不再适用。
而神经网络的引人则在一定程度上解决和改善了这一问题。
在基于神经网络的PID参数优化方法中,神经网络一般与被控对象并列,作为一个神经网络的辨识器。
在网络经过学习后,神经网络辨识器的输出便可以很好地跟踪被控对象的输出。
由于神经网络辨识器具有确定的结构,学习之后,其连接权及各节点的闹值都有确定的数值。
这时,该神经网络辨识器的结构就可以作为被控对象结构的一个近似。
用神经网络辨识器输出与输人的传递函数模型来近似地代替被控对象的模型,进而用梯度下降法,拟牛顿法优化出PID参数。
1.3本论文主要工作
本论文的主要工作是研究利用单纯形法对二阶系统的PID控制器参数进行优化,并且使用Matlab对控制系统进行仿真。
首先,对单纯形法进行了介绍,包括单纯形的概念,单纯形算法的基本原理;其次,以二阶系统为模型,利用单纯形法对其PID控制器参数进行优化,最后利用Matlab对优化后控制系统进行仿真研究。
二、单纯形算法
2.1单纯形算法简介
最优化方法按照搜索机制的不同,具体可以分为两类:
一类是解析算法,一类是直接法。
解析法是最优化问题的经典算法,但是必须求解目标函数的导数。
这时,就应该放弃求梯度的方法,而采用直接法。
直接法主要是在迭代过程中直接比较目标函数值的大小,再根据一定的收敛终止条件,获得最优解。
它的基本思想及迭代过程,直观易懂,易于为工程技术人员接受,但是它并未利用目标函数的性质及其解析性质,故收敛速度较慢。
适合用于处理低维问题。
单纯形是美国数学家家G.B.丹齐克于1947年首先提出来的。
它的理论根据是:
线性规划问题的可行域是n维向量空间Rn中的多面凸集,其最优值如果存在必在该凸集的某顶点处达到。
单纯形法的基本过程是:
先找出一个基本可行解,对它进行鉴别,看是否是最优解;若不是,则按照一定法则转换到另一改进的基本可行解,再鉴别;若仍不是,则再转换,按此重复进行。
因基本可行解的个数有限,故经有限次转换必能得出问题的最优解。
如果问题无最优解也可用此法判别。
2.2单纯形基本思想
单纯形寻优算法的基本思想是:
对于非线性模型中的n个待估参数,以n+1个顶点构成最简单的图形,并对n+1个顶点的目标函数值进行比较,从结果来判断其变化的大致趋势,并作为下一步实验的参考,再利用一定的换点原则,使单纯形想最优点区域推进。
从这一点来说,单纯形算法也是一种实验最优化算法,纯粹从实验的角度来寻找最优目标。
在每次迭代时,利用已有的单纯形去寻找一个函数值更小的点,如果得到这样的一个更好的店,则用这个新点作为一个顶点构造新的单纯形。
否则的话,将已有单纯形缩小重复迭代。
2.3单纯形算法流程
Step1:
选取一组初始单纯形顶点
以及投影系数
、放大系数
和收缩系数
。
Step2:
计算各个顶点的目标函数值,找出目标函数最大值点
和最小值点
。
Step3:
计算投影中心点
,根据投影系数
确定投影点
。
Step4:
如果
,利用
代替
并形成一个新的单纯形,返回step2。
Step5:
放大单纯形。
令
,如果
,则放大成功,用
代替
并形成一个新的单纯形,如果
,则放大失败,仍然
用代替
返回step2,继续投影过程。
Step6:
收缩单纯形。
如果对于除
外的所有点,都有
以及
,则用
代替
并对单纯形缩小:
。
如果
仍然缩小单纯形,但不改变先前的背投影点
;如果
,则用
来代替原来的被投影点
,再继续进行投影过程;如果
,则该收缩过程失败,此时用
来代替所有的
,然后继续进行投影过程。
Step7:
如果定点的相对误差满足给定的精度要求,则停止迭代,当前单纯性的形心即为最优点。
2.4单纯形算法的优缺点
单纯形算法的优点是不用求待求函数的一次倒数矩阵和海森矩阵,不用进行复杂的矩阵运算,占用内存小,计算工作量小,对初值的要求不严格,对于大型复杂的函数求机制,不会出现收敛性能不稳定的现象。
但是非线性规划单纯形算法也有很多的缺点,如单纯形算法的迭代次数太多,收敛速度缓慢,在迭代过程中有时会出现单纯形退化现象等,这些缺点严重影响了飞仙线性规划单纯形算法的使用。
单纯形法并没有很好地理论性质,即使收敛,收敛也是线性的。
但它具有简单使用的有点,计算表明单纯形方法十分可靠,特别低,它能处理函数值变化剧烈的函数。
本算法上机占用内存很少,对变量不多且精度要求不高的问题此法很方便,但当变量个数多于十个以上,此法就显得不十分有效。
三、二阶系统PID控制器参数整定过程
3.1连续对象离散化
由于工业领域中的被控对象一般为一阶或二阶环节,因此,在本文里我们拟定受控对象的传递函数为如下:
其中采样时间为1s。
利用零阶保持器法将
化成
如下:
由于
,控制量
与
之间的差分方程在程序可以如下实现:
3.2PID控制器离散化
理想模拟PID控制器的传递函数为:
采用后向差分将上式离散化,得:
增量式PID的后向差分方程为:
3.3性能指标
采用如下二次型性能指标函数:
其中
为常数,取值范围为
。
利用单纯形法不断计算目标函数值,从而得到最优的PID控制器的参数。
3.4实验结果分析
对象原阶跃响应图如下:
在程序中PID参数初始值选择为:
kp=1,ki=0.8,kd=0.8;
通过在MATLAB中调用程序整定PID控制器参数后,系统的阶跃响应图如下;
由系统阶跃响应图可以看出,通过整定后系统的静态指标和动态指标都达到了要求,这说明采用单纯形法整定PID参数是正确的、可行的。
在单纯形法程序中,选择各个顶点与单纯形的中心点的函数值的差值的平方和作为误差,误差限
,整定过程中误差收敛曲线如下:
从误差收敛曲线可以看出,单纯形虽然最终误差收敛到接近于0,但是中间却出现比较大的峰值变化,这说明在峰值变化出,单纯形法陷入了不利的条件,这是由于单纯形法对初值的敏感性所产生的。
性能指标
的收敛曲线如下:
从二次型性能指标的收敛曲线可以看出,在单纯形法的迭代过程中,目标函数值是一直减小的,这说明单纯形法收敛速度虽然慢,但是目标函数值是在降低的,解是在向最优解靠近的。
所以用单纯形法整定PID参数是可行的。
四、总结
PID控制器结构简单,容易实现,且鲁棒性好,因此广泛应用于各种控制领域,并取得了良好的控制效果。
单纯形算法是比较简单的算法之一,它过程简单易懂,在不需要考虑目标函数值性质的情况下就能找到问题的最优解。
本文将单纯形算法和PID控制结合起来应用于二阶系统的整定过程,利用单纯形算法来整定PID控制中的三个参数(Kp,Ki,Kd),取得了满意的效果。
单纯形算法算法运用于PID的参数整定,就可以克服常规PID整定方法的缺点,使要整定的参数精确收敛,从而使控制效果最优。
参考文献
[1]张磊,于单纯形法PID控制器的最优设计[J].信息与控制2004,33(3):
55-60.
[2]刘晓谦,王勇,穆顺勇.基于单纯形法的PID控制器参数优化设计[J].2004,21(11):
163-168.
[3]李勇,段正澄,胡伦骥.基于粒子群优化算法的液压伺服控制系统PID参数优化[D].华中科技大学.湖北武汉2007.
[4]周刘喜,张兴华,李纬.基于差分进化算法的PID优化设计[D].南京工业大学自动化学院,江苏南京2000.
[5]郭鹏,韩濮.基于神经网络的PID参数优化方法研究.华北电力大学动力系保定[D],2003.
程序附件:
clc;clear;closeall;%清除变量、窗体、及工作区间
globalrinyouttimef
%*********第一步:
单纯形替换法变量准备及设定***********
x0=[10.80.8];%Kp,Ti,Td初始值
l=1e-6;%单纯形棱长
r=1;%反射系数Gama,通常取1
e=2;%延伸系数,通常取2
n=3;%n=3表示问题为三维空间最优点求解
c=0.5;%收缩系数,通常取0.5
Maxstep=1000;%迭代最大次数
MarginErr=5e-13;%误差限
Bestv=zeros(1,3);%最优解
Bestf=0;%最优解对应的函数值
[v,f]=Initialize(x0,n,l);%调用初始化函数
%**第二步:
单纯形反射,延伸,收缩,减小棱长得到最优点****
Deltarecord=[];%误差记录矩阵
frecord=[];%函数值记录矩阵
fori=1:
Maxstep
%调用FYSJ函数求的下一次迭代所需要的单纯形
[Nextv,Nextf,Delta,Meanf]=FYSJ(v,f,r,e,c,n);
Deltarecord=[DeltarecordDelta];%记录误差
if(Deltafori=1:
3
Bestv(i)=sum(Nextv(:
i))/(n+1);
end
Bestf=Targetf(Bestv);
frecord=[frecordBestf];%记录函数值
break;
else
v=Nextv;
f=Nextf;
frecord=[frecordMeanf];%记录函数值
end
end
%********第三步:
做出误差收敛曲线,函数值变化曲线*******
figure;
%误差收敛曲线
[msize,nsize]=size(Deltarecord);
t=1:
nsize;
plot(t,Deltarecord,'b');
xlabel('时间');ylabel('误差');
title('误差收敛曲线');
figure;
%函数值变化曲线
[msize,nsize]=size(frecord);
t=1:
nsize;
plot(t,frecord,'b');
xlabel('时间');ylabel('函数值');
title('二次型性能指标收敛曲线');
%系统响应图
figure;
holdon;
plot(timef,yout);
xlabel('时间');ylabel('输出');
title('整定后系统阶跃响应图');
%%
%此函数用来建立系统模型,并求解目标函数
%Kpidi的三个参数分别为Kp,Ti,Td的值
%J为当前目标函数值
%%
functionJ=Targetf(Kpidi)
globalrinyouttimef
ts=1;%采样时间为1s
num=[0.0480.048*0.967];
den=[1-1.9050.905];%采用零阶保持器离散化传递函数矩阵
rin=1.0;%输入为阶跃输入
u_1=0.0;u_2=0.0;
y_1=0.0;y_2=0.0;
x=[0,0,0]';
error_1=0;
P=500;%采样点数
fork=1:
1:
P
timef(k)=k*ts;
r(k)=rin;
u(k)=Kpidi
(1)*x
(1)+Kpidi
(2)*x
(2)+Kpidi(3)*x(3);
yout(k)=-den
(2)*y_1-den(3)*y_2+num
(1)*u_1+num
(2)*u_2;
error(k)=r(k)-yout(k);
u_2=u_1;
u_1=u(k);
y_2=y_1;
y_1=yout(k);
x
(1)=error(k);%误差值
x
(2)=(error(k)-error_1)/ts;%误差变化量
x(3)=x(3)+error(k)*ts;%误差积分
error_1=error(k);
end
J=0;%目标函数J公式实现
fori=1:
1:
P
J=J+error(i)^2+0.5*u(i)^2;
end
%%
%此函数用来完成单纯形替换法变量准备及设定
%其中x0为Kp,Ti,Td初始值
%n为空间维度
%v为单纯形的n+1个顶点
%f为单纯形的n+1个顶点的函数值
%%
function[v,f]=Initialize(x0,n,l)
p=l*(sqrt(n+1)+n-1)/(sqrt
(2)*n);%z矩阵参数p
q=l*(sqrt(n+1)-1)/(sqrt
(2)*n);%z矩阵参数q
z=zeros(n+1,n);
%初始化z矩阵
fori=2:
(n+1)
forj=1:
n
if((i-1)==j)
z(i,j)=p;
else
z(i,j)=q;
end
end
end
%初始化v1...vn,也是单纯形的n+1个顶点
v=zeros(n+1,n);
v(1,:
)=x0;
fori=2:
(n+1)
v(i,:
)=x0+z(i,:
);
end
%初始化顶点函数值矩阵
f=zeros(n+1,1);
fori=1:
(n+1)
f(i)=Targetf(v(i,:
));
end
%%%
%本函数根据单纯性求解最优点的法则求解最优点
%v,f为得到的初始单纯性
%Nextv为下一个单纯形
%Nextf为下一个单纯形函数值
%Delta为本次单纯形的误差
%%%
function[Nextv,Nextf,Delta,Meanf]=FYSJ(v,f,r,e,c,n)
[fh,h]=max(f);%找出f中值最大的元素和其位置
[fl,l]=min(f);%找出f中值最大的元素和其位置
v0=zeros(1,n);%去掉最坏顶点后的(n-1)空间中单纯形的中心点
fori=1:
n
v0(i)=(sum(v(:
i))-v(h,i))/n;
end
vr=zeros(1,n);
vr=v0+r*(v0-v(h,:
));%通过v0反射vGama
fr=Targetf(vr);
%%%开始判断,oh,mygod,it'sreallyterrible%%%
if(fr%%%第一模块%%%
%如果frve=v0+e*(vr-v0);
fe=Targetf(ve);
if(fe<=fl)
%如果fev(h,:
)=ve;
f(h)=fe;
[Delta,Meanf]=Error(v,f);
else
v(h,:
)=vr;
f(h)=fr;
[Delta,Meanf]=Error(v,f);
end
%%%第一模块%%%
else
%%%第二模块%%%
fori=1:
n
if(i==h)
continue;
else
if(frv(h,:
)=vr;
f(h)=fr;
[Delta,Meanf]=Error(v,f);
break;
end
end
end
%%%第二模块%%%
%%%第三模块%%%
if(fr>fh)
vc=v0+c*(v(h,:
)-v0);
fc=Targetf(vc);
else
v(h,:
)=vr;
f(h)=Targetf(vr);
vc=v0+c*(v(h,:
)-v0);
fc=Targetf(vc);
end
%%%第三模块%%%
%%%第三模块%%%
if(fc<=fh)
v(h,:
)=vc;
f(h)=fc;
[Delta,Meanf]=Error(v,f);
else
fori=1:
(n+1)
v(i,:
)=0.5*(v(i,:
)+v(l,:
));
f(i)=Targetf(v(i,:
));
[Delta,Meanf]=Error(v,f);
end
end
end
Nextv