《基于Java实现的遗传算法》笔记(7 / 7):个人总结

文章目录

  • 为何采用遗传算法
  • 哪些问题适合用遗传算法解决
  • 遗传算法基本术语
  • 一般遗传算法的过程
  • 基本遗传算法的伪代码

为何采用遗传算法

遗传算法是机器学习的子集。在实践中,遗传算法通常不是用来解决单一的、特定问题的最好算法。对任何一个问题,几乎总有更好的、更有针对性的解决方案!那么何必麻烦呢?

遗传算法是一个极好的多用途工具,可以应用于许多不同类型的问题。这是瑞士军刀与合适的螺丝刀之间的差异。如果任务是拧紧300颗螺丝,你会跳起来找螺丝刀。但如果任务是拧几颗螺丝、割开一些布、在皮革上打一个孔,然后打开一瓶冰苏打水奖励自己的努力工作,那么瑞士军刀是更好的选择。

此外,遗传算法是整体研究机器学习的不错入门。如果机器学习是一座冰山,遗传算法就是尖端的一部分。遗传算法有趣、令人兴奋且充满创新。遗传算法的模型基于自然生物过程,建立了计算世界和自然世界之间的连接。编写第一个遗传算法,观看从混乱和随机中出现的惊人结果,让人叹为观止。

机器学习冰山顶端的其他研究领域也同样令人兴奋,但它们往往关注的问题更狭窄,更难以理解。遗传算法则不然,它很容易理解,是有趣的实现,它们引入了所有机器学习技术都会使用的许多概念。

哪些问题适合用遗传算法解决

下面是一个问题特征列表,这类问题是采用遗传算法的良好候选者:

  • 如果问题足够困难,难以写代码来解决;
  • 如果人不知道如何解决这个问题;
  • 如果问题是不断变化的;
  • 如果搜索每个可能解是不可行的;
  • 如果可以接受“足够好”的解。

遗传算法基本术语

遗传算法建立在生物进化的概念上的。

  • 种群:这就是一个候选解(个体)集合,可以有变异和交叉这样的遗传操作应用于它们。
  • 候选解(个体):给定问题的一个可能的解。
  • 基因:组成染色体的不可分割的构建块。经典的基因包含0或1。
  • 染色体:染色体是一串基因。染色体定义了一个特定的候选解(个体)。用二进制编码一个典型的染色体可能包含“01101011”这样的内容。
  • 变异:一个过程,其中候选解中的基因被随机改变,以创建新的性状。
  • 交叉:其中染色体被组合以创建新的候选解决方案的方法。这有时称为重组。
  • 选择:这是选择的候选解,繁殖下一代解的技术。
  • 适应度:一个评分,衡量候选解适合给定问题的程度。

一般遗传算法的过程

在这里插入图片描述

  1. 遗传算法开始,初始化候选解(个体)的种群。这通常是随机提供整个搜索空间的均匀覆盖。涉及参数有种群规模。
  2. 接下来,通过为种群中的每个个体分配一个适应度值,对种群进行评估。在这个阶段,常常要注意当前最优解,以及种群的平均适应度。
  3. 评估后,根据终止条件集,该算法决定它是否应该终止搜索。通常这是因为该算法已达到指定的世代数量,或已经找到适当的解。
    1. 如果终止条件最终满足,算法会跳出循环,通常向用户返回最后的搜索结果。
    2. 一些典型的终止条件是:
      • 到达世代的最大数目;
      • 超过分配给它的时间;
      • 发现一个满足所需条件的解;
      • 该算法已经达到了一个稳定阶段。
  4. 如果终止条件不满足,种群经过一个选择阶段,基于适应度评分,从种群中选择个体。适应度越高,个体就更有机会被选择。选择目的为下一步“交叉和变异”作准备。选择方法有:
    • 轮盘赌选择(也称为适应度比例选择)。个体的适应度越高,在轮盘上占据的空间就越多,也就是选中的概率越大。(参考第2章)
    • 锦标赛选择。随机从种群中选择一些个体,进入锦标赛。以通过比较这些个体的适应度值来竞争,然后选择适应度最高的个体作为亲代。(参考第3章)
  5. 下一阶段对选择的个体应用交叉和变异。这个阶段为下一代创建新个体。如果是种群中的精英(种群中适应度最靠前的一小部分个体),直接跳过进入下一代。涉及参数有交叉率、变异率。交叉和变异后,确保仍然得到一个有效解(合格的个体)。
    1. 交叉方法有:
      • 均匀交叉(uniform crossover)。后代的每个基因都有50%的机会来自第一个亲代或其第二个亲代。(参考第2章)
      • 单点交叉。随机选择基因组中的一个位置,确定哪些基因来自于哪个亲代。交叉位置之前的遗传信息来自于亲代1,之后的遗传信息来自于亲代2。(参考第3章)
      • 排序交叉。在这种交叉方法中,第一个亲代染色体的一个子集被选中。然后该子集被添加到后代染色体的相同位置。下一步是将第二个亲代的遗传信息添加到后代的染色体中。通常从所选子集的结束位置开始,然后包括亲代2的每个基因,只要后代染色体中还没有该基因。(参考第4章)
  6. 此时新种群返回到评估步骤(步骤2),过程重新开始。我们称这种循环的每一圈为一个世代。

