GA遗传算法

储备知识

GA算法主要解决数学模型中最优化搜索算法,是进化算法中的一种,基因算法借鉴了自然界基因的遗传的主要现象,分别为遗传,变异,自然选择,杂交等。

GA算法参数

GA算法的参数如下所示。

  • 种群规模(即一般为行数,即为个体数量)
  • 字符串长度(会将一个变量编码成字符串,一般为0-1二进制字符串)
  • 交配(杂交)概率(让适应度高的个体产生后代变量的概率更大,但其他个体的概率为非负数)
  • 突变概率(让个体基因存在一定的突变概率,一般为1e-3)
  • 终止条件,一般的终止条件如下所示。
  1. 循环迭代产生基因的次数
  2. 计算资源使用殆尽
  3. 已经找到全局最优质值
  4. 一定人为干预

GA算法的流程

GA算法最重要的为适应度函数以及自变量的取值范围,以及变量的个数,因此代码实现流程如下所展示。

  1. 算法随机生成一定数量的个体,生成初始种群的质量
  2. 对每一代评价每个个体,确定适应度数值
  3. 产生下一代,这过程包括交叉操作以及突变操作。一般按照适应度数值排序,但不完全以适应度高地为导向,因为有可能造成局部最优解。
  4. 继续循环2-3的步骤,直到满足终止条件(上述已经说明)

具体流程如图所示。
在这里插入图片描述

GA算法的适应度函数

适应度函数一般都是用目标函数确定的。目标函数即为因变量与自变量之间的映射函数。而适应度函数主要目的是确定优化的方向,即为最小化还是最大化目标函数值。最小化最大化的代码如下所示。

def Function_(x, y): # Function_(x, y)为目标函数
	pass 
def get_fitness(pop, type='min'):  
# get_fitness(pop, type='min')为自适应函数,一般为确定min为追求最小化,max为追求最大化
# x,y的参数主要根据目标函数的自变量个数去确定
    if  type  is 'min':
   		x,y = translateDNA(pop)
   		pred = Function_(x, y)
   		return -(pred - np.max(pred)) + 1e-3
   elfi type is 'max':
   	    x,y = translateDNA(pop)
   		pred = Function_(x, y)
   		return (pred - np.min(pred)) + 1e-3 

GA算法的编码

此外在运用遗传算法的时候,最重要的是会将自变量编码为我们所需要的字符串,这个过程称之为编码,编码方式为二进制编码,将十进制的数字转化为二进制,如5编码之后变成101。后续编码会将补全到某个特定的二进制编码,如变成0000000101(10位二进制编码)。

GA算法的遗传因子选择

选择

交叉

变异

代码实现过程

具体问题具体分析,文中主要以Rosenbrock函数的极大值为例子(参考了知乎某位大佬的例子遗传算法python(含例程代码与详解))
该函数又称为香蕉函数。具体如图所示。
具体的函数解析式如下所示。
f ( x , y ) = ( 1 − x ) 2 + 100 ( y − x 2 ) 2 . f(x,y)=(1-x)^{2}+100(y-x^{2})^{2}. f(x,y)=(1x)2+100(yx2)2.

在这里插入图片描述

代码

import numpy as np
import matplotlib.pyplot as plt


# 适应度函数,求取最大值
#因为GA函数是求最小值,所以我在适应度函数上加一个负号
#GA要求输入维度2维及其以上,所以我传入2个参数,第二维x2不用,
def fitness(y, x):
   # x1, x2 = x
   # return -(x1 + 16 * np.sin(5 * x1) + 10 * np.cos(4 * x1))
   return -(100.0 * (y - x ** 2.0) ** 2.0 + (1 - x) ** 2.0)


# 个体类
from sko.GA import GA
up_bound = [2.048, 2.048]
low_boound = [-2.048, -2.048]
n_dim = 2
iter_num = 800
precision = 1e-7
size_pop = 50
ga = GA(func=fitness, n_dim=n_dim, size_pop=size_pop, max_iter=iter_num, lb=low_boound, ub=up_bound, precision=precision)
# 具体代码的修改需要根据n_dim以及lb和ub的个数,个人理解lb是下限,ub为上限,此外,修改为适应度函数的时候需要注意,即为修改以及调整适应度函数的自变量个数以及表达式
best_x, best_y = ga.run()
# best_x 输出的是坐标,所以就是为一个元组,best_y为因变量,所以输出是一个数值
print('best_x:', best_x[0], '\n', 'best_y:', -best_y)


