当前位置: 首页 > news >正文

遗传算法GA-算法原理与算法流程图

本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com

目录

一、遗传算法流程图    

 1.1. 遗传算法流程图    

二、遗传算法的思想与机制   

2.1 遗传算法的思想    

2.2 遗传算法的机制介绍    

三、 遗传算法的算法流程   

3.1 遗传算法的算法流程    

3.2 关于遗传算法的自定义内容    


遗传算法是著名的智能算法之一,它借鉴于生物遗传进行的机制来寻找一个优秀的解
本文讲解遗传算法的思路和具体流程,并剖析遗传算法的核心思路

一、遗传算法流程图    

 1.1. 遗传算法流程图    

 遗传算法(Genetic Algorithm,GA)是一种群体寻优算法
遗传算法的算法流程图如下:


遗传算法是一个灵活的算法,本流程图中仅包含遗传算法中最基础必备的核心内容
在实际应用中需要根据具体问题设计具体的染色体交换、基因变异方式

二、遗传算法的思想与机制   

本节介绍遗传算法的思想与机制,初步了解遗传算法是什么

2.1 遗传算法的思想    

遗传算法是一种借鉴生物遗传进化机制而设计的寻优算法,生物在多代种群迭代中,优胜劣态,最终种群越来越优秀 

这种机制可以迁移到我们的数学求最优值问题上来,种群个体就相当于我们的解,目标函数就是衡量这个个体优秀程度的指标,所以我们可以借鉴生物是怎么进化到一个优秀个体,来让我们的解,也进化(寻找)到一个更优秀的解

2.2 遗传算法的机制介绍    

遗传算法是以生物进化的概念而设计的一种寻优算法
主要借鉴的机制有三,如下:
👉1. 种群与编码                   
👉2. 染色体交换与基因突变
👉3. 适者生存  

种群与编码
在刚开始时,遗传算法会先初始化一个种群,即一组X,种群的个体(即每个X)都以编码的形式存在,如下 


染色体交换与基因突变
然后遗传算法通过个体之间的染色体交换和基因突变来产生新的种群


适者生存
最后,根据种群个体的适应度来选择是否能遗留到下一代种群


通过这种机制,不断的迭代,使得种群的质量不断优化,直到种群无法进化,或者达到最大迭代次数时,终止迭代,最后输出最优的个体

三、 遗传算法的算法流程   

本节展示遗传算法的具体算法流程

3.1 遗传算法的算法流程    

遗传算法的算法流程如下:
一、初始化种群                                                                                 
       初始化g个解                                                                         
二、迭代T轮                                                                                       
       2.1 染色体交换                                                                            
             解与解之间进行部分交换                            
             交换的方式是多种多样,具体问题有具体方案         
        2.2 基因变异                                                                             
             抽个别解作单独的随机调整                         
        2.3 计算个体适应度                                                                   
             越优秀的解,适应度越大                           
        2.4 赌轮盘选择一下代                                                               
             (1) 生成轮盘                                                                      
                  按适应度占比分配轮盘面积,适应度越大面积就越大
             (2) 赌轮盘选择下一代                                                        
                  仍抽g个解作为下一代 ,本轮最优必须进入下一轮,
                  剩余g-1个通过赌轮盘确定选择哪一个(赌g-1次轮盘)
                  赌轮盘的方法:                                                      
                  每次生成一个[0,1]之间的随机数,                
                  随机数指向轮盘哪个位置就抽哪个                
                (有可能重复抽到同一个)                        
三、输出结果                                              
       最后,遗传算法输出历史最优的解作为最终的解  

3.2 关于遗传算法的自定义内容    

遗传算法是一种思想,对于具体的问题,我们需要自行定义如下部分
(1) 染色体交换的方式(即解与解之间如何进行部分交换) 
      如果解的形式是一个数值,往往会把它先换为2进制,
      再将解进行部分片段交换,以此产生新解            
(2) 基因变异的方式(即单个解如何作出随机改变)           
(3) 适应度的设计(越优秀值的解适应度越大)                  
      如果是最小化问题,且目标函数恒大于0,         
      则常见的方法将适应度取为目标函数的倒数       
✍️补充:关于解的编码
如果解X不是编码形式,还需另外设计如何将X转换成编码形式
 例如X如果是数值形式,可以将它转换成二进制形式
 


相关文章
1-LVQ的学习目录:老饼|BP神经网络-竞争神经网络
2-SVM的学习目录:老饼|BP神经网络-感知机与SVM
3-BP的学习目录:老饼|BP神经网络-BP入门

相关文章:

  • 搭建 AI 图像生成器 (SAAS) php laravel
  • python django 小程序博客源码
  • 杭州-区块链前瞻性论坛邀请函​
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • 基于STM32的多组外部中断(EXTI)的优化策略与应用
  • 春秋云境靶场CVE-2022-28512漏洞复现(sql手工注入)
  • 阿里面试面试题
  • Linux非阻塞等待示例
  • 【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷B
  • react hook 获取setState的新值
  • 146. LRU 缓存
  • 蓝桥杯每日一题2023.11.16
  • 51.Sentinel微服务保护
  • 网络运维Day18
  • YOLOV5部署Android Studio安卓平台NCNN
  • [译]如何构建服务器端web组件,为何要构建?
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • ➹使用webpack配置多页面应用(MPA)
  • 2019年如何成为全栈工程师?
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • Node 版本管理
  • 百度小程序遇到的问题
  • 从0实现一个tiny react(三)生命周期
  • 大快搜索数据爬虫技术实例安装教学篇
  • 前端技术周刊 2019-02-11 Serverless
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 手机app有了短信验证码还有没必要有图片验证码?
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 小而合理的前端理论:rscss和rsjs
  • 硬币翻转问题,区间操作
  • 继 XDL 之后,阿里妈妈开源大规模分布式图表征学习框架 Euler ...
  • ​io --- 处理流的核心工具​
  • #WEB前端(HTML属性)
  • (2)MFC+openGL单文档框架glFrame
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (笔试题)合法字符串
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (七)Knockout 创建自定义绑定
  • (四)Android布局类型(线性布局LinearLayout)
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)nsfocus-绿盟科技笔试题目
  • .NET 回调、接口回调、 委托
  • .Net 知识杂记
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net反混淆脱壳工具de4dot的使用
  • .net开发时的诡异问题,button的onclick事件无效
  • .sh
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • [C#] 我的log4net使用手册
  • [Django 0-1] Core.Checks 模块
  • [DNS网络] 网页无法打开、显示不全、加载卡顿缓慢 | 解决方案