遗传算法笔记:基本工作流程

2024-06-11 10:04

本文主要是介绍遗传算法笔记:基本工作流程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 介绍

  • 遗传算法有5个主要任务,直到找到最终的解决方案

2  举例

2.1 问题描述

  • 比如我们有 5 个变量和约束,其中 X1、X2、X3、X4 和 X5 是非负整数且小于 10(0、1、2、4、5、6、7、8、9)
  • 我们希望找到 X1、X2、X3、X4 和 X5 的最优解
    • 3X_1+2X_2+4X_3+2X_4+5X_5=100

2.2 解决方法

2.2.0 问题转化

  • 将问题方程转化为目标函数。
    • f(x)=3X_1+2X_2+4X_3+2X_4+5X_5-100
  • 遗传算法将尝试最小化目标函数以获得 X1、X2、X3、X4 和 X5 的解决方案。

2.2.1初始化

  • 在初始化时,确定每一代的染色体数。
    • 我们记染色体的数量是 5。(一个种群有5条染色体)
    • 每个染色体有 5 个基因(X1~X5),使用 0 到 9 之间的随机数生成基因。

2.2.2 适应度函数计算(评估) 

  • 将 X1、X2、X3、X4 和 X5 代入目标函数
  • 适应度函数是 1 除以误差,其中误差为 (1 + f(x))
    • 分母+1是为了避免除零问题
  • ——>得到这个种群每个染色体的适应度

2.2.3  选择

  • 在遗传算法的背景下,具有较高适应度值的染色体将更有可能在轮盘赌中被选中
  • 计算 5 条染色体的总适应度值,然后计算每条染色体适应度的占比(每个染色体的概率)
  • 接着计算累积概率
  • 然后生成5个随机数Uniform(0,1)
    • 这些随机数决定了选择哪几条染色体(可以重复选一条)
    • 比如选择了:
      • 找到对应概率区间的那条染色体
    • ——>选择后的新染色体:

2.2.4 交叉

  • 在生物学中,交叉是指生殖的一个术语。两条染色体被随机选择并通过数学运算进行匹配。
  • 这里简单起见,使用单点交叉
    • 首先我们事先确定好交叉率(Pc)【比如为0.25】
      • 下面随机数目小于0.25的染色体将成为交叉中的亲本
    • 然后生成5个Uniform(0,1)分布的随机数
      • 小于0.25的三个对应的染色体是1,3,5,将他们结合(编号小的在前面)
  • 但此时我们只是知道了哪几个染色体交叉,那么从哪个位置开始交叉呢
    • 为了确定交叉线的位置,需要生成一个1到n之间的随机数,其中n是染色体- 1的长度
      • ——>染色体1&3 之间的交叉
      • ——>1和5号染色体之间的交叉
      • ——>3号和5号染色体

2.2.5 突变

  • 突变是赋予任何基因新价值的过程
  • 事先确定突变率Pm
  • 首先计算一个种群中的基因数量
    • 基因总数 = 染色体 x 染色体中的基因数
    • ——>这里是3
  • 然后我们生成3个1~种群基因数的随机数,这些位置就是基因突变的位置
    • 对于每一个被选中的基因,生成一个从0到9的随机数来替换旧的值

——>这就是第二代染色体了

使用生成的新一代重复这个过程,就可以以获得X1、X2、X3、X4和X5的最佳解

参考内容:手推遗传算法(Genetic Algorithm,GA)的详细步骤图解 (qq.com)

这篇关于遗传算法笔记:基本工作流程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1050855

相关文章

MySQL游标和触发器的操作流程

《MySQL游标和触发器的操作流程》本文介绍了MySQL中的游标和触发器的使用方法,游标可以对查询结果集进行逐行处理,而触发器则可以在数据表发生更改时自动执行预定义的操作,感兴趣的朋友跟随小编一起看看... 目录游标游标的操作流程1. 定义游标2.打开游标3.利用游标检索数据4.关闭游标例题触发器触发器的基

MySQL中between and的基本用法、范围查询示例详解

《MySQL中betweenand的基本用法、范围查询示例详解》BETWEENAND操作符在MySQL中用于选择在两个值之间的数据,包括边界值,它支持数值和日期类型,示例展示了如何使用BETWEEN... 目录一、between and语法二、使用示例2.1、betwphpeen and数值查询2.2、be

C#实现将Excel工作表拆分为多个窗格

《C#实现将Excel工作表拆分为多个窗格》在日常工作中,我们经常需要处理包含大量数据的Excel文件,本文将深入探讨如何在C#中利用强大的Spire.XLSfor.NET自动化实现Excel工作表的... 目录为什么需要拆分 Excel 窗格借助 Spire.XLS for .NET 实现冻结窗格(Fro

MySQL基本表查询操作汇总之单表查询+多表操作大全

《MySQL基本表查询操作汇总之单表查询+多表操作大全》本文全面介绍了MySQL单表查询与多表操作的关键技术,包括基本语法、高级查询、表别名使用、多表连接及子查询等,并提供了丰富的实例,感兴趣的朋友跟... 目录一、单表查询整合(一)通用模版展示(二)举例说明(三)注意事项(四)Mapper简单举例简单查询

C#借助Spire.XLS for .NET实现Excel工作表自动化样式设置

《C#借助Spire.XLSfor.NET实现Excel工作表自动化样式设置》作为C#开发者,我们经常需要处理Excel文件,本文将深入探讨如何利用C#代码,借助强大的Spire.XLSfor.N... 目录为什么需要自动化工作表样式使用 Spire.XLS for .NET 实现工作表整体样式设置样式配置

在DataGrip中操作MySQL完整流程步骤(从登录到数据查询)

《在DataGrip中操作MySQL完整流程步骤(从登录到数据查询)》DataGrip是JetBrains公司出品的一款现代化数据库管理工具,支持多种数据库系统,包括MySQL,:本文主要介绍在D... 目录前言一、登录 mysql 服务器1.1 打开 DataGrip 并添加数据源1.2 配置 MySQL

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Spring Boot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)

《SpringBoot分层架构详解之从Controller到Service再到Mapper的完整流程(用户管理系统为例)》本文将以一个实际案例(用户管理系统)为例,详细解析SpringBoot中Co... 目录引言:为什么学习Spring Boot分层架构?第一部分:Spring Boot的整体架构1.1

nodejs打包作为公共包使用的完整流程

《nodejs打包作为公共包使用的完整流程》在Node.js项目中,打包和部署是发布应用的关键步骤,:本文主要介绍nodejs打包作为公共包使用的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言一、前置准备二、创建与编码三、一键构建四、本地“白嫖”测试(可选)五、发布公共包六、常见踩坑提醒