MATLAB机器学习系列-10:遗传算法原理及其matlab遗传算法工具箱使用

article/2025/10/23 10:18:08

遗传算法原理

基本思想

  • 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则,它最初由美国Michigan大学的J. Holland教授于1967年提出。
  • 遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。因此,第一步需要实现从表现型到基因型的映射即编码工作。初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择个体,幵借助于自然遗传学的遗传算子(genetic operators)进行组合交叉和变异,产生出代表新的解集的种群。这个过程将导致种群像自然进化一样,后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。

遗传算法有三个基本操作:选择(Selection)、交叉(Crossover)和变异(Mutation)。

  • 选择。选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁衍子孙。根据各个个体的适应度值,按照一定的规则或方法从上一代群体中选择出一些优良的个体遗传到下一代种群中。选择的依据是适应性强的个体为下一代贡献一个或多个后代的概率大。
  • 交叉。通过交叉操作可以得到新一代个体,新个体组合了父辈个体的特性。将群体中的各个个体随机搭配成对,对每一个个体,以交叉概率交换它们之间的部分染色体。
  • 变异。对种群中的每一个个体,以变异概率改变某一个或多个基因座上的基因值为其他的等位基因。同生物界中一样,变异发生的概率很低,变异为新个体的产生提供了机会。

基本步骤

  1. 编码:GA在进行搜索之前先将解空间的解数据表示成遗传空间的基因型串结构数据,这些串结构数据的丌同组合便构成了不同的点。
  2. 初始群体的生成:随机产生N个初始串结构数据,每个串结构数据称为一个个体,N个个体构成了一个群体。GA以这N个串结构数据作为初始点开始进化。
  3. 适应度评估:适应度表明个体或解的优劣性。丌同的问题,适应性函数的定义方式也不同。
  4. 选择:选择的目的是为了从当前群体中选出优良的个体,使它们有机会作为父代为下一代繁殖子孙。遗传算法通过选择过程体现这一思想,进行选择的原则是适应性强的个体为下一代贡献一个或多个后代的概率大。选择体现了达尔文的适者生存原则。
  5. 交叉:交叉操作是遗传算法中最主要的遗传操作。通过交叉操作可以得到新一代个体,新个体组合了其父辈个体的特性。交叉体现了信息交换的思想。
  6. 变异:变异首先在群体中随机选择一个个体,对于选中的个体以一定的概率随机地改变串结构数据中某个串的值。同生物界一样, GA中变异发生的概率很低,通常取值很小。

遗传算法工具箱和常用函数介绍

  • MATLAB内嵌遗传算法工具箱: gadst
  • Sheffield大学遗传算法工具箱: gatbx
  • 北卡罗来纳大学遗传算法工具箱: gaot

本文的工具箱为gaot

重点函数
optimtool
optimtool:MATLAB自带的工具箱函数

在MATLAB里命令行里输入optimtool,会弹出如图

在Solver里有很多选项,包括非线性,遗传算法等各种优化

gaot工具箱的函数
initializega:初始化

ga
ga输入参数

ga输出参数

算例

首先我们需要将工具箱gaot添加进路径。工具箱和算例代码后面我会给出百度云链接。

算例1:一元函数优化

第一步:

%% I. 清空环境变量
clear all
clc

第二步:定义问题
我们需要找到
x = 0:0.01:9;
y = x + 10sin(5x)+7cos(4x);的最大值

%% II. 绘制函数曲线figure
plot(x, y)
xlabel('自变量')
ylabel('因变量')
title('y = x + 10*sin(5*x) + 7*cos(4*x)')

第三步:产生初始种群
种群规模:50,范围是[0-9]
fitness.m 适应度函数如下,因为本文是求最大值,所有适应度函数和目标函数一致

function [sol, fitnessVal] = fitness(sol, options)
x = sol(1);
fitnessVal = x + 10sin(5x)+7cos(4x);
end

如果是求最小值,用1除以最大适应度函数,或者-1*最大适应度函数

function [sol, fitnessVal] = fitness(sol, options)
x = sol(1);
fitnessVal = 1/(x + 10sin(5x)+7cos(4x));
end

%% III. 初始化种群
initPop = initializega(50,[0 9],'fitness');

得到的initPop维度50*2
50表示有50个个体

第一列表示个体x,第二列表示适应度函数值

第四步:优化

%% IV. 遗传算法优化
[x endPop bpop trace] = ga([0 9],'fitness',[],initPop,[1e-6 1 1],'maxGenTerm',25,...'normGeomSelect',0.08,'arithXover',2,'nonUnifMutation',[2 25 3]);

第五步:结果绘图

%% V. 输出最优解并绘制最优点
x
hold on
plot (endPop(:,1),endPop(:,2),'ro')%% VI. 绘制迭代进化曲线
figure(2)
plot(trace(:,1),trace(:,3),'b:')
hold on
plot(trace(:,1),trace(:,2),'r-')
xlabel('Generation'); ylabel('Fittness');
legend('Mean Fitness', 'Best Fitness')
25代

