搜索技术——遗传算法

news2024/10/2 6:38:43

如果有兴趣了解更多相关内容,欢迎来我的个人网站看看:瞳孔空间

一:进化与遗传的概念

拉马克(Lamarck)进化论:

  • 一切物种都是其他物种演变和进化而来的,而生物的演变和进化是一个缓慢和连续的过程
  • 环境的变化能够引起生物的变异,环境的变化迫使生物发生适应性的进化
  • 有神经系统的动物发生变异的原因,除了环境变化和杂交外,更重要是通过用进废退和获得性状遗传
  • 生物进化的方向从简单到复杂,从低到高
  • 最原始的生物起源于自然发生。生物并不起源于共同祖先
  • 拉马克曾以长颈鹿的进化为例,说明他的“用进废退”观点。长颈鹿的祖先颈部并不长,由于干旱等原因。在低处已找不到食物,迫使它伸长脖颈去吃高处的树叶,久而久之,它的颈部就变长了。一代又一代,遗传下去,它的脖子越来越长,终于进化为现在我们所见的长颈鹿

达尔文(Darwin)进化论:

  • 包括两部分:遗传(基因)变异;自然选择
  • 生物不是静止的,而是进化的。物种不断变异,旧物种消灭,新物种产生
  • 生物的进化是连续和逐渐,不会发生突变
  • 生物之间存在一定的亲缘关系,他们具有共同的祖先
  • 自然选择。生物过渡繁殖,但是它们的生存空间和食物有限,从而面临生存斗争,包括:种内、种间以及生物与环境的斗争。自然选择是达尔文进化论的核心
  • 达尔文摒弃了Lamarck获得性遗传法则
  • 胚胎学家Weismann用如下实验:22代连续切割小鼠尾巴而第23代小鼠尾巴仍然不变短,明确否定了获得性遗传的观点

孟德尔学说:1857年,身为神父的孟德尔通过对植物进行一系列仔细的实验,发现植物的父母单独地把自身的特征传递给下一代。至关重要的是,他还发现特征不是单纯地混合在一起,而是保持着独立性:一株高的植物和一株矮的植物繁殖出来的后代要么是高的,要么是矮的,而不是介于两者之间。表明特征是分开独立地遗传给下一代,后来这被称为遗传基因。让人惊奇的是,孟德尔的重要发现被人们忽略了数十年,直到20世纪初才被人们认可。

新达尔文主义:

  • 将达尔文进化论和孟德尔-摩根基因相结合,成为现被广泛接受的新达尔文主义
  • 新达尔文注意认为,只用种群上和物种内的少量统计过程就可以充分地解释大多数生命历史,这些过程就是繁殖、变异、竞争、选择。繁殖是所有生命的共同特性;变异保证了任何生命系统能在正熵世界中连续繁殖自己;对于限制在有限区域中的不断膨胀的种群来说,竞争和选择是不可避免的结论

生物中的遗传概念:

  • 在生物细胞中,控制并决定生物遗传特性的物质是脱氧核糖核酸,简称DNA。染色体是其载体
  • DNA是由四种碱基按一定规则排列组成的长链。四种碱基不同的排列决定了生物不同的表现性状。例如,改变DNA长链中的特定一段(称为基因),即可改变人体的身高
  • 细胞在分裂时,DNA通过复制而转移到新产生的细胞中,新的细胞就继承了上一代细胞的基因
  • 在繁殖下一代时,两个同源染色体之间通过交叉而重组,亦即在两个染色体的某一相同位置处DNA被切断,其前后两串分别交叉形成两个新的染色体
  • 在细胞进行复制时可能以很小的概率产生某些复制差错,从而使DNA发生某种变异,产生新的染色体
  • 这些新的染色体将决定新的个体(后代)的新的性状
  • 在一个群体中,并不是所有的个体都能得到相同的繁殖机会,对生存环境适应度高的个体将获得更多的繁殖机会;对生存环境适应度较低的个体,其繁殖机会相对较少,即所谓自然选择。而生存下来的个体组成的群体,其品质不断得以改良,称为进化。
  • 生物的进化是经过无数次有利的进化积累而成的,不同的环境保留了不同的变异后代

二:遗传算法

2.1:基本介绍

遗传算法(Genetic Algorithm,GA)最早是由美国的John holland于20世纪70年代提出,该算法是根据大自然中生物体进化规律而设计提出的。是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。

遗传算法通过数学的方式,利用计算机仿真运算,将问题的求解过程转换成类似生物进化中的染色体基因的交叉、变异等过程。在求解较为复杂的组合优化问题时,相对一些常规的优化算法,通常能够较快地获得较好的优化结果。遗传算法已被人们广泛地应用于组合优化、机器学习、信号处理、自适应控制和人工生命等领域。