def func(y, x):
   # return x + 16 * np.sin(5 * x) + 10 * np.cos(4 * x)
   return 100.0 * (y - x ** 2.0) ** 2.0 + (1 - x) ** 2.0

# 绘制二维图像
# x = np.linspace(-10, 10, 100000)
# y = func(x)
#
# plt.plot(x, y)
# plt.scatter(best_x[0], -best_y, c='r', label='best point')

# 绘制三维图像
ax3 = plt.axes(projection='3d')
X = np.linspace(low_boound[0], up_bound[0], 100)
Y = np.linspace(low_boound[1], up_bound[1], 100)
X, Y = np.meshgrid(X, Y)
Z = 100.0 * (Y - X ** 2.0) ** 2.0 + (1 - X) ** 2.0
# plt.scatter(best_x[0], best_x[1], -best_y, c='r', label='best point')
ax3.scatter(best_x[0], best_x[1], -best_y, c='r', label='best point')
ax3.plot_surface(X, Y, Z, cmap='rainbow')
# # ax3.contour(X, Y, Z, zdim='z',offset=-2, cmap='rainbow')   #等高线图,要设置offset,为Z的最小值
plt.legend()
plt.show()

最终绘制结果如下所示。
在这里插入图片描述

参考

维基百科遗传算法介绍
matlab遗传算法介绍——寻找高度非线性问题的全局极小值
遗传算法python(含例程代码与详解)(知乎)
遗传算法python进阶理解+论文复现(纯干货,附前人总结引路)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JAVA 求最小公因数

JAVA 求最小公因数 文章目录 JAVA 求最小公因数方法一:枚举法的第一种方法一:枚举法的第二种方法二:展转相除法(欧几里德算法)方法三:递归拓展 求最小公倍数公式为综合 辗转相除法递归 求n个数的最大公约数和最小公倍数 题目&…

一百六十九、Hadoop——Hadoop退出NameNode安全模式与查看磁盘空间详情(踩坑,附截图)

