matlab遗传算法(GA)详解(一)算法入门

2023-11-20

遗传算法(Genetic Algorithm, GA)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解(所找到的解是全局最优解)的方法。

参数编码、初始群体的设定、适应度函数的设计、遗传操作设计、控制参数设定五个要素组成了遗传算法的核心内容。

 1)种群初始化。我们需要首先通过随机生成的方式来创造一个种群,一般该种群的数量为100~500,这里我们采用二进制将一个染色体(解)编码为基因型。随后用进制转化,将二进制的基因型转化成十进制的表现型。

2)适应度计算(种群评估)。这里我们直接将目标函数值作为个体的适应度。

3)选择(复制)操作。根据种群中个体的适应度大小,通过轮盘赌等方式将适应度高的个体从当前种群中选择出来。其中轮盘赌即是与适应度成正比的概率来确定各个个体遗传到下一代群体中的数量。

      具体步骤如下:

     (1)首先计算出所有个体的适应度总和Σfi。

     (2)其次计算出每个个体的相对适应度大小fi/Σfi,类似于softmax。

     (3)再产生一个0到1之间的随机数,依据随机数出现在上述哪个概率区域内来确定各个个体被选中的次数。

4)交叉(交配)运算。该步骤是遗传算法中产生新的个体的主要操作过程,它用一定的交配概率阈值(pc,一般是0.4到0.99)来控制是否采取单点交叉,多点交叉等方式生成新的交叉个体。

     具体步骤如下:

     (1)先对群体随机配对。

     (2)再随机设定交叉点的位置。

     (3)再互换配对染色体间的部分基因。 

5)变异运算。该步骤是产生新的个体的另一种操作。一般先随机产生变异点,再根据变异概率阈值(pm,一般是0.0001到0.1)将变异点的原有基因取反。

6)终止判断。如果满足条件(迭代次数,一般是200~500)则终止算法,否则返回step2。

                   

 

我们首先从函数出发,既然是寻找全局最优解,我们可以想象一个多元函数的图像。遗传算法中每一条染色体,对应着遗传算法的一个解决方案,一般我们用适应性函数(fitness function)来衡量这个解决方案的优劣。所以从一个基因组到其解的适应度形成一个映射。可以把遗传算法的过程看作是一个在多元函数里面求最优解的过程。可以这样想象,这个多维曲面里面有数不清的“山峰”,而这些山峰所对应的就是局部最优解。而其中也会有一个“山峰”的海拔最高的,那么这个就是全局最优解。而遗传算法的任务就是尽量爬到最高峰,而不是陷落在一些小山峰。(另外,值得注意的是遗传算法不一定要找“最高的山峰”,如果问题的适应度评价越小越好的话,那么全局最优解就是函数的最小值,对应的,遗传算法所要找的就是“最深的谷底”)

                                                     

我们从一元函数出发,已知这样一个函数:

                                         

 

在matlab下绘制该函数图像 我们可以发现

x=-1:0.01:2; %从-1到2 每隔0.01取一个点绘制图像
y = x.*sin(10*pi*x) + 2; 
plot(x,y)

我们可以发现

             

我们尝试寻找这个函数在定义域内的最高点和最低点,可以尝试下列几种方法:

既然我们把函数曲线理解成一个一个山峰和山谷组成的山脉。那么我们可以设想所得到的每一个解就是一只袋鼠,我们希望它们不断的向着更高处跳去,直到跳到最高的山峰。所以求最大值的过程就转化成一个“袋鼠跳”的过程。

下面介绍介绍“袋鼠跳”的几种方式。

  • 爬山算法:一只袋鼠朝着比现在高的地方跳去。它找到了不远处的最高的山峰。但是这座山不一定是最高峰。这就是爬山算法,它不能保证局部最优值就是全局最优值。

  • 模拟退火:袋鼠喝醉了。它随机地跳了很长时间。这期间,它可能走向高处,也可能踏入平地。但是,它渐渐清醒了并朝最高峰跳去。这就是模拟退火算法。

  • 遗传算法:有很多袋鼠,它们降落到喜玛拉雅山脉的任意地方。这些袋鼠并不知道它们的任务是寻找珠穆朗玛峰。但每过几年,就在一些海拔高度较低的地方射杀一些袋鼠。于是,不断有袋鼠死于海拔较低的地方,而越是在海拔高的袋鼠越是能活得更久,也越有机会生儿育女。就这样经过许多年,这些袋鼠们竟然都不自觉地聚拢到了一个个的山峰上,可是在所有的袋鼠中,只有聚拢到珠穆朗玛峰的袋鼠被带回了美丽的澳洲。

 而这里我们使用的就是遗传算法来解决这个问题,首先我们使用matlab中的ga()函数来直接寻找到答案。