遗传算法的发展:

  • 1967年,美国密歇根大学约翰·霍兰德(John Holland)教授的学生Bagley在他的博士论文中首次提出了遗传算法这一术语,此后,Holland指导学生完成了多篇有关遗传算法研究的论文。1971年,Hollstien在他的博士论文中首次把遗传算法用于函数优化
  • 1975年是遗传算法研究历史上十分重要的一年。这一年约翰·霍兰德(John Holland)出版了他的著名专著《自然系统和人工系统的适应性》,该书系统地阐述了遗传算法的基本理论和方法,并提出了对遗传算法极为重要的模式理论,该理论首次确认了结构重组遗传操作对于获得隐并行性的重要性
  • 同年,迪乔恩(K.A.De Jong)完成了他的重要论文《遗传自适应系统的行为分析》。他在该论文中所做的研究工作可看作是遗传算法发展过程中的一个里程碑。他把Holland的模式理论与他的计算实验结合起来。尽管迪乔恩主要侧重于函数优化的应用研究,但他将选择、交叉和变异操作进一步完善和系统化,同时又提出了诸如代沟(generation gap)等新的遗传操作技术。他的研究工作为遗传算法及其应用打下了坚实的基础,他所得出的许多结论,迄今仍具有普遍的指导意义
  • 20世纪80年代后,遗传算法进入兴盛发展时期,被广泛应用于自动控制、生产计划、图像处理、机器人等研究领域

遗传算法的基本思想:

  • 首先实现从问题到基因映射,即编码(问题表示)工作,然后从代表问题可能潜在解集得一个种群开始进行进化求解
  • 初代种群(编码集合)产生后,按照优胜劣汰的原则,根据个体适应度大小挑选(选择)个体,进行复制、交叉、变异,产生出代表新的解集的群体,再对其进行挑选以及一系列遗传操作,如此往复,逐代演化产生出越来越好的近似解

概念说明:

  • 选择:通过适应度的计算,淘汰不合理的个体。类似于自然界的物竞天择
  • 复制:编码的拷贝,类似于细胞分裂中染色体的复制
  • 交叉:编码的交叉重组,类似于染色体的交叉重组
  • 变异:编码按小概率扰动产生的变化,类似于基因的突变

这个过程将导致种群像自然进化一样,后代种群比前代更加适应环境,末代种群中得最优个体经过解码(从基因到问题的映射),可以作为问题近似最优解。

遗传算法:

  • 遗传算法直接以目标函数值作为搜索信息
  • 传统的优化算法往往不只需要目标函数值,还需要目标函数的导数等其它信息。这样对许多目标函数无法求导或很难求导的函数,遗传算法就比较方便
  • 遗传算法同时进行解空间的多点搜索
  • 传统的优化算法往往从解空间的一个初始点开始搜索,这样容易陷入局部极值点
  • 遗传算法进行群体搜索,而且在搜索的过程中引入遗传运算,使群体又可以不断进化。这些是遗传算法所特有的一种隐含并行性

随机搜索 + 定向搜索:

  • 遗传算法使用概率搜索技术。遗传算法属于一种自适应概率搜索技术,其选择、交叉、变异等运算都是以一种概率的方式来进行的,从而增加了其搜索过程的灵活性
  • 实践和理论都已证明了在一定条件下遗传算法总是以概率1收敛于问题的最优解

用遗传算法求解问题需要解决以下六个问题:

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

2.2:算法流程

遗传算法概念流程如下:

  • 初始化。随机选择一些个体组成最初的种群(population)
  • 评估函数。通过某种方法来评估个体的适应度,即衡量染色体(解)的优劣。
  • 选择selection 。自然选择,优良的基因、生存能力强的被选择下来的概率要大。
  • 交叉crossover。产生后代,基因交叉,可以理解为有性繁殖,子代会分别从父母那得到部分基因
  • 变异mutation。后代的基因可能会变异。变异在生物进化起了很大作用

在这里插入图片描述

遗传算法步骤如下:

  • 首先将变量二进制化,产生随机初始种群,并计算种群中每个个体的适应度值
  • 按照适应度将种群个体进行排序,再依次执行基因重组与基因变异,得到子代新种群
  • 将子代群体插入到父代群体中,筛选出适应度值优良的个体
  • 进入到下一次的进化,直到进化到制定代数时停止并输出最优解

在这里插入图片描述

2.3:遗传编码

编码问题:把解决的问题映射成一个数学问题,也就是所谓的“数学建模”或问题表示,那么这个问题的一个可行解即被称为一条“染色体”。编码的方法直接影响到了遗传算法的交叉算子、变异算子等遗传算子的运算,因此很大程度上决定了遗传进化的效率。
在这里插入图片描述
编解码过程图示:
在这里插入图片描述

