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

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

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

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

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

2. fitness function 适应度函数

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

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

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

其中

为辨识误差。

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
% 使用遗传算法工具箱的适应度函数
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

而后将函数句柄 “@steadyfitness" 写到工具箱界面的 fitness function 后面。

3. Number of variables:输入参数个数

这里待辨识参数有A,B,C和D这四个,所以这里填写 4。

4. bounds:辨识参数的上下界

此处设置为,Lower:[0 0 0 0],Upper:[0.5 0.5 0.1 0.5]。

5. 点击 Start,开始遗传算法求解

结束后结果会显示在 Final point中

下图见完整的配置:

6. 利用辨识参数的结果,绘制摩擦力模型

完结。

注:MATLAB工具箱的简单使用,上述几个步骤就够用了,如果要修改默认算法部分,就要学习遗传算法原理,修改工具箱右侧的参数。

2. fitness function 适应度函数

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

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

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

其中

为辨识误差。

将该目标函数以函数的形式写到 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

而后将函数句柄 “@steadyfitness" 写到工具箱界面的 fitness function 后面。

3. Number of variables:输入参数个数

这里待辨识参数有A,B,C和D这四个,所以这里填写 4。

4. bounds:辨识参数的上下界

此处设置为,Lower:[0 0 0 0],Upper:[0.5 0.5 0.1 0.5]。

5. 点击 Start,开始遗传算法求解

结束后结果会显示在 Final point中

下图见完整的配置:

6. 利用辨识参数的结果,绘制摩擦力模型

完结。

注:MATLAB工具箱的简单使用,上述几个步骤就够用了,如果要修改默认算法部分,就要学习遗传算法原理,修改工具箱右侧的参数。

本书可作为高等院校计算机、自动化、信息、管理、控制与系统工程等专业本科生或研究生的教材或参考书,也可供其他相关专业的师生及科研和工程技术人员自学或参考。作 者:雷英杰 等编著。第一章 遗传算法概述 1.1 遗传算法的概念 1.2 遗传算法的特点 1.2.1 遗传算法的优点 1.2.2 遗传算法的不足之处 1.3 遗传算法与传统方法的比较 1.4 遗传算法的基本用语 1.5 遗传算法的研究方向 1.6 基于遗传算法的应用 第二章 基本遗传算法及改进 2.1 遗传算法的运行过程 2.1.1 完整的遗传算法运算流程 2.1.2 遗传算法的基本操作 2.2 基本遗传算法 2.2.1 基本遗传算法的数学模型 2.2.2 基本遗传算法的步骤 2.2.3 遗传算法的具体例证 2.3 改进的遗传算法 2.3.1 改进的遗传算法一 2.3.2 改进的遗传算法二 2.3.3 改进的遗传算法三 2.3.4 改进的遗传算法四 2.4 多目标优化中的遗传算法 2.4.1 多目标优化的概念 2.4.2 多目标优化问题的遗传算法 第三章 遗传算法的理论基础 3.1 模式定理 3.2 积木块假设 3.3 欺骗问题 3.4 遗传算法的未成熟收敛问题及其防止 3.4.1 遗传算法的未成熟收敛问题 3.4.2 未成熟收敛的防止 3.5 性能评估 3.6 小生境技术和共享函数 第四章 遗传算法的基本原理与方法 4.1 编码 4.1.1 编码方法 4.1.2 编码评估策略 4.2 选择 4.3 交叉 4.4 变异 4.5 适应度函数 4.5.1 适应度函数的作用 4.5.2 适应度函数的设计主要满足的条件 4.5.3 适应度函数的种类 4.5.4 适应度尺度的变换 4.6 控制参数选择 4.7 约束条件的处理 第五章 遗传算法工具箱函数 5.1 工具箱结构 5.1.1 种群表示和初始化 5.1.2 适应度计算 5.1.3 选择函数 5.1.4 交叉算子 5.1.5 变异算子 5.1.6 多子群支持 5.2 遗传算法中的通用函数 5.2.1 函数 bs2rv 5.2.2 函数 crtbase 5.2.3 函数 crtbp 5.2.4 函数 crtrp 5.2.5 函数 migrate 5.2.6 函数 mut 5.2.7 函数 mutate 5.2.8 函数 mutbga 5.2.9 函数 ranking 5.2.10 函数 recdis 5.2.11 函数 recint 5.2.12 函数 reclin 5.2.13 函数 recmut 5.2.14 函数 recombin 5.2.15 函数 reins 5.2.16 函数 rep 5.2.17 函数 rws 5.2.18 函数 scaling 5.2.19 函数 select 5.2.20 函数 sus 5.2.21 函数 xovdp 5.2.22 函数 xovdprs 5.2.23 函数 xovmp 5.2.24 函数 xovsh 5.2.25 函数 xovshrs 5.2.26 函数 xovsp 5.2.27 函数 xovsprs 第六章 遗传算法工具箱的应用 第七章 遗传算法应用举例 第八章 使用MATLAB遗传算法工具 第九章 使用MATLAB直接搜索工具
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值