基本遗传算法的伪代码

generation = 0;
population[generation] = initializePopulation(populationSize);
evaluatePopulation(population[generation]);
while isTerminationConditionMet() == false doparents = selectParents(population[generation]);population[generation+1] = crossover(parents);population[generation+1] = mutate(population[generation+1]);evaluatePopulation(population[generation]);generation++;
End loop;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/445583.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java设计模式(4 / 23):单例模式

文章目录单例模式的应用场景饿汉式单例模式懒汉式单例模式改进:synchronized改进:双重检查锁改进:静态内部类破坏单例用反射破坏单例用序列化破坏单例解密注册式单例模式枚举式单例模式解密容器式单例线程单例实现ThreadLocal单例模式小结参考…

约瑟夫环-(数组、循环链表、数学)

约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报…

链表相交问题

本来想自己写,写了一半发现一篇文章,解释写得简单易懂,我就直接拿过来了。 这个问题值得反复地写,锻炼链表coding能力的好题。 //如果两个链表都不带环 int NotCycleCheckCross(pLinkNode head1,pLinkNode head2) {pLinkNode lis…

双栈

利用栈底位置相对不变的特性,可以让两个顺序栈共享一个空间。 具体实现方法大概有两种: 一种是奇偶栈,就是所有下标为奇数的是一个栈,偶数是另一个栈。但是这样一个栈的最大存储就确定了,并没有起到互补空缺的作用&a…

单调队列优化的背包问题

对于背包问题,经典的背包九讲已经讲的很明白了,本来就不打算写这方面问题了。 但是吧。 我发现,那个最出名的九讲竟然没写队列优化的背包。。。。 那我必须写一下咯嘿嘿,这么好的思想。 我们回顾一下背包问题吧。 01背包问题 …

用Python去除扫描型PDF中的水印

内容概述 含水印扫描型PDF文件,其中某页如下图所示,用Python去除其页顶及页底的水印。 处理思路:PDF中的每一页的水印的相对位置基本相同,将PDF每一页输出成图片,然后进行图片编辑,用白色填充方形覆盖水印…

二阶有源滤波器

滤波器是一种使用信号通过而同时抑制无用频率信号的电子装置, 在信息处理、数据传送和抑制干扰等自动控制、通信及其它电子系统中应用广泛。滤波一般可分为有源滤波和无源滤波, 有源滤波可以使幅频特性比较陡峭, 而无源滤波设计简单易行, 但幅频特性不如滤波器, 而且体积较大。…

用JS写了一个30分钟倒计时器

效果图 额外功能 左键单击计时器数字区,不显示或显示秒钟区。左键双击计时器数字区,暂停或启动计时器。计时完毕,只能刷新页面启动计时器。输入框可输入备注信息,输入框失去焦点或计时完毕后,时间戳附带备注信息会存入…

为什么高手离不了Linux系统?我想这就是理由!

通过本文来记录下我在Linux系统的学习经历,聊聊我为什么离不了Linux系统,同时也为那些想要尝试Linux而又有所顾忌的用户答疑解惑,下面将为你介绍我所喜欢的Linux系统,这里有一些你应该知道并为之自豪的事实。 这里你应该首先抛开W…