编码策略评估:

  • 完备性(completeness):问题空间中的所有点(候选解)都能作为GA空间中的点(染色体)表现
  • 健全性(soundness): GA空间中的染色体能对应所有问题空间中的候选解。
  • 非冗余性(non-redundancy):染色体和候选解一一对应。

在这里插入图片描述

2.4:交叉策略

单点交叉运算:
在这里插入图片描述

两点交叉运算:
在这里插入图片描述

2.5:遗传算法总结

遗传算法应用:

  • 函数优化:函数优化是遗传算法的经典应用领域,也是遗传算法进行性能评价的常用算例,如:连续函数和离散函数、凸函数和凹函数、低维函数和高维函数、单峰函数和多峰函数等。对于一些非线性、多模型、多目标的函数优化问题,用其它优化方法较难求解,而遗传算法可以方便的得到较好的结果。
  • 组合优化:随着问题规模的增大,组合优化问题的搜索空间也急剧增大,有时在计算上用枚举法很难求出最优解。对这类复杂的问题,人们已经意识到应把主要精力放在寻求满意解上,而遗传算法是寻求这种满意解的最佳工具之一。实践证明,遗传算法对于组合优化中的NP问题非常有效。例如遗传算法已经在求解旅行商问题、背包问题、装箱问题、图形划分问题等方面得到成功的应用。
  • 车间调度:车间调度问题是一个典型的NP-Hard问题,遗传算法作为一种经典的智能算法广泛用于车间调度中,很多学者都致力于用遗传算法解决车间调度问题,现今也取得了十分丰硕的成果。从最初的传统车间调度(JSP)问题到柔性作业车间调度问题(FJSP),遗传算法都有优异的表现,在很多算例中都得到了最优或近优解。
  • 遗传算法也在生产调度问题、自动控制、机器人学、图象处理、人工生命、遗传编码和机器学习等方面获得了广泛的运用。

常规优化算法:

  • 解析法:只能得到局部最优解,且要求目标函数连续光滑及可微信息
  • 枚举法:虽然克服了这些缺点,但计算效率太低,且对于实际问题往往由于搜索空间大而不能将所有的情况都搜索到
  • 动态规划法:存在“指数爆炸”问题,它对于中等规模和适度复杂性的问题,也常常无能为力

同常规算法相比,遗传算法有以下特点:

  • 算法从问题解的集合(种群)开始搜索,而不是从单个解开始。这是遗传算法与传统优化算法的极大区别。传统优化算法是从单个初始值迭代求最优解的;容易误入局部最优解。
  • 遗传算法同时处理群体中的多个个体,即对搜索空间中的多个解进行评估,覆盖面大,利于全局择优,减少了陷入局部最优解的风险,同时算法本身易于实现并行化。
  • 遗传算法是对决策变量的编码进行操作,这样提供的参数信息量大,优化效果好。
  • 遗传算法是从许多点开始并行操作,因而可以有效地防止搜索过程收敛于局部最优解。
  • 遗传算法通过目标函数来计算适配值,而不需要其他推导和附加信息,从而对问题的依赖性小。
  • 遗传算法的寻优规则是由概率决定的,而非确定性的。

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

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

相关文章

Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/128146985 红胖子(红模仿)的博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软…

设计模式之观察者模式(十四)

目录 1. 背景 1.1 天气预报项目 2. 观察者模式 2.1 观察者模式解决天气预报项目 2.2 观察者模式在JDK中应用 1. 背景 1.1 天气预报项目 天气预报项目需求,具体要求如下: 气象站可以将每天测量到的温度,湿度,气压等等以公告的形式发布出去…

ASEMI整流桥KBL406参数,KBL406规格,KBL406封装

编辑-Z ASEMI整流桥KBL406参数: 型号:KBL406 最大重复峰值反向电压(VRRM):600V 最大RMS电桥输入电压(VRMS):420V 最大直流阻断电压(VDC):600…

完全免费、开源的Flutter架构来了;开发者做好准备了吗?

Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面 一份代码可以同时生成 iOS 和 Android 两个高性能、高保真的应用程序 Flutter 目标就是使开发人员能够交付在不同平台上都感觉自然流畅的高性能应用程序,并且兼容 滚…

萤火虫模糊回归算法(Matlab代码实现)

🍒🍒🍒欢迎关注🌈🌈🌈 📝个人主页:我爱Matlab 👍点赞➕评论➕收藏 养成习惯(一键三连)🌻🌻🌻 🍌希…

FA-Phe-Gly-Gly,64967-39-1

Substrate for a continuous spectrophotometric assay of human angiotensin I-converting enzyme (ACE). Enzymatic cleavage of FAPGG yields FA-Phe-OH and H-Gly-Gly-OH. 连续分光光度法测定人血管紧张素i转换酶(ACE)的底物。酶法裂解FAPGG产生fa - pheo - oh和H-Gly-Gly-…

