遗传算法原理简介及其MATLAB实践
目录
遗传算法简介
遗传算法的深入理解:
遗传算法的MATLAB实现
【例】BP神经网络初始权值和阈值优化
遗传算法简介
遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则,它最初由美国Michigan大学的J. Holland教授于1967年提出。
遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。因此,第一步需要实现从表现型到基因型的映射即编码工作。初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度 (fitness)大小选择个体,借助于自然遗传学的遗传算子(genetic operators)进行组合交叉和变异,产生出代表新的解集的种群。这个过程将导致种群像自然进化一样,后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。
遗传算法有三个基本操作:选择(Selection)、交叉(Crossover)和变异(Mutation)。
(1)选择。选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁衍子孙。根据各个个体的适应度值,按照一定的规则或方法从上一代群体中选择出一些优良的个体遗传到下一代种群中。选择的依据是适应性强的个体为下一代贡献一个或多个后代的概率大。
(2)交叉。通过交叉操作可以得到新一代个体,新个体组合了父辈个体的特性。将群体中的各个个体随机搭配成对,对每一个个体,以交叉概率交换它们之间的部分染色体。
(3)变异。对种群中的每一个个体,以变异概率改变某一个或多个基因座上的基因值为其他的等位基因。同生物界中一样, 变异发生的概率很低,变异为新个体的产生提供了机会。
•遗传算法的基本步骤:
1)编码:GA在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据, 这些串结构数据的丌同组合便构成了丌同的点。
2)初始群体的生成:随机产生N个初始串结构数据,每个串结构数据称为一个个体,N个 个体构成了一个群体。GA以这N个串结构数据作为初始点开始进化。
3)适应度评估:适应度表明个体或解的优劣性。不同的问题,适应性函数的定义方式也不同。
4)选择:选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一 代繁殖子孙。遗传算法通过选择过程体现这一思想,进行选择的原则是适应性强的个体为 下一代贡献一个或多个后代的概率大。选择体现了达尔文的适者生存原则。
5)交叉:交叉操作是遗传算法中最主要的遗传操作。通过交叉操作可以得到新一代个体, 新个体组合了其父辈个体的特性。交叉体现了信息交换的思想。
6)变异:变异首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机地改变 串结构数据中某个串的值。同生物界一样, GA中变异发生的概率很低,通常取值很小。
遗传算法的深入理解:
可参考博文:
通俗生动地解释遗传算法:https://www.cnblogs.com/hxsyl/p/5240905.html
详细举例解释遗传算法数学原理:https://my.oschina.net/u/1412321/blog/192454
遗传算法的MATLAB实现
MATLAB内嵌遗传算法工具箱: gadst
Sheffield大学遗传算法工具箱:gatbx
北卡罗来纳大学遗传算法工具箱: gaot
【例】BP神经网络初始权值和阈值优化
%% I. 清除环境变量
clear all
clc%% II. 声明全局变量
global p % 训练集输入数据
global t % 训练集输出数据
global R % 输入神经元个数
global S2 % 输出神经元个数
global S1 % 隐层神经元个数
global S % 编码长度
S1 = 10;%% III. 导入数据
%%
% 1. 训练数据
p = [0.01 0.01 0.00 0.90 0.05 0.00;0.00 0.00 0.00 0.40 0.50 0.00;0.80 0.00 0.10 0.00 0.00 0.00;0.00 0.20 0.10 0.00 0.00 0.10]';
t = [1.00 0.00 0.00 0.00;0.00 1.00 0.00 0.00;0.00 0.00 1.00 0.00;0.00 0.00 0.00 1.00]';
%%
% 2. 测试数据
P_test = [0.05 0 0.9 0.12 0.02 0.02;0 0 0.9 0.05 0.05 0.05;0.01 0.02 0.45 0.22 0.04 0.06;0 0 0.4 0.5 0.1 0;0 0.1 0 0 0 0]';%% IV. BP神经网络
%%
% 1. 网络创建
net = newff(minmax(p),[S1,4],{'tansig','purelin'},'trainlm'); %%
% 2. 设置训练参数
net.trainParam.show = 10;
net.trainParam.epochs = 2000;
net.trainParam.goal = 1.0e-3;
net.trainParam.lr = 0.1;%%
% 3. 网络训练
[net,tr] = train(net,p,t);%%
% 4. 仿真测试
s_bp = sim(net,P_test) % BP神经网络的仿真结果%% V. GA-BP神经网络
R = size(p,1);
S2 = size(t,1);
S = R*S1 + S1*S2 + S1 + S2;
aa = ones(S,1)*[-1,1];%% VI. 遗传算法优化
%%
% 1. 初始化种群
popu = 50; % 种群规模
initPpp = initializega(popu,aa,'gabpEval',[],[1e-6 1]); % 初始化种群%%
% 2. 迭代优化
gen = 100; % 遗传代数
% 调用GAOT工具箱,其中目标函数定义为gabpEval
[x,endPop,bPop,trace] = ga(aa,'gabpEval',[],initPpp,[1e-6 1 1],'maxGenTerm',gen,...'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);
%%
% 3. 绘均方误差变化曲线
figure(1)
plot(trace(:,1),1./trace(:,3),'r-');
hold on
plot(trace(:,1),1./trace(:,2),'b-');
xlabel('Generation');
ylabel('Sum-Squared Error');%%
% 4. 绘制适应度函数变化
figure(2)
plot(trace(:,1),trace(:,3),'r-');
hold on
plot(trace(:,1),trace(:,2),'b-');
xlabel('Generation');
ylabel('Fittness');%% VII. 解码最优解并赋值
%%
% 1. 解码最优解
[W1,B1,W2,B2,val] = gadecod(x);%%
% 2. 赋值给神经网络
net.IW{1,1} = W1;
net.LW{2,1} = W2;
net.b{1} = B1;
net.b{2} = B2;%% VIII. 利用新的权值和阈值进行训练
net = train(net,p,t);%% IX. 仿真测试
s_ga = sim(net,P_test) %遗传优化后的仿真结果
遗传算法原理简介及其MATLAB实践相关推荐
- Pymoo:遗传算法原理简介及Pymoo中遗传算子的实现示例
Pymoo:遗传算法原理简介及Pymoo中遗传算子的实现示例 一.遗传算法原理简介 二.Pymoo中的遗传算子(Genetic Operators)及其实现 2.1 抽样算子(Sampling Ope ...
- 【特征提取】Hog特征原理简介与代码实践
前言 在[模式识别]SVM实现人脸表情分类一文中,我曾使用Hog特征+SVM的方式实现表情分类,但对于Hog特征的原理并未做深入整理.此篇将结合scikit-image来简单分析Hog特征的原理和维度 ...
- GRNN和PNN神经网络简介与MATLAB实践
目录 GRNN(广义回归神经网络) PNN(概率神经网络) RBF.GRNN.PNN总结对比 MATLAB实例:鸢尾花种类识别 GRNN(广义回归神经网络)和PNN(概率神经网络),与RBF非常的相似 ...
- 粒子群优化算法(PSO)简介及MATLAB实现
目录 粒子群优化算法概述 PSO算法步骤 PSO(粒子群优化算法)与GA(遗传算法)对比 PSO的MATLAB实现 粒子群优化算法概述 • 粒子群优化(PSO, particle swarm opti ...
- 量子遗传算法原理与MATLAB仿真程序
写在前面: 1.其实这些智能算法的思想都差不多,只不过是各自搜寻方式.编码方式.种群更新方式等不一样而已. 量子遗传算法是在遗传算法的基础上使用了一种新的编码方式. 2.直接看前面介绍可能会觉得较难, ...
- 遗传算法(GA)的原理简介与应用【python实现】
遗传算法(GA)的原理简介与应用[python实现] 算法原理简介与实现 算法框架 关于GA求解过程中一些结果的讨论 SA-GA总结与体会 算法原理简介与实现 遗传算法(Genetic Algorit ...
- 领域驱动DDD原理简介与实践
整洁架构图 依赖方向朝内,每个环可以依赖它本身这一层及其所有内部的层,但不能依赖它外部的层 Entities 用来放实体.值对象.聚合等领域模型的 业务逻辑都应该尽量内聚在这一层 这一层是最纯净的,不 ...
- 基于MATLAB负载换流逆变器毕业设计,分享:基于电流内环的单相并网逆变器原理简介及仿真验证...
本帖最后由 邮件人 于 2014-5-15 20:31 编辑 1.并网逆变器概述 并网逆变器是一种将直流电转换为与电网同频同相的交流电的电力电子装置,在工频范围内可分为风电并网逆变器与光伏并网逆变器. ...
- 回归素材(part7)--机器学习入门到实战-MATLAB实践应用
学习笔记,仅供参考,有错必纠 文章目录 机器学习入门到实战-MATLAB实践应用 线性回归原理 简单线性回归 多元线性回归 机器学习入门到实战-MATLAB实践应用 线性回归原理 简单线性回归
最新文章
- web頁面優化以及SEO
- 函数返回引用什么意思_【20200917】编程入门第七课,函数(function)
- Amazon运营如何做?Amazon运营需做好全局的加减法
- 如何在SAP云平台上启用SAP Intelligent Robotic Process Automation - IRPA
- 快速排序简便记_建立和测试股票交易策略的快速简便方法
- 实现推拉ui样式_这推拉门隔断,我从没见过!直角设计同时划分3大功能区,太牛了...
- 六、PyQt5 QTreeWidget操作,获取树控件所有2级目录内容
- xCode 安装Mobile Device Framework出错的问题的解决方法
- JAVA常用的XML解析方法
- 相机标定(一)—— 向量几何基础
- 无法显示此网页 php模拟,新手进行php的模拟登录 按照网页的代码进行输入无法显示结果...
- MySQL查询指定数据库中所有记录不为空的表
- WoMic虚拟麦克风技术剖析
- 15款用Unity开发iOS、安卓手机游戏的必备插件
- eclipse项目名前出现红色感叹号,小红叉解决(转)
- 谁说EMC、IBM不能替换,还你一个存储虚拟化的真相!
- Lick the habit 戒除恶习
- Pandas requires version ‘2.0.1‘ or newer of ‘xlrd‘ (version ‘1.2.0‘ currently installed).
- 前端显示和隐藏div的方法 / 判断
- WEKA算法开发——记一次不太成功的遗传属性加权贝叶斯算法实验
热门文章
- Win Me下的Ghost
- 推荐一款PC端的远程软件-Remote Utilities
- Python如何将仅包含音频内容的Mp4,提取并转换为Mp3
- 分布式锁--(mysql-redis方式)
- html和dhtml的关系,DHTML 简介
- 让ie6也支持websocket
- 求助:java applet无法运行,错误: 找不到或无法加载主类 sun.applet.AppletViewer
- 高薪程序员面试题精讲系列96之分库分表了解吗?你项目中用到过吗?怎么用的?
- 简单选择排序(Simple Selection Sort)
- matlab csc,matlab - 从Matlab CSC转换为CSR格式 - 堆栈内存溢出