关于ga函数就是将上面的算法思想进行封装成的一个函数

首先创建一个函数 一个脚本

在函数中我们定义目标函数

function y = simple_fitness(x)

y = x*sin(10*pi*x)+2

end

在函数中我们使用ga算法求解

ObjectiveFunction = @simple_fitness;
nvars = 1;%变量个数
LB = [-1]%定义域下限
UB = [2]%定义域上限

[x,fval] = ga(ObjectiveFunction,nvars,[],[],[],[],LB,UB)%调用ga函数

这里要注意ga算法默认的全局最优解是全局的最小值 我们这里先求出最小值 

本次遗传算法得出在1.9505有最小值0.0497

 但是这个只是预测值 与真实值不同 每次遗传迭代的结果也是不同的 下次迭代结果有可能不是这个数值

Matlab工具箱函数 ga 是求最小值,所有优化工具箱函数都是求最小值,你如果要求最大值,把目标函数取负,然后求得最小值实际上就是原始目标函数的最大值了。这也是为什么matlab里所有优化工具箱函数都是求最小值了

修改目标函数为

function y = simple_fitness(x)

y = -x*sin(10*pi*x)-2

end

得到最大值是在1.6506处取得的3.6503 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

matlab遗传算法(GA)详解(一)算法入门 的相关文章

  • c语言中+ =和=+有什么区别

    点击上方蓝字关注我 了解更多咨询 c语言中 和 有什么区别 区别在于 是简写 a 1就是a a 1 并不是简写 a a直接对a的赋值 符号代表的是正负 完全可以省略不写 即a b其实就是a b 在用C 编程时 我经常混淆 和 前者实际上是我
  • 数学建模笔记(八):微分方程的应用(偏微分方程)

    文章目录 一 微分方程概述 1 什么是微分方程 2 求解方法 一 求精确解 二 求数值解 近似解 三 定性理论方法 3 建立微分模型的方法 一 根据定理规律列方程 二 微元分析法 三 模拟近似法 4 适用问题 5 常见动态模型 二 观众厅地
  • k-Means——经典聚类算法实验(Matlab实现)

    聚类算法 k Means实验 k 平均 k Means 也被称为k 均值 是一种得到最广泛使用的聚类算法 1 k Means算法以k为参数 把n个对象分为k个簇 使得簇内具有较高的相似度 实验目的 了解常用聚类算法及其优缺点 掌握k Mea
  • 为不同的调制方案设计一个单载波系统(映射器-信道-去映射器)(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 本代码为不同的调制方案 BPSK QPSK
  • 卡尔曼滤波算法 C语言实现 示例

    1 概念 卡尔曼滤波 Kalman filtering 是一种利用 k时刻 状态预测值 先验估计值 k 1时刻 状态最优估计值 后验估计值 k时刻 状态预测协方差 先验预测协方差 真实值与预测值之间的协方差 k时刻 状态最优估计协方差 后验
  • 【模型融合】集成学习(boosting, bagging, stacking)原理介绍、python代码实现(sklearn)、分类回归任务实战

    文章目录 概览 boosting bagging Stacking 投票 平均 Stack 代码实现 1 分类 1 0 数据集介绍 1 1 boosting 1 2 bagging 1 3 stacking 2 回归 2 0 数据集介绍 s
  • 2020美赛F奖论文(四):模拟退火算法驱动的结构策略设计

    上接 2020美赛F奖论文 三 足球团队指标和基于机器学习的球队表现预测 全文 2020美赛F奖论文 一 摘要 绪论和模型准备 2020美赛F奖论文 二 传球网络模型 PNM 的建立和影响因子分析 2020美赛F奖论文 三 足球团队指标和基
  • 全国大学生数学建模竞赛——大赛介绍与赛后总结

    全国大学生数学建模竞赛 训练过程及赛后总结 前言 今天是2018年9月18日 一个特殊的日子 距离全国大学生数学建模大赛已经过去两天了 三天两夜的比赛 每天晚上几乎做到凌晨 确实很辛苦 但是现在回过头来看看 无论成绩如何 一切的辛苦与努力都
  • 时间序列预测之ARMA、ARIMA序列及季节性序列matlab实现

    ARMA是一种平稳时间序列模型 即均值和协方差不随时间的平移而改变 ARMA有三种类型 AR序列 MA序列 ARMA序列 但是由于ARMA只能处理平稳序列 而现实中的问题往往有趋势性或周期性等 为了得到平稳序列 我们对数据进行差分运算 使得
  • C++连接sqlserver

    项目结构 ConsoleApplication cpp include
  • 数学建模的六个步骤

    一 模型准备 了解问题的实际背景 明确其实际意义 掌握对象的各种信息 以数学思路来解释问题的精髓 数学思路贯彻问题的全过程 进而用数学语言来描述问题 要求符合数学理论 符合数学习惯 清晰准确 理解实际问题后 搜集资料 快速阅读和理解参考文献
  • 数学建模4 论文写作排版和技巧

    文字 标题一 四号黑体 标题二 三 小四号黑体 正文 宋体小四 行距1 5 标题前后空0 5行 英文和数字使用Times New Roman 小四 包括表格中的内 表头在表格上方 需写成 表1 什么什么表 黑体小五加粗 居中 图名在图下 需
  • 权重计算方法三:变异系数法(Coefficient of Variation)

    目录 1 原理简介 2 步骤详解 2 1 原始数据收集 2 2 指标数据正向化 2 3 数据标准化 消除量纲 2 4 计算变异系数 2 5 计算权重及得分 3 案例分析 3 1 获取原始数据 3 2 指标正向化 3 3 数据标准化 3 4
  • 【数学建模笔记 24】数学建模的时间序列模型

    24 时间序列模型 定义 时间序列是按时间顺序排列的 随时间变化且相互关联的数据序列 分析时间序列的方法构成数据分析的一个重要领域 即时间序列分析 一个时间序列往往是以下几类变化形式的叠加 长期趋势变动 T t T t Tt 朝一定方向的变
  • 【数学建模】数据处理问题

    一 插值与拟合 常用于数据的补全以及趋势分析 1 插值 总的思想 就是利用函数f x 若干已知点的函数值 求出适当的特定函数g x 这样f x 其他未知点上的值 就可以用g x 在这一点的值来近似 这种通过已知求未知的方法称为 插值 插值方
  • 建模方法(十)-灰色预测模型GM(1,1)

    引言 灰色预测的主要特点是模型使用的不是原始数据序列 而是生成的数据序列 其核心体系是灰色模型 Grey Model 简称GM 即对原始数据作累加生成 或其它方法生成 得到近似的指数规律再进行建模的方法 灰色预测模型对于不同问题采用不同模型
  • 数模培训第二周——图论模型

    图论中最短路算法与程序实现 图论中的最短路问题 包括无向图和有向图 是一个基本且常见的问题 主要的算法有Dijkstra算法和Floyd算法 Floyd算法 简介 Floyd Warshall算法 英语 Floyd Warshall alg
  • 2023年小美赛认证杯C题:雪崩预防(Avalanche Prevention)思路模型代码解析

    2023年小美赛认证杯C题 雪崩预防 Avalanche Prevention 请电脑打开本文链接 扫描下方名片中二维码 获取更多资料 一 问题重述 雪崩是一种极其危险的现象 如今 我们对雪崩形成的过程有着很好的理解 然而 我们仍然无法详细
  • 【老生谈算法】matlab实现基于粒子群算法的多目标搜索算法——多目标搜索算法

    Matlab实现基于粒子群算法的多目标搜索算法 1 文档下载 本算法已经整理成文档如下 有需要的朋友可以点击进行下载 说明 文档 点击下载 本算法文档 老生谈算法 matlab实现基于粒子群算法的多目标搜索算法 doc 更多matlab算法
  • 2024年华数杯国际赛B题:光伏发电功率 思路模型代码解析

    2024年华数杯国际赛B题 光伏发电功率 Photovoltaic Power 一 问题描述 中国的电力构成包括传统能源发电 如煤 油和天然气 可再生能源发电 如水电 风能 太阳能和核能 以及其他形式的电力 这些发电模式在满足中国对电力的巨

随机推荐

  • vue启动报错vue-cli-service: command not found

    要配置环境变量以便能够在任意位置使用 Vue CLI 你可以按照以下步骤操作 确保已经全局安装了 Vue CLI 如果尚未安装 请使用以下命令进行全局安装 Copy Code npm install g vue cli 打开命令行终端 并输
  • vue实现拍照人脸识别功能带人脸选中框

    前言 实现打开摄像头 并识别人脸 实现效果 实现步骤 一 安装 1 官网下载 tracking js 的代码包官网入口 2 npm下载 执行命令 cnpm install tracking save 二 demo案例代码
  • nexus扩容后,代理功能出错,重启失败原因排查

    用nexus做仓库 其中有yum maven docker helm 当时搭建的时候觉得100g磁盘空间够用了 结果后期大家都在使用 不到俩月就磁盘占满了 无奈知道将虚拟机的磁盘扩容 扩容后nexus页面貌似一切正常 偶然发现 yum in
  • Spring Boot笔记

    文章目录 一 Spring Boot 入门 1 Spring Boot 简介 2 微服务 3 环境准备 1 MAVEN设置 2 IDEA设置 4 Spring Boot HelloWorld 1 创建一个maven工程 jar 2 导入sp
  • 在有机器学习和深度学习的基础上,如何自学AutoML算法?

    作者 FedAI联邦学习 链接 https www zhihu com question 334021426 answer 840727058 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 AutoML技术
  • POI实现Word文件转PDF

    需求 采用spire doc生成word文件后 需要加一个预览PDF的功能 可以直接采用POI对docx文件进行转换处理 public static void main String args throws Exception String
  • 遗传算法的有趣实践

    源码 先放上我的源码链接 https github com AIjugg Genetic Algorithm git 自己思考加纯手写的代码 有兴趣的同学可以拿去玩玩 前言 生物进化是一个有趣的话题 人是怎么从人猿进化到的人 长颈鹿的脖子为
  • 基于Java SSM+layui+mysql实现的图书借记管理系统源代码+数据库

    介绍 本项目使用的技术栈是SSM layui mysql 服务器使用的是tomcat 其中书籍图片存放的位置需要先在tomcat根目录下conf setting xml中配置虚拟路径 本项目配置的是D upload 完整代码下载地址 图书借
  • java mapper.readtree_java - 杰克逊的readValue和readTree:何时使用哪个? - 堆栈内存溢出...

    我刚刚开始使用Jackson JSON库 杰克逊是一个非常强大的库 但它有一个非常广泛的API 很多事情可以通过多种方式完成 这使得很难在杰克逊找到自己的方式 如何知道什么是正确 最好的做事方式 我为什么要使用这个解决方案 String j
  • 笔试题8:一些常见的转义字符

    a 响铃 b 退格 f 换页 n 换行 r 回车 t 水平制表 v 垂直制表 反斜杠 文号字符 单引号字符 双引号字符 0 空字符 Null ddd 任意字符 三位八进制数 xhh 任意字符二位十进制数
  • 悟空CRM / 72crm-11.0-Spring部署

    目录 悟空CRM部署 悟空CRM目录结构 悟空CRM使用的主要技术栈 使用说明 一 前置环境 二 JDK1 8 Maven3 5安装 三 安装Mysql数据库 四 安装Elasticsearch 6 8 6 五 安装Redis 六 Naco
  • 如何实现Linux系统和Windows系统之间的文件传输

    一 FTP的概念 FTP服务 用来传输文件的协议 FTP是一种上传和下载用的软件 用户可以通过它把自己的PC机与运行FTP协议的服务器相连 访问服务器上的程序和信息 与大多数Internet服务一样 FTP也是一个客户机 服务器系统 用户通
  • 物联网产业到2023年连接数将突破20亿

    导读 随着经济社会数字化转型和智能升级步伐加快 物联网逐渐成为新型基础设施的重要组成部分 近日 工信部等8部门联合印发 物联网新型基础设施建设三年行动计划 2021 2023年 下称 行动计划 明确到2023年底 在国内主要城市初步建成物联
  • web服务器推送技术

    传统模式的 Web 系统以客户端发出请求 服务器端响应的方式工作 不能满足很多现实应用的需求 譬如 监控系统 后台硬件温度 电压发生变化 即时通信系统 其它用户登录 发送信息 即时报价系统 后台数据库内容发生变化 即时信息系统 微博 说说实
  • leetcode -------414. 第三大的数 C语言版本

    目录 题目 解题思路 图解 代码 题目 414 第三大的数 给你一个非空数组 返回此数组中 第三大的数 如果不存在 则返回数组中最大的数 示例 1 输入 3 2 1 输出 1 解释 第三大的数是 1 示例 2 输入 1 2 输出 2 解释
  • STL list使用

    List 容器 list是C 标准模版库 STL Standard Template Library 中的部分内容 实际上 list容器就是一个双向链表 可以高效地进行插入删除元素 使用list容器之前必须加上
  • VMware--配置php debug环境之PHPStudy+VSCode Xdebug php调试

    目录 1 win配置php环境 1 1 配置PHPStudy 1 1 1 下载phpstudy 1 1 2 配置phpstudy 1 1 3 测试phpstudy是否配置完成 1 2 配置环境变量 1 2 1 打开环境变量 添加配置 1 2
  • OpenWrt 学习记录

    OpenWrt 学习记录 ssh setting CodePath review Makefile CURDIR MAKEFILE LIST ssh setting keygen ssh keygen t rsa C hugh win10W
  • error Missing “key“ prop for element in array react/jsx-key

    react遇到一个奇怪的问题 error Missing key prop for element in array react jsx key 检查了jsx中使用map的 都定义了key div otherList map item an
  • matlab遗传算法(GA)详解(一)算法入门

    遗传算法 Genetic Algorithm GA 是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型 是一种通过模拟自然进化过程搜索最优解 所找到的解是全局最优解 的方法 参数编码 初始群体的设定 适应度函数的设计 遗传