Kamiya丨Kamiya艾美捷抗-C-Myc,多克隆说明书

Kamiya艾美捷抗-C-Myc,多克隆化学性质: 程序:鸡用C-Myc免疫与KLH缀合的肽。多次之后用弗氏佐剂免疫收集。使用固定在固体上的肽对抗体进行免疫亲和纯化阶段 规范: ELISA:抗体特异性通过针对与BSA缀合的肽的ELISA。A…

在微信小程序里引入Vant Weapp组件库详细步骤

1. 新建一个文件夹。 2. 使用微信开发者工具 选择一个模板(这里以javaScript 基础模板 为例) 选择完模板之后如下: 2. 右键打开终端:按如下步骤执行命令。 ① npm init 解释:执行 npm init 需要在当前文件夹下的DOS窗口执行或者VS code里面…

Springboot策略模式实现文件上传功能(Windows/Linux本地,oss,cos)

1&#xff1a;首先配置pom依赖&#xff1a; <!-- 阿里云oss--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.8.0</version></dependency><!-- 腾讯云cos-->…

Raspberry Pi 3 Model B+ (树莓派3B+)快速上手

文章目录一、硬件资源二、供电三、引脚说明四、Raspberry Pi OS1. 下载imager2. 选择操作系统3. 选择SD卡4. 烧写完成5. 启动6. 版本信息五、网络测试1. WiFi2. 以太网六、开启串口日志1. 硬件串口连接2. 修改config.txt配置3. 修改cmdline4. 测试一、硬件资源 下面是硬件资源图…

架构-三层架构:三层架构

概述 顾名思义&#xff0c;三层架构分为三层&#xff0c;分别是“数据访问层”、“业务逻辑层”、“表示层”。 数据访问层&#xff1a;数据访问层在作业过程中访问数据系统中的文件&#xff0c; 实现对数据库中数据的读取保存操作。 表示层&#xff1a;主要功能是 显示数据和…

李宁「向上」:不止缺一个FILA

文|螳螂观察 作者|易不二 随着卡塔尔世界杯拉开战幕&#xff0c;今年年初大幅下跌的阿迪和耐克&#xff0c;正在借助世界杯大放异彩。 据统计&#xff0c;在2022年的32强世界杯球衣中&#xff0c;耐克、阿迪、彪马三家品牌共包揽了80%。世界杯球衣是出镜率最高的广告载体&am…

Android基础之Fragment

目录前言一、Fragment简介二、Fragment的基础使用1.创建Fragment2.在Activity中加入Fragment&#xff08;1&#xff09;在Activity的layout.xml布局文件中静态添加&#xff08;2&#xff09;在Activity的.java文件中动态添加三、Fragment的基础实践应用1.应用过程详解2.代码总览…

Java JDK下载与安装教程

文章目录Java JDK 简介下载 JDK安装 JDKJava JDK 简介 JDK是 Java 语言的软件开发工具包&#xff0c;主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心&#xff0c;它包含了JAVA的运行环境&#xff08;JVMJava系统类库&#xff09;和JAVA工具。 万事开…

Flink系列文档-(YY11)-watermark工作机制

1 WaterMark生成工作机制 观察源码 /*** A WatermarkGenerator for situations where records are out of order, but you can place an upper* bound on how far the events are out of order. An out-of-order bound B means that once an event* with timestamp T was encou…

[附源码]Python计算机毕业设计SSM酒店管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

alertmanager 基于webhook-adapter插件实现企业微信机器人提醒服务

前言 Alertmanager处理客户端应用程序&#xff08;例如 Prometheus 服务器&#xff09;发送的警报。它负责删除重复数据、分组并将它们路由到正确的接收器集成&#xff0c;例如电子邮件、PagerDuty 或 OpsGenie。它还负责警报的静音和抑制。 前提要求 安装docker&#xff0c;…

分布式搜索引擎 ElasticSearch(ES)

一、初识elasticsearch 1.了解ES 1&#xff09;elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容。elasticsearch结合kibana、Logstash、Beats&#xff0c;也就是elast…

基于SSH的周报管理系统

来公司的第一个实习项目&#xff0c;前端使用的是Freemark,刚开始上手比较复杂&#xff0c;慢慢摸索也算是圆满完成了&#xff0c;加油&#xff01;

LockSupport与线程中断

LockSupport与线程中断 线程中断机制 voidinterrupt()中断此线程static booleaninterrupted()获取当前线程中断标志位 true|falsebooleanisInterrupted()获取当前线程中断标志位true|false static boolean interrupted&#xff08;&#xff09;和boolean isInterrupted&#x…