MATLAB 遗传算法工具箱的入门使用

在做摩擦力辨识中,因为需要用对非线性模型的参数进行辨识,在上一篇博客中使用了非线性最小二乘的辨识方法,但是其辨识结果的精准度受辨识参数初值的选取影响很大,很容易陷入局部最优解,而不能得到全局最优解,所以使用遗传算法来进行辨识,遗传算法是可以得到全局最优解的。

最开始是自己编写的遗传算法程序来进行辨识,但是得到的结果有些瑕疵,所以尝试使用MATLAB工具箱来做一次。下面是入门使用的方法(MATLAB版本是201b):

1. 打开MATLAB遗传算法工具箱:(1)点击状态栏的APP;(2)找到Optimization并打开,如下图所示:

在Solver后面的下拉框中,选择遗传算法:ga-Genetic Algorithm,下边分别就遗传算法的几个步骤进行说明。

MATLAB 遗传算法工具箱的入门使用

2. fitness function 适应度函数

在学习遗传算法后我们知道中间一个步骤是需要确定适应度函数,而适应度函数一般是通过目标函数转换而来,在一些解决函数最大值和最小值的问题中,可以直接把函数输出作为目标函数和适应度函数。经过测试验证,在改工具箱中,适应度函数的输出结果越小标明越准确。下面介绍摩擦力模型及适应度函数:

我要辨识的摩擦力模型为:

MATLAB 遗传算法工具箱的入门使用

需要辨识其中的 A,B,C 和 D 四个参数,通过实验采集到的实际输入数据 v 和输出数据 F。因为工具箱要求的适应度函数是输出结果趋小的,所以我这里选择目标函数为适应度函数,如下:

MATLAB 遗传算法工具箱的入门使用

其中

MATLAB 遗传算法工具箱的入门使用

为辨识误差。

将该目标函数以函数的形式写到 MATLAB 的m文件中,如下:

% 使用遗传算法工具箱的适应度函数 function result = steadyfitness(a) load SteadyData.mat; u = (up+abs(un))/2/4; Fi =u\'; % 均匀实验测得摩擦力的实测值 w = vd\'; % 速度输入值 N = size(w,1); for i = 1:1:N F_GA(i) = (a(1)+a(2)*exp(-(w(i)/a(3))^2))*sign(w(i)) + a(4)*w(i); Ji(i) = Fi(i) - F_GA(i); J(i) = 0.5*Ji(i)*Ji(i); end result = sum(J); end

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfjxz.html