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-3elfi 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进阶理解+论文复现(纯干货,附前人总结引路)

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

通义千问部署搭建

文章目录 一、部署11.1 打开通义千问-7B-预训练-模型库-选择资源1.2 使用Netbook2.1 运行2.2 复制脚本2.2.1 问题1 :ImportError: This modeling file requires the following packages that were not found in your environment: transformers_stream_generator. R…

【请求报错:javax.net.ssl.SSLHandshakeException: No appropriate protocol】

1、问题描述 在请求服务时报错说SSL握手异常协议禁用啥的,而且我的连接数据库的url也加了useSSLfalse javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)2、解决方法 在网上查找了方法…

【C++笔记】C++内存管理

【C笔记】C内存管理 一、C中动态内存申请的方式二、new和delete的实现原理2.1、operator new和operator delete函数 一、C中动态内存申请的方式 在C语言中我们需要动态申请空间的时候我们通常都是用malloc函数,但是malloc函数对自定义类型是没什么问题的&#xff0…

Jenkins清理构建(自动)

需求背景实现方法 Dashboard-->Project-->配置-->General-->Discard old builds # 注意:自动清理构建历史将在下次构建时进行

【校招VIP】产品面试之职业规划

考点介绍: 对于刚入行的产品同学,由于行业知识和经验不足,只能执行上层的产品策略,但是与团队的沟通是非常重要的,产品经理就是沙丁鱼中的鲶鱼,必须要能够把控整个团队的开发节奏,知道如何最大化…

个微机器人开发接口

请求URL: http://域名地址/member/login域名地址开发者账号密码:后台系统自助开通 请求方式: POST 请求头Headers: Content-Type:application/json 参数: 参数名必选类型说明account是string开发者账号password…

Swift 技术 视频播放器滚动条(源码)

一直觉得自己写的不是技术,而是情怀,一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的,希望我的这条路能让你们少走弯路,希望我能帮你们抹去知识的蒙尘,希望我能帮你们理清知识的脉络&#xff0…

core dump管理在linux中的前世今生

目录 一、什么是core dump? 二、coredump是怎么来的? 三、怎么限制coredump文件的产生? ulimit 半永久限制 永久限制 四、从源码分析如何对coredump文件的名字和路径管理 命名 管理 一些问题的答案 1、为什么新的ubuntu不能产生c…

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

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

HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。

HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。 HashMap相关问题 1、你用过HashMap吗?什么是HashMap?你为什么用到它?用过,HashMap是基于哈希表的Map接口的非同步实现, 它允许null键…

测试开发【Mock平台】09开发:项目管理(五)搜索、删除和Table优化

【Mock平台】为系列测试开发教程,从0到1编码带你一步步使用Spring Boot 和 Antd React框架完成搭建一个测试工具平台,希望作为一个实战项目对各位的测试开发学习之路有帮助,大奇一个专注测试技术干货原创与分享的家伙。 Mock平台系统项目基本…

数电再回顾

最近,花了点时间回顾数字电路,放几张我觉得比较好的截图,记录学习过程。 附录: 计算机是如何保存1和0的 - 知乎 (zhihu.com) 只读存储器ROM || ROM实现逻辑函数 || 数电 - 知乎 (zhihu.com) ROM的组成原理 -解决方案-华强电子网…

chatgpt谈论日本排放污水事件

W...Y的主页 😊 代码仓库分享 💕 近日,世界发生了让人义愤填膺的时间——日本排放核污水。这件事情是那么的突然且不计后果,海洋是我们全人类共同的财产,而日本却想用自己一己私欲将全人类的安全置之度外&#xff0c…

工厂方法模式的概述和使用

目录 一、工厂方法模式概述1. 定义2. 使用动机 二、工厂方法模式结构1. 模式结构2. 时序图 三、工厂方法模式的使用实例四、工厂方法模式的优缺点五、工厂方法模式在Java中应用 原文链接 一、工厂方法模式概述 1. 定义 工厂方法模式(Factory Method Pattern)又称为工厂模式&…

基于Laravel通用型内容建站企业官网系统源码 可免费商用

是一个基于 Laravel 企业内容建站系统。模块市场拥有丰富的功能应用,支持后台一键快速安装,让开发者能快的实现业务功能开发。 系统完全开源,免费且不限制商业使用 2023年08月23日增加了以下12个特性: [新功能] 手机端Banner支持…

数学建模--粒子群算法(PSO)的Python实现

目录 1.开篇提示 2.算法流程简介 3.算法核心代码 4.算法效果展示 1.开篇提示 """ 开篇提示: 这篇文章是一篇学习文章,思路和参考来自:https://blog.csdn.net/weixin_42051846/article/details/128673427?utm_mediumdistribute.pc_relevant.none-task-blog-…

thinkPHP项目搭建

1 宝塔添加站点 (1)打开命令提示行,输入以下命令,找到hosts文件。 for /f %P in (dir %windir%\WinSxS\hosts /b /s) do copy %P %windir%\System32\drivers\etc & echo %P & Notepad %P (2)添加域…

数据库-DQL

DQL:用来查询数据库表中的记录 关键字:SELECT 语法: select:字段列表 from:表名列表 where:条件列表 group by:分组列表 having:分组后条件列表 order by:排序字段列表…

2022年12月 C/C++(六级)真题解析#中国电子学会#全国青少年软件编程等级考试

C/C++编程(1~8级)全部真题・点这里 第1题:区间合并 给定 n 个闭区间 [ai; bi],其中i=1,2,…,n。任意两个相邻或相交的闭区间可以合并为一个闭区间。例如,[1;2] 和 [2;3] 可以合并为 [1;3],[1;3] 和 [2;4] 可以合并为 [1;4],但是[1;2] 和 [3;4] 不可以合并。 我们的任务是…

Stable Diffuse 之 本地环境部署/安装包下载搭建过程简单记录

Stable Diffuse 之 本地环境部署/安装包下载搭建过程简单记录 目录 Stable Diffuse 之 本地环境部署/安装包下载搭建过程简单记录 一、简单介绍 二、注意事项 三、环境搭建 git 下载和安装 python 下载和安装 stable-diffusion-webui 下载和安装 测试 stable diffuse w…