【计算智能】遗传算法(二):基本遗传算法在优化问题中的应用【实验】

前言

本系列文章架构概览:

  本文将介绍基本遗传算法在解决优化问题中的应用,通过实验展示其基本原理和实现过程:选取一个简单的二次函数作为优化目标,并利用基本遗传算法寻找其在指定范围内的最大值。

2. 基本遗传算法(SGA)

  基本遗传算法(Simple Genetic Algorithm : SGA)又称为简单遗传算法,使用选择算子、交叉算子和变异算子这三种基本的遗传算子,操作简单、容易理解,是其它遗传算法的雏形和基础。

2.1 基本遗传算法的构成要素

  基本遗传算法由染色体编码方法、适应度函数和遗传算子三个主要要素组成,前文已经对每个要素进行了详细说明:

2.2 算法流程

算法流程

  • 初始化种群: 随机生成一定数量的个体,每个个体对应一个可能的解,用二进制或其他编码方式表示。
  • 适应度评价: 计算每个个体的适应度,适应度值反映了个体解的优劣程度。
  • 选择操作: 根据个体的适应度值,使用一定的选择策略(如轮盘赌选择、锦标赛选择等)从当前种群中选择出一部分个体,作为下一代种群的父代。
  • 交叉操作: 对选中的父代个体进行交叉操作,产生新的子代个体。交叉操作通过==重组父代个体的基因==,产生新的解空间。
  • 变异操作: 对交叉后的子代个体以一定的小概率进行变异操作,==引入新的基因==,增加种群的多样性。
  • 终止条件判断: 检查是否满足算法终止条件(如达到最大迭代次数、找到满意解等),若满足则终止,否则回到步骤2,进行下一代种群的进化。

  通过不断重复上述过程,种群中个体的适应度将逐渐提高,最终converge到问题的最优解或近似最优解。

2.3 伪代码

Procedure GeneticAlgorithm()t = 0 // 初始化迭代次数InitializePopulation(P(t)) // 初始化种群Evaluate(P(t)) // 评估种群中个体的适应度Best = KeepBest(P(t)) // 保留当前最优个体while (not TerminationConditionMet()) doP(t) = Selection(P(t)) // 选择操作P(t) = Crossover(P(t)) // 交叉操作P(t) = Mutation(P(t))  // 变异操作t = t + 1 // 更新迭代次数P(t) = P(t-1)Evaluate(P(t)) // 重新评估种群中个体的适应度if (BestIndividual(P(t)) > Best) thenBest = ReplaceBest(P(t)) // 更新最优个体end ifend whilereturn Best // 返回找到的最优解
End Procedure

3. 应用到优化问题中

3.1 理论分析

3.2 代码实现

1. 导入所需库

import random

2. 目标函数 f(x)

def f(x):return x ** 2

3 初始化种群

def initialize_population(population_size, chromosome_length):return [bin(random.randint(0, 31))[2:].zfill(chromosome_length) for _ in range(population_size)]

  生成指定大小的种群,每个个体都是一个长度为 chromosome_length (本实验为5)的二进制字符串,代表一个取值范围在 0 到 31 之间的整数。函数可以拆分为:

def initialize_population(size):return [encode(random.randint(0, 31)) for _ in range(size)]
  • 染色体编码函数 encode(x)
def encode(x):return bin(x)[2:].zfill(5)

  将整数 x 编码成一个长度为 5 的二进制字符串。内置的 bin() 函数将整数转换为二进制字符串,然后使用 zfill() 函数填充到长度为 5。

4. 计算适应度

def evaluate_individual(individual):x = int(individual, 2)return f(x)def evaluate_population(population):return [evaluate_individual(individual) for individual in population]
  • evaluate_individual函数计算单个个体的适应度,将个体的二进制编码转换为十进制数x,然后计算目标函数f(x)的值作为适应度;
  • evaluate_population函数遍历整个种群,计算每个个体的适应度,返回一个包含所有个体适应度值的列表。

5. 选择操作:轮盘赌选择

