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

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

相关文章

将Java项目提交到云服务器的流程步骤

《将Java项目提交到云服务器的流程步骤》所谓将项目提交到云服务器即将你的项目打成一个jar包然后提交到云服务器即可,因此我们需要准备服务器环境为:Linux+JDK+MariDB(MySQL)+Gi... 目录1. 安装 jdk1.1 查看 jdk 版本1.2 下载 jdk2. 安装 mariadb(my

MySQL 中的 LIMIT 语句及基本用法

《MySQL中的LIMIT语句及基本用法》LIMIT语句用于限制查询返回的行数,常用于分页查询或取部分数据,提高查询效率,:本文主要介绍MySQL中的LIMIT语句,需要的朋友可以参考下... 目录mysql 中的 LIMIT 语句1. LIMIT 语法2. LIMIT 基本用法(1) 获取前 N 行数据(

Go 语言中的select语句详解及工作原理

《Go语言中的select语句详解及工作原理》在Go语言中,select语句是用于处理多个通道(channel)操作的一种控制结构,它类似于switch语句,本文给大家介绍Go语言中的select语... 目录Go 语言中的 select 是做什么的基本功能语法工作原理示例示例 1:监听多个通道示例 2:带

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Python Faker库基本用法详解

《PythonFaker库基本用法详解》Faker是一个非常强大的库,适用于生成各种类型的伪随机数据,可以帮助开发者在测试、数据生成、或其他需要随机数据的场景中提高效率,本文给大家介绍PythonF... 目录安装基本用法主要功能示例代码语言和地区生成多条假数据自定义字段小结Faker 是一个 python

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和

Spring AI ectorStore的使用流程

《SpringAIectorStore的使用流程》SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介... 目录一、VectorStore的基本概念二、VectorStore的核心接口三、VectorStore的

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工