一、目的 在海豚跑定时跑kettle的从Kafka到HDFS的任务时,由于Linux服务器的某个文件磁盘空间满了,导致Hadoop的NodeName进入安全模式,此时光执行hdfs dfsadmin -safemode leave命令语句没有效果(虽然显示Safe mode is OFF&#x…

EFLK日志平台(filebeat-->kafka-->logstash-->es-->kiabana)

ELK平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kiabana 三个开源工具配合使用, 完成更强大的用户对日志的查询、排序、统计需求。 安装顺序 1.安装es 7.17.12 2.安装kibana 7.17.12 3.安装x-pack 保证以上调试成功后开始下面…

C语言:动态内存(一篇拿捏动态内存!)

目录 学习目标: 为什么存在动态内存分配 动态内存函数: 1. malloc 和 free 2. calloc 3. realloc 常见的动态内存错误: 1. 对NULL指针的解引用操作 2. 对动态开辟空间的越界访问 3. 对非动态开辟内存使用free释放 4. 使用free释…

汽车自适应巡航系统控制策略研究

目 录 第一章 绪论 .............................................................................................................................. 1 1.1 研究背景及意义 ..........................................................................................…

Spring Boot 中 Nacos 配置中心使用实战

官方参考文档 https://nacos.io/zh-cn/docs/quick-start-spring-boot.html 本人实践 1、新建一个spring boot项目 我的spirngboot版本为2.5.6 2、添加一下依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-…

【Locomotor运动模块】瞬移

文章目录 一、原理二、两种类型1、Instant(立刻)2、Dash&#xff08;猛冲&#xff09; 三、瞬移区域、瞬移点1、瞬移区域2、瞬移点 一、原理 抛物线指针选择好目标位置&#xff0c;然后告诉瞬移预设体&#xff1a;你想法把游戏区域弄到目标位置来 解释&#xff1a;抛物线指针选…

uniapp 微信小程序仿抖音评论区功能,支持展开收起

最近需要写一个评论区功能&#xff0c;所以打算仿照抖音做一个评论功能&#xff0c;支持展开和收起&#xff0c; 首先我们需要对功能做一个拆解&#xff0c;评论区功能&#xff0c;两个模块&#xff0c;一个是发表评论模块&#xff0c;一个是评论展示区。接下来对这两个模块进行…

最新ChatGPT程序源码+AI系统+详细图文部署教程/支持GPT4.0/支持Midjourney绘画/Prompt知识库

一、AI系统 如何搭建部署人工智能源码、AI创作系统、ChatGPT系统呢&#xff1f;小编这里写一个详细图文教程吧&#xff01;SparkAi使用Nestjs和Vue3框架技术&#xff0c;持续集成AI能力到AIGC系统&#xff01; 1.1 程序核心功能 程序已支持ChatGPT3.5/GPT-4提问、AI绘画、Mi…

Kubernetes技术--使用kubeadm搭建高可用的K8s集群(贴近实际环境)

1.高可用k8s集群架构(多master) 2.安装硬件要求 一台或多台机器,操作系统 CentOS7.x-86_x64 硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多 注: 这里属于教学环境,所以使用三台虚拟机模拟实现。 3.部署规划 4.部署前准备 (1).关闭防火墙 systemctl stop fi…

数据结构|栈和队列以及实现

栈和队列 一、栈1.1栈的概念及结构1.2栈的实现 二、队列2.1队列的概念及结构2.2队列的实现 一、栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和数据删除的一端称为栈顶&#xff0c;另一端称为栈…

深度学习入门(Python)学习笔记1

第1章 Python入门 1.1python是什么 Python是一个简单、易读、易记的编程语言&#xff0c;而且是开源的&#xff0c;可以免费地自由使用。 使用Python不仅可以写出可读性高的代码&#xff0c;还可以写出性能高&#xff08;处理速度快&#xff09;的代码。 再者&#xff0c;在…

7.2 项目2 学生通讯录管理:文本文件增删改查(C 版本)(自顶向下设计+断点调试) (A)

C自学精简教程 目录(必读) 该作业是 作业 学生通讯录管理&#xff1a;文本文件增删改查&#xff08;C版本&#xff09; 的C 语言版本。 具体的作业题目描述&#xff0c;要求&#xff0c;可以参考 学生通讯录管理&#xff1a;文本文件增删改查&#xff08;C版本&#xff09;。…

Windows下Redis的安装和配置

文章目录 一,Redis介绍二,Redis下载三,Redis安装-解压四,Redis配置五,Redis启动和关闭(通过terminal操作)六,Redis连接七,Redis使用 一,Redis介绍 远程字典服务,一个开源的,键值对形式的在线服务框架,值支持多数据结构,本文介绍windows下Redis的安装,配置相关,官网默认下载的是…

iTOP-RK3588开发板Android12 设置系统默认不休眠

修改文件&#xff1a; device/rockchip/rk3588/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults. xml 文件&#xff0c;如下图所示&#xff1a; - <integer name"def_screen_off_timeout">60000</integer> <integer name&q…

卡特兰数和算法

在组合数学中&#xff0c;卡特兰数是一系列自然数&#xff0c;出现在各种组合计数问题中&#xff0c;通常涉及递归定义的对象。它们以比利时数学家尤金查尔斯卡特兰&#xff08;Eugne Charles Catalan&#xff09;的名字命名。 卡特兰数序列是1, 1, 2, 5, 14, 42......&#xf…

传承精神 缅怀伟人——湖南多链优品科技有限公司赴韶山开展红色主题活动

8月27日上午&#xff0c; 湖南多链优品科技有限公司全体员工怀着崇敬之情&#xff0c;以红色文化为引领&#xff0c;参加了毛泽东同志诞辰130周年的纪念活动。以董事长程小明为核心的公司班子成员以及全国优秀代表近70人一行专赴韶山&#xff0c;缅怀伟人毛泽东同志的丰功伟绩。…

230902-部署Gradio到已有FastAPI及服务器中

1. 官方例子 run.py from fastapi import FastAPI import gradio as grCUSTOM_PATH "/gradio"app FastAPI()app.get("/") def read_main():return {"message": "This is your main app"}io gr.Interface(lambda x: "Hello, …

基于硬件隔离增强risc-v调试安全1_问题描述

安全之安全(security)博客目录导读 2023 RISC-V中国峰会 安全相关议题汇总 说明&#xff1a;本文参考RISC-V 2023中国峰会如下议题&#xff0c;版权归原作者所有。

CCF HPC China2023|澎峰科技:使能先进计算,赋能行业应用

CCF HPC China2023圆满落幕&#xff01; 桂秋八月&#xff0c;为期三天的中国高性能计算领域最高规格盛会——2023CCF全球高性能计算学术年会&#xff08;HPC China&#xff09;在青岛红岛国际展览中心圆满落幕。行业超算大咖、顶级学界精英、先锋企业领袖参会者齐聚山东青岛&a…