用JS写一个电影《黑客帝国》显示屏黑底绿字雨风格的唐诗欣赏器

效果图 放码过来 <!DOCTYPE HTML> <html><head><meta http-equiv"Content-Type" content"text/html;charsetutf-8"/><title>Black Screen And Green Characters</title><style type"text/css">table…

元器件封装大全:图解+文字详述

先图解如下&#xff1a; 元器件封装类型&#xff1a; A.Axial  轴状的封装&#xff08;电阻的封装&#xff09;AGP &#xff08;Accelerate raphical Port&#xff09; 加速图形接口 AMR(Audio/MODEM Riser) 声音/调制解调器插卡BBGA&#xff08;Ball Grid Array&#xff09;…

用JS写一个丐版《2048》小游戏

效果图 放马过来 <!DOCTYPE HTML> <html><head><meta http-equiv"Content-Type" content"text/html;charsetutf-8"/><title>2048</title><style type"text/css">.basic{height:80px;width:80px;back…

如何有效申请TI的免费样片

转自如何有效申请TI的免费样片 TI公司愿意为支持中国大学的师生们的教学、实验、创新实践、竞赛和科研项目&#xff0c;提供有限数量的免费样片。首先需要指出的是&#xff1a;所有的样片申请应该是诚实正当的&#xff0c;所有不恰当的申请&#xff08;包括不必要或多余的&…

用Python批量生成字幕图片用于视频剪辑

说明 视频剪辑时需要为视频添加字幕&#xff0c;添加字幕方法之一&#xff1a;根据字幕文本文件批量生成透明底只有字幕内容的图片文件&#xff0c;如下图&#xff0c;然后将这些图片文件添加到视频剪辑软件轨道中。 于是用pillow这Python图片工具库执行本次批量生成工作。 …

关于接地:数字地、模拟地、信号地、交流地、直流地、屏蔽地、浮

除了正确进行接地设计、安装,还要正确进行各种不同信号的接地处理。控制系统中&#xff0c;大致有以下几种地线&#xff1a; &#xff08;1&#xff09;数字地&#xff1a;也叫逻辑地&#xff0c;是各种开关量&#xff08;数字量&#xff09;信号的零电位。 &#xff08;2&…

AltiumDesigner中PCB如何添加 Logo

AltiumDesigner中PCB如何添加 Logo 转载2015-10-29 00:07:55标签&#xff1a;it文化教育首先用到的画图软件&#xff0c;当然是大家熟悉的Altium Designer了&#xff0c;呵呵&#xff0c;相信很多人都用过这款画图软件吧&#xff08;现在电路设计一直在用&#xff09;&#xff…

使用Ultra Librarian 生成PCB库文件

第一步&#xff1a;找到对应芯片的CAD文件&#xff0c;以OPA350为例&#xff1a; http://www.ti.com/product/opa350 第二步&#xff1a; 下载上图右边连接的 Ultra Librarian.zip &#xff0c; 然后根据提示&#xff0c;安装。 安装好后打开Ultra Librarian&#xff0c;会出现…

借汉诺塔理解栈与递归

我们先说&#xff0c;在一个函数中&#xff0c;调用另一个函数。 首先&#xff0c;要意识到&#xff0c;函数中的代码和平常所写代码一样&#xff0c;也都是要执行完的&#xff0c;只有执行完代码&#xff0c;或者遇到return&#xff0c;才会停止。 那么&#xff0c;我们在函…

qt超强绘图控件qwt - 安装及配置

qwt是一个基于LGPL版权协议的开源项目&#xff0c; 可生成各种统计图。它为具有技术专业背景的程序提供GUI组件和一组实用类&#xff0c;其目标是以基于2D方式的窗体部件来显示数据&#xff0c; 数据源以数值&#xff0c;数组或一组浮点数等方式提供&#xff0c; 输出方式可以是…

BFPRT

在一大堆数中求其前k大或前k小的问题&#xff0c;简称TOP-K问题。而目前解决TOP-K问题最有效的算法即是BFPRT算法&#xff0c;其又称为中位数的中位数算法&#xff0c;该算法由Blum、Floyd、Pratt、Rivest、Tarjan提出&#xff0c;最坏时间复杂度为O(n)O(n)。 读者要会快速排序…