def selection(population, fitness_values):total_fitness = sum(fitness_values)# 计算每个个体被选中的概率probabilities = [fitness / total_fitness for fitness in fitness_values]# print("\t选择概率: {}".format(probabilities))selected_population = []for _ in range(len(population)):selected_individual = random.choices(population, weights=probabilities)[0]# print("\t被选个体: {}".format(selected_individual))selected_population.append(selected_individual)return selected_population

  从轮盘赌选择的机制中可以看到,较优染色体的P值较大,被选择的概率就相对较大。但由于选择过程具有随机性,并不能保证每次选择均选中这些较优的染色体,因此也给予了较差染色体一定的生存空间。

点击【计算智能】遗传算法(二):基本遗传算法在优化问题中的应用【实验】——古月居可查看全文

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

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

相关文章

从0构建一款appium-inspector工具

上一篇博客从源码层面解释了appium-inspector工具实现原理,这篇博客将介绍如何从0构建一款简单的类似appium-inspector的工具。如果要实现一款类似appium-inspector的demo工具,大致需要完成如下六个模块内容 启动 Appium 服务器连接到移动设备或模拟器启…

vue 中 使用腾讯地图 (动态引用腾讯地图及使用签名验证)

在设置定位的时候使用 腾讯地图 选择地址 在 mounted中引入腾讯地图: this.website.mapKey 为地图的 key // 异步加载腾讯地图APIconst script document.createElement(script);script.type text/javascript;script.src https://map.qq.com/api/js?v2.exp&…

SS8812T替代DRV8812的国产双通道H桥电机驱动芯片

由工采网代理的SS8812T是一款国产双通道H桥电机驱动芯片;该芯片为打印机和其它电机一体化应用提供一种双通道集成电机驱动方案;可Pin-to-Pin兼容替代DRV8812,可广泛应用于POS、打印机、安防相机、办公自动化设备、游戏机、机器人等。 产品描述…

Vue.js 案例——商品管理

一.需要做出的效果图&#xff1a; 二.实现的步骤 首先&#xff0c;先建一个项目&#xff0c;命名Table&#xff0c;在Table项目中的components里新建一个MyTable.vue文件。 第二步&#xff0c;在原有的 HelloWorld.vue中写入代码。 HelloWorld.vue代码如下&#xff1a; <…

KumiaoQQ机器人框架源码

源码介绍 酷喵机器人框架基于PC协议与MGCH的结合&#xff0c;MGCH即 MiraiGO-CQhttp&#xff08;代码类型&#xff1a;易语言&#xff09;基本的API功能已经实现&#xff0c;具体可自测&#xff08;教程/日志/说明文本已附带&#xff09;开放源码仅供参考学习交流&#xff0c;…

远超美国!中国AI专利数量全球第一!商汤推出面向C端用户大模型“Vimi”,可生成分钟级视频!|AI日报

文章推荐 苹果获得OpenAI董事会观察员职位&#xff01;Runway正筹集新一轮融资&#xff0c;估值40亿美元&#xff01;&#xff5c;AI日报 AI基准测评&#xff08;下&#xff09;&#xff1a;视频生成、代码能力、逻辑推理&#xff0c;AI是否已经超越人类&#xff1f; 联合国…

【linux高级IO(一)】理解五种IO模型

&#x1f493;博主CSDN主页:杭电码农-NEO&#x1f493;   ⏩专栏分类:Linux从入门到精通⏪   &#x1f69a;代码仓库:NEO的学习日记&#x1f69a;   &#x1f339;关注我&#x1faf5;带你学更多操作系统知识   &#x1f51d;&#x1f51d; Linux高级IO 1. 前言2. 重谈对…

kubernetes dashboard安装

1.查看符合自己版本的kubernetes Dashboard 比如我使用的是1.23.0版本 https://github.com/kubernetes/dashboard/releases?page5 对应版本 kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v2.5.1/aio/deploy/recommended.yaml修改对应的yaml,…

adb不插usb线通过wifi调试

说起做手机开发也有好多年了&#xff0c;说来惭愧&#xff0c;我最近才知道安卓手机是可以不插数据线进行开发调试的。起因是公司近期采购了一批安卓一卡通设备&#xff0c;需要对其进行定制开发APP,但是由于我插USB调试发现没有反应。通过询问厂家才知道可以通过WIFI进行调试。…

请注意,以下这几种操作都会导致流量卡被停用!

最近一段时间&#xff0c;小编经常收到一些反馈&#xff0c;明明是刚办理的手机号还没有用几天就被停用了&#xff0c;今天&#xff0c;这篇文章我们要了解就是手机号被停用的问题。 ​ 对于新办理的手机号会被停用这个问题&#xff0c;主要还是因为运营商为了防止电话诈骗&…