算例2:BP神经网络初始权值和阈值优化

gadecod.m

function[W1,B1,W2,B2,val]=gadecod(x)
global p
global t
global R
global S2
global S1
% 前R*S1个编码为W1
for i=1:S1for k=1:RW1(i,k)=x(R*(i-1)+k);end
end
% 接着的S1*S2个编码(即第R*S1个后的编码)为W2
for i=1:S2for k=1:S1W2(i,k)=x(S1*(i-1)+k+R*S1);end
end
% 接着的S1个编码(即第R*SI+SI*S2个后的编码)为B1
for i=1:S1B1(i,1)=x((R*S1+S1*S2)+i);
end
%接着的S2个编码(即第R*SI+SI*S2+S1个后的编码)为B2
for i=1:S2B2(i,1)=x((R*S1+S1*S2+S1)+i);
end
% 计算S1与S2层的输出
A1=tansig(W1*p,B1);
A2=purelin(W2*A1,B2);
% 计算误差平方和
SE=sumsqr(t-A2);
% 遗传算法的适应值
val=1/SE;

gabpEval.m

function[sol,val]=gabpEval(sol,options)
global S
for i=1:S
x(i)=sol(i);
end;
[W1,B1,W2,B2,val]=gadecod(x);

ga_bp.m

%% 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)    %遗传优化后的仿真结果

代码和goat见百度云

链接:https://pan.baidu.com/s/1exuNVSaGp_GUAH3py3M14g 
提取码:6jp1 
复制这段内容后打开百度网盘手机App,操作更方便哦

MATLAB 和遗传算法非我所长,所以我也云里雾里,这篇为我所学笔记。
等我那天开窍啦,我就完全懂啦。
在这里插入图片描述

在这里插入图片描述


http://chatgpt.dhexx.cn/article/LaQTLDL3.shtml

相关文章

2021-04-26 Matlab遗传算法工具箱的使用及实例(线性规划)

Matlab遗传算法工具箱的使用及实例(线性规划) 引言 在使用遗传算法(Genetic Algorithm,GA)之前,你得了解遗传算法是干什么的。遗传算法一般用于求解优化问题。遗传算法最早是由美国的 John holland于20世纪70年代提出,该算法是根…

遗传算法工具箱_含约束条件的遗传算法在连续催化重整优化操作中的应用

遗传算法(Genetic a lgo rithm s, GA ) 是由Hol-land 教授及其学生首先提出的一种仿照生物学中进化论思想而衍生出的优化算法。遗传算法应用于优化问题的求解, 是一个启发式随机搜索的过程, 与传统的优化搜索算法相比具有可以克服局部最优解的陷阱, 搜索得到全局最优解等特点, …

北卡罗来纳大学遗传算法工具箱

