1、选择什么样的目标函数?
伺服系统的一般要求:超调量小、调节时间短、驱动包和,其他非线性
2、性能指标选择
-
二次型指标
- 局限性:人为选择加权矩阵,不客观的目标函数;已经经过多次化简,偏离了原始问题
- 积分型性能指标。
-
误差信号是时变指标,不能利用某一时刻的值作为整体的一个情况
3、如何将最优控制器设计问题转化为一般的最优化数值解问题
(1)例:假设受控对象为:
-
现有的绝大部分PID控制器设计算法是针对一阶带有时间延迟受控对象模型的,上面模型难以设计控制器
-
如何将该控制器设计问题转化为最优化问题?
(2)目标函数:
-
该如何设计最优的PID控制器,能使得ITAE和ISE误差取得最小,哪个更好?
-
如果超调量大怎么办?
-
控制信号过大怎么办?
-
如何选择tf?
-
如何获得全局最优解?
4、ITAE指标下最优PID控制器设计
(1)先建立Simulink模型表示控制系统和ITAE积分输出
-
PID控制器模块,或者底层搭建PID控制器子模型
-
ITAE积分为单调递增的函数
-
建立Simulink框图,描述控制与ITAE积分
(2)明确决策变量:Kp,Ki,Kd
(3)选定终止仿真时间tf,如tf=30;
(4)写出目标函数
function y=mw_optpidml(x)
assignin('base','Kp',x(1));
assignin('base','Ki',x(2));
assignin('base','Kd',x(3));
[t,xx,yy]=sim('xdy',[0,30]);
y=yy(end);
(5)求解最优化问题
x=fminsearch(@xdy,rand(3,1))
最后的控制器输出曲线
误差曲线
5、ISE指标下的最优PID控制器设计
(1)将Simulink模型稍作修改,得出新的模型,在模型中重新定义误差信号的积分为:
(2)目标函数和重新模型对应
function y=mw_optpidmla(x)
assignin('base','Kp',x(1));
assignin('base','Ki',x(2));
assignin('base','Kd',x(3));
[t,xx,yy]=sim('xdya',[0,30]);
y=yy(end);
(3)重新求解最优化问题
x=fminsearch(@xdya,x)
控制器输出曲线:
误差跟踪:
6、ITAE与ISE最优PID控制器效果比较
ITAE性能指标在跟踪误差信号时,由于对时间有加权作用,所以当时间增大时,会尽快的稳定下来
ISE同等的处理各个时段的误差信号。
为什么文献中多研究ISE或者H2(2-范数)最有控制?
-
ISE易于数值求解,尤其在没有强大计算机仿真软件的前提下有优势,所以这方面的文献比较多
-
利用下面的算法可以求出ISE的闭式解
-
Lyapunov方程求解
-
Astrom的频域递推算法
-
-
ITAE需要借助于仿真软件获取仿真结果
-
计算量增大,但最优解更有意义
所以在实际伺服控制实验中,借助于强大的仿真平台,我们更应该考虑ITAE性能指标
7、如果超调量过大怎么办?
两种求解方法:
-
引入有约束最优化求解函数,如fmincon
-
用惩罚的方法限制大超调量出现
8、如果控制信号过大怎么办?
(1)PID控制器输出信号有时候很大(尤其是经过微分的信号),会损坏系统的硬件,解决办法
-
限制控制信号,如H∞控制中的W2(s)加权函数,整个系统保持线性系统框架,但是过于保守
-
引入驱动饱和环节对控制i新年好钳位
-
引入非线性环节
-
确保控制信号不超过允许的范围
-
非线性对数值优化求解没有过大影响
-
9、如何选择tf
(1)典型的ITAE积分函数曲线
-
单调递增
-
迫使误差尽快收敛到0
(2)仿真结论:tf∈(tf,2tf)合适,对结果影响不大
-
过大忽略了初始响应
-
过小不能真正优化
(3)具体设计需要事后检验
10、如何得到全局最优解
(1)传统优化方法的局限性
-
初始搜索点选择对结果有影响
-
容易陷入局部最优解
(2)全局最优解的方法
-
精华算法如遗传算法、粒子群优化算法等
-
全局最优解优化工具箱(遗传算法和直接搜索)
-
第三方工具箱(到MathWorks网站下载),如GAOT,PS0t