利用算法寻找PID参数的基本逻辑
简单来说,算法不能直接找到合适的PID参数,我们是借助一个评价系统综合指标的函数,通过函数输出值的大小来衡量系统综合性能的好坏。而这个函数的输出值,通常与校正后的系统的快、准、稳特性有关。
举一个小小的例子:
1 | fitness_Fun_Model=0.6.*Mp+0.1.*ts+0.15.*ess+0.15.*tr; |
这代表着这个函数中超调量的占比为0.6,误差占比为0.15,上升时间占比为0.15,调节时间占比为0.1.说明了我们比较看重超调对系统的影响,误差、上升时间、调节时间等的影响不是特别在意。若函数的输出越来越小,说明占较大比例的超调量一定不会很大。若要找到对于系统各项性能都可以满足的PID参数,这个函数的各项比例一定要选的合适。
如果更精确的分析,这些数据的量纲都不一样,不能简单的直接用百分比来划分比例。可以尝试标准化或是使用合适的系数来调节。
总的来说,这个函数的输出越小,系统的性能越好
算法找寻的逻辑
1)生产一定数量的随机样本,计算其评价函数值,围绕初始值随机增减,比较与原始值的大小,变小则说明这样变化可以优化系统性能,则改变数值为之后修正后的数值。反之则不变。
2)迭代到一定次数后,可能会得到一组无论往哪个方向变化都不会使我们评价函数变小的值,理论上这个值就是我们寻找的“最优解”
整体的算法逻辑类似与爬山,最高的山顶为我们的理想最优值。在随机的出生点往周围探索,发现有的海拔上升有的海拔下降,等到达一个四周都是下降的地方时,就可以认为到达高峰了。
但是这也有一个问题,这个最优解可能是一个局部最优解,而不是全局最优解。用山来比喻的话就是它是市里最高的山,但不是省里或是全国最高的山。这是我们的解决方法就是在探索初期加大探索范围,后期太调小范围做精确查找。
正余弦算法步骤
Step1.
输入总体大小N和最大迭代次数T,初始化所有参数,包括
r1:算法中的需要的区域位置(或移动方向);
r2:运动应朝着目的地或向目的地向外移动的距离;
r3:随机权重值;
r4:表示正弦和余弦均等概率;初始化种群数量xi(i=1,2,3,…,N),并提供初始化解空间。
Step2.
根据参数使用下列公式更新r1:
r1=a-t*a/T
使用r1公式可以将方程扩展到更高的维度,提供更大的搜索空间,当r1>1时使用更大的解空间。r1<1时使用较小的解空间。
当r1>1时,所谓更大的解空间为算法的探索阶段,当r1<1时,所谓较小解空间为算法开发阶段,无限逼近或者找到最优解。
Step3.
对于SCA算法而言,算法的开发和探索阶段用到的公式是相同的,但是在开发阶段中,随机解会逐渐变化且随机变化远小于探索阶段的变化。其公式如下:
其中,r4是(0,1)之间的随机数,使用正弦公式求解和使用余弦公式求解的概率是相同的,向量表示每一维度的目标点。
Step4.
经过多次迭代,到达规定的条件后停止迭代,返回最佳位置,输出最优值,算法结束。
Demo代码
感谢此算法的创作者Mirjalil提供的Demo供我们学习。 Matlab下载地址
Matlab文件说明
- SCA.m文件主要是SCA算法的内容,主要实现上述正余弦算法中的步骤。
- main.m文件主要是主程序。负责选择探索范围,调用画图程序,设置初始群数量。
- initialization.m文件主要是初始化部分。