热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于遗传算法的MATLAB入门与应用指南

遗传算法作为一种模拟自然界生物遗传和进化的自适应全局优化方法,在解决复杂优化问题中展现出显著优势。本文基于MATLAB平台,详细介绍了遗传算法的基本原理及其在求解NP难题、非线性及多峰函数优化、多目标优化等领域的应用实例,为初学者提供了一套系统的学习和实践指南。

引言



遗传算法是模拟生物在自然环境中的遗传和进化的过程而形成的自适应全局优化搜索算法。

遗传算法能有效的求解NP(非确定行多项式)问题以及非线性、多峰函数优化和多目标优化问题。

其本质是一种并行、高效、全局搜索的方法,它能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应的控制搜索过程以求得最优解。


遗传算法的生物学基础



达尔文的生存斗争中适者生存、不适者淘汰的自然选择过程,遗传与变异是决定生物计划的内在因素。遗传能使生物的性状不断的传送给后代,变异能够使生物的性状发生改变,从而适应新的环境而不断地向前发展。

遗传物质的主要载体是染色体,基因是有遗传效应的片段,存储着遗传信息,可以准确的复制,也能够发生突变。生物体通过对基因的复制和交叉,使其性状的遗传得到选择和控制。同时,通过基因重组、基因变异、和染色体在结构和数目上的变异产生丰富多彩的变异现象。

生物遗传与进化的规律有:



  1. 生物的所有遗传信息都包含在其染色体中,染色体决定了生物的性状。染色体是由基因及其有规律的排列构成。

  2. 生物的繁殖过程是由其基因的复制过程来完成的。同源染色体的交叉或变异会产生新的物种,使生物呈现新的性状。

  3. 对环境适应能力强的基因或染色体比适应能力差的基因或然的题更有机会遗传到下一代。


遗传算法理论基础




模式定理

模式:描述种群中在位串的某些确定位置上具有相似性的位串自己的相似性模板(一串字符)。

模式阶定义:模式H中确定位置的个数。

定义距定义:在模式H中第一个确定位置和最后一个确定位置之间的距离称为该模式的定义距。

模式定理:在遗传算法选择、交叉和变异算子的作用下,具有低阶、短定义距,并且其平均适应度高于群体平均适应度的模式在子代中将呈指数级增长。


积木块假设

积木块定义:具有低阶、短定义距,并且高平均适应度的模式成为积木块。

积木块假设:个体的积木块通过选择、交叉、变异等遗传算子的作用,能够相互结合在一起,形成高阶、长距、高平均适应度的个体编码串。


遗传算法的基本概念














































遗传学术语遗传算法术语
群体可行解集
个体可行解
染色体可行解的编码
基因可行解编码的分量
基因形式遗传编码
适应度评价函数值
选择选择操作
交叉交叉操作
变异变异操作

变异 变异操作


遗传算法的流程





  1. 初始化种群。获得每个个体的二进制编码。



  2. 计算适应度。将每个个体的二进制编码转化为指定范围内的十进制数,通过适应度函数(目标函数)计算每个个体的适应度。



  3. 选择操作。使用轮盘赌的选择方法进行选择。

    轮盘赌选择:又称比例选择方法.其基本思想是:各个个体被选中的概率与其适应度大小成正比.具体操作如下:

    (1)计算出群体中每个个体的适应度f(i=1,2,…,M),M为群体大小;

    (2)计算出每个个体被遗传到下一代群体中的概率;

    https://images2015.cnblogs.com/blog/989342/201607/989342-20160717213230295-1059648774.jpg

    (3)计算出每个个体的累积概率;

    https://images2015.cnblogs.com/blog/989342/201607/989342-20160717213516467-730861327.jpg

    (q[i]称为染色体x[i] (i=1, 2, …, n)的积累概率)

    https://images2015.cnblogs.com/blog/989342/201607/989342-20160717213541186-767564054.jpg

    (4)在[0,1]区间内产生一个均匀分布的伪随机数r;

    (5)若r

    (6)重复(4)、(5)共M次。



  4. 交叉操作

    (1)从交配池中随机取出要交配的一对个体。

    (2)根据位串长度L,对要交配的一对个体随机选取[1,L-1]中的一个或多个整数K作为交叉位置。

    (3)根据交叉概率Pc实施交叉操作,配对个体在交叉位置处相互交换各自的部分基因,从而形成一对新个体。



  5. 变异操作

    (1)对种群中所有个体按事先设定的变异概率判断是否进行变异。

    (2)对进行变异的个体随机选择变异位进行变异。



  6. 终止条件判断:达到迭代次数最大值。




一个简单例子:

求函数f(x) = x+10sin(5x)+7cos(4x)的最大值,其中x的取值范围为[1,10].`

%用遗传算法求函数f(x) = x+10sin(5x)+7cos(4x)的最大值,其中x的取值范围为[1,10].
close all;
clc;
NP = 50; %种群个体数
L = 20; %二进制编码长度,即染色体长度
Pc = 0.8; %交叉概率
Pm = 0.1; %变异概率
G = 100; %迭代代数
Xs = 10; %区间最大值
Xx = 0; %区间最小值
f = randi([0,1],NP,L); %初始化种群
%%%%%%%%%%%%%遗传算法循环%%%%%%%%%%%%%
for k = 1:G %迭代过程%%%%%%%将二进制解码为定义域范围内十进制%%%%%%%%%%%for i = 1:NPU = f(i,:);m = 0;for j = 1:Lm = U(j)*2^(j-1)+m; endx(i) = Xx + m * (Xs-Xx) /(2^L-1);Fit(i) = func1(x(i));end%%%%%%%适应度归一化%%%%%%%%%maxFit = max(Fit); %最大适应度值minFit = min(Fit); %最小适应度值rr = find(Fit == maxFit);fBest = f(rr(1,1),:); %保存最大适应度值xBest = x(rr(1,1)); %保存最大适应度位置Fit = (Fit - minFit) / (maxFit - minFit);%%%%%%%基于轮盘赌的复制选择操作%%%%%%%%%%sum_Fit = sum(Fit);fitvalue = Fit ./ sum_Fit; %计算每个适应度值的概率fitvalue = cumsum(fitvalue); %计算累计概率ms = sort(rand(NP,1)); %NP次赌盘的旋转newi = 1;fiti = 1;while newi <= NPif ms(newi) end
xBest;
figure;
plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')
%%%%%%%%%%%适应度函数%%%%%%%%%%%%
function result = func1(x)
fit = x + 10*sin(5*x) + 7*cos(4*x);
result = fit;
end

推荐阅读
  • 本文探讨了如何在给定整数N的情况下,找到两个不同的整数a和b,使得它们的和最大,并且满足特定的数学条件。 ... [详细]
  • 最近团队在部署DLP,作为一个技术人员对于黑盒看不到的地方还是充满了好奇心。多次咨询乙方人员DLP的算法原理是什么,他们都以商业秘密为由避而不谈,不得已只能自己查资料学习,于是有了下面的浅见。身为甲方,虽然不需要开发DLP产品,但是也有必要弄明白DLP基本的原理。俗话说工欲善其事必先利其器,只有在懂这个工具的原理之后才能更加灵活地使用这个工具,即使出现意外情况也能快速排错,越接近底层,越接近真相。根据DLP的实际用途,本文将DLP检测分为2部分,泄露关键字检测和近似重复文档检测。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 深入理解 H5C3 和 JavaScript 核心问题
    本文详细探讨了 H5C3 和 JavaScript 中的一些核心编程问题,通过实例解析和代码示例,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 机器学习中的相似度度量与模型优化
    本文探讨了机器学习中常见的相似度度量方法,包括余弦相似度、欧氏距离和马氏距离,并详细介绍了如何通过选择合适的模型复杂度和正则化来提高模型的泛化能力。此外,文章还涵盖了模型评估的各种方法和指标,以及不同分类器的工作原理和应用场景。 ... [详细]
  • 本实验主要探讨了二叉排序树(BST)的基本操作,包括创建、查找和删除节点。通过具体实例和代码实现,详细介绍了如何使用递归和非递归方法进行关键字查找,并展示了删除特定节点后的树结构变化。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 探索1000以内的完美数:因数和等于自身
    本文探讨了如何在1000以内找到所有完美数,即一个数的因数(不包括自身)之和等于该数本身。例如,6是一个完美数,因为1 + 2 + 3 = 6。通过编程实现这一过程,可以更好地理解完美数的特性。 ... [详细]
  • 深入理解Java中的Collection接口与Collections工具类
    本文详细解析了Java中Collection接口和Collections工具类的区别与联系,帮助开发者更好地理解和使用这两个核心组件。 ... [详细]
  • 本文详细介绍了MicroATX(也称Mini ATX)和MATX主板规格,探讨了它们的结构特点、应用场景及对电脑系统成本和性能的影响。同时,文章还涵盖了相关操作系统的实用技巧,如蓝牙设备图标删除、磁盘管理等。 ... [详细]
  • 本题通过将每个矩形视为一个节点,根据其相对位置构建拓扑图,并利用深度优先搜索(DFS)或状态压缩动态规划(DP)求解最小涂色次数。本文详细解析了该问题的建模思路与算法实现。 ... [详细]
  • 本题探讨如何通过最大流算法解决农场排水系统的设计问题。题目要求计算从水源点到汇合点的最大水流速率,使用经典的EK(Edmonds-Karp)和Dinic算法进行求解。 ... [详细]
author-avatar
赵lamarta
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有