目录 北卡罗来纳大学遗传算法工具箱 gaot 重要函数如下 1.initializega函数介绍 2.ga函数介绍 3.initializega求解一元函数 注:本文的代码可用于matlab 2012a版本 北卡罗来纳大学遗传算法工具箱 gaot 重要函数如下 optimtool(matlab内部封装函数&a…

Matlab遗传算法工具箱求函数最小值

题目 先上代码 %%%%%%%%%%%%%%% %% test.m %% %% Feng1909 %% %%%%%%%%%%%%%%% function result test(a)is_max 0;x a(1);y a(2);PI 3.141592653;if is_max 0result -(sin(3*PI*x)*cos(4*PI*y)cos(5*PI*x*sin(2*PI*y)))*(1);endif is_max 1result (sin(3*PI*x)*c…

简单使用MATLAB自带的遗传算法工具箱

一、使用单变量进行参数寻优 如s = -2x ,当x在[0,1]范围内,取多少时s为最小值? 使用步骤如下: 1、建立一个function函数,命名为fu.m 2、在MATLAB命令窗口输入optimtool,接下来进行选择,选择完后,点击start。 x = 1时,s取-2(最小值) 寻优曲线图如下: 二、使用双变…

谢菲尔德遗传算法工具箱

谢菲尔德遗传算法工具箱的使用 安装工具箱下载工具箱添加路径标题 遗传算法函数ranking()函数select()函数bs2rv()函数小结 安装工具箱 谢菲尔德遗传算法工具箱作为matlab的一个函数库,可以简单实现遗传算法。我一开始学习了粒子群优化算法和鲸鱼优化算法等群智能优…

Matlab遗传算法工具箱的使用

Matlab遗传算法工具箱的使用 遗传算法(Genetic Algorithm,GA)是J.Holland教授1975年在其专著中首次发表,又经Goldberg、DeJong等研究总结形成的一种模拟进化算法,其基于生物进化和物种选择理论模拟自然界基因进化的过程…

Matlab遗传算法工具箱及应用

目录 第一章:遗传算法概述 1.1遗传算法概念; 1.2遗传算法与爬山法的比较; 1.3遗传算法的基本原理与方法; 第二章:遗传算法应用举例 2.1简单一元函数优化实例; 参考资料:Matlab遗传算法工…

谢菲尔德大学的MATLAB遗传算法工具箱(附代码文件)

从今天起我想记录下我的学习历程,将成果总结起来,方便日后复习 关于MATLAB遗传算法的工具箱文件放在文章末尾需要的自取 首先,我先来简单说明下如何将工具箱添加到matlab中去 将工具箱文件夹复制到本地计算机中的工具箱目录下,路…

MATLAB自带的遗传算法工具箱(GADS)

目前,遗传算法工具箱主要有三个: 英国谢菲尔德大学的遗传算法工具箱美国北卡罗来纳州立大学的遗传算法最优化工具箱MATLAB自带的遗传算法与直接搜索工具箱(GADS) GADS介绍 本文介绍的是MATLAB自带的遗传算法与直接搜索工具箱&a…

优化算法之遗传算法--入门--工具箱的使用

遗传算法的优点 遗传算法是一种基于生物自然选择与遗传机理的随机搜索与优化方法。遗传算法求解复杂优化问题的巨大潜力及其在工业工程领域的成功应用 ,而受到了广泛关注。Matlab 的遗传算法工具箱具有使用简单方便 ,计算可靠 ,快捷高效和图形结果可视化等特点 ,具有广阔的应用…

matlab遗传算法工具箱

以下内容大部分来源于《MATLAB智能算法30个案例分析》,仅为学习交流所用。 1理论基础 1.1遗传算法概述 遗传算法(genetic algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法是把问题参数编码为染色体,再利用迭代…

遗传算法与Matlab GA工具箱

1 遗传算法(Genetic Algorithm) 1.1简介 GA是一种进化算法,基本原理效仿生物界“物竞天择,适者生存”的演化法则。 一些基本概念 种群population:问题潜在的解集 个体individual:每一个可能的解&#xff0c…

matlab遗传算法工具箱介绍和详细使用方法【matlab优化算法工具箱】

遗传算法概述 工具箱下载地址 遗传算法( genetic algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择、适者生存”的演化法则。遗传算法是把问题参数编码为染色体,再利用迭代的方式进行选择、交叉以及变异等运算…

心电信号去除基线漂移的贝塞尔高通滤波器设计

时常仰望星空,做到脚踏实地! matlab提供了用于设计贝塞尔滤波器的函数:besself。 调用时,[b,a] besself(n,Wn,ftype)用于设计高通和带阻滤波器,默认[b,a] besself(n,Wn)是设计贝塞尔低通滤波器。 截止…

图像频域增强:高通滤波器

频域高通滤波 高通滤波器的功能是削弱或消除低频分量而保留高频分量。 理想高通滤波器 理想低通滤波器&#xff0c;模拟上容易实现&#xff0c;物理上无法实现。 转移函数定义&#xff1a; H ( u , v ) { 0 &#xff0c; D ( u , v ) < D 0 1 &#xff0c; D ( u , v…

FIR 滤波器设计

目录 线性相位滤波器 与无限持续时间脉冲响应 (IIR) 滤波器相比&#xff0c;具有有限持续时间脉冲响应的数字滤波器&#xff08;全零或 FIR 滤波器&#xff09;既有优点又有缺点。 FIR 滤波器具有以下主要优点&#xff1a; 它们可以具有精确的线性相位它们始终稳定设计方法通…

设计巴特沃斯滤波器实现高通滤波

首先在MATLAB上通过设计一个巴特沃斯滤波器来实现一个高通滤波器。 %设计一个巴特沃斯高通滤波器 %滤除一个300HZ的正弦信号 clear; fn 10000;%采样频率 fp 900;%通带截止频率 fs 600;%阻带截止频率 Rp 2;%通带最大衰减 Rs 20;%阻带最小衰减 figure(1); Wp fp/(fn/2); W…

【OpenCV 例程200篇】84. 由低通滤波器得到高通滤波器

【OpenCV 例程200篇】84. 由低通滤波器得到高通滤波器 欢迎关注 『OpenCV 例程200篇』 系列&#xff0c;持续更新中 欢迎关注 『Python小白的OpenCV学习课』 系列&#xff0c;持续更新中 4. 频率域高通滤波器 图像边缘化其它灰度的急剧变化与高频分量有关&#xff0c;因此可以…

四阶巴特沃斯高通滤波器

一、设计方案 1.理论参考 图1.1-1 巴特沃斯高通滤波器归一化幅频响应 图1.1-2 巴特沃斯低通、高通电路阶数n与增益的关系 图1.1-3 二阶高通滤波电路及其传递函数 2.电路设计 综合滤波器滤波效果及电路实现难度&#xff0c;采用四阶高通滤波器 图1.2-1 四阶高通滤波电路 查表得到…