java数据结构集合复习之包装类和泛型

前言: 这是我最一年学习java的一部分的回顾总结 1.包装类 在Java中&#xff0c;由于基本类型不是继承自Object&#xff0c;为了在泛型代码中可以支持基本类型&#xff0c;Java给每个基本类型都对应了一个包装类型。 1.1基本数据类型和对应的包装类 ----—基本数据类型包装类…

ubuntu软件源的两种格式和环境变量

1. ubuntu的/etc是什么目录&#xff1f; 在Ubuntu操作系统中&#xff0c;/etc/是一个特殊的目录&#xff0c;它包含系统的配置文件。这些配置文件用于设置各种系统和应用程序的参数和选项。 一般来说&#xff0c;用户可以在这个目录下找到各种重要的配置文件&#xff0c;如网络…

Web3 ETF的主要功能

Web3 ETF的主要功能可以概括为以下几点&#xff0c;Web3 ETF仍是一项新兴投资产品&#xff0c;其长期表现仍存在不确定性。投资者在投资Web3 ETF之前应仔细研究相关风险&#xff0c;并做好充分的风险评估。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xf…

商务办公优选!AOC Q27E3S2商用显示器,打造卓越新体验!

摘要&#xff1a;助办公室一族纵横职场&#xff0c;实现高效舒适办公&#xff01; 在日常商务办公中&#xff0c;对于办公室一族来说总有太多“难难难难难点”&#xff1a;工作任务繁琐&#xff0c;熬夜加班心力交瘁、长时间伏案工作导致颈椎、眼睛等出现问题&#xff0c;职业…

BBA车主,千万别去试驾问界M9

文 | AUTO芯球 作者 | 雷慢&响铃 我劝你啊&#xff0c;千万别去试驾问界M9&#xff0c; 不然啊&#xff0c;可能1个小时50万就没了&#xff0c; 不信你看这个“大冤种”&#xff0c; 他曾经发誓打死不买电车&#xff0c; 考虑了三、四年换宝马X5&#xff0c; 结果谈完…

前端面试题5(前端常见的加密方式)

前端常见的加密方式 在前端进行数据加密主要是为了保护用户的隐私和提升数据传输的安全性。前端数据加密可以采用多种方法&#xff0c;以下是一些常见的加密技术和方法&#xff1a; 1. HTTPS 虽然不是直接的前端加密技术&#xff0c;但HTTPS是保障前端与后端数据传输安全的基…

关于MCU-Cortex M7的存储结构(flash与SRAM)

MCU并没有DDR&#xff0c;所以他把代码存储在flash上&#xff0c;临时变量和栈运行在SRAM上。之所以这么做是因为MCU的cpu频率很低&#xff0c;都是几十MHZ到一二百MHZ&#xff0c;flash的读取速度能够满足cpu 的取指需求&#xff0c;但flash 的写入速度很慢&#xff0c;所以引…

刚办理的手机号被停用,你可能遇到这些问题了!

很多朋友都会遇到手机号被停用的情况&#xff0c;那么你知道你的手机号为什么会被停用吗&#xff1f;接下来&#xff0c;关于手机号被停用的问题&#xff0c;跟着小编一块来了解一下吧。 ​停机的两种形态&#xff1a; 1、第一个是局方停机&#xff0c;即语音、短信和流量都不…

xmind2testcase工具将测试用例从Xmind转为CSV导入禅道

使用xmind编写测试用例&#xff0c;使用xmind2testcase工具将测试用例从Xmind转为CSV导入禅道&#xff0c;便于管理。 1.工具准备 第一步&#xff1a;安装python 第二步&#xff1a;安装xmind2testcase工具 运行-cmd-打开命令提示符弹窗&#xff0c;输入安装命令 安装命令&…

意图数据集HWU、Banking预处理

当谈到意图数据集时&#xff0c;HWU、Banking和Clinc是三个常见的数据集。以下是关于这三个数据集的介绍&#xff1a; 目录 一、数据集介绍 HWU数据集 Banking数据集 Clinc数据集 二、数据集预处理 数据处理 数据存储 数据类别分析 句子长度统计 一、数据集介绍 HW…