通过MATLAB分别对比二进制编码遗传优化算法和实数编码遗传优化算法

news/2024/11/15 11:33:01/文章来源:https://www.cnblogs.com/softcodes/p/18302238

1.程序功能描述

       通过MATLAB分别对比二进制编码遗传优化算法和实数编码遗传优化算法,对比最优适应度值,平均适应度值以及算法运算效率。

 

2.测试软件版本以及运行结果展示

MATLAB2022a版本运行

 

 

 

3.核心程序

 

%-10~10,初始化种群
Popu    = 6*rand(NUM,dim)-3;
%初始化最优适应度值
Vbest   =-inf;
for i=1:NUM%计算适应度值y(i)=fitness(Popu(i,:));if y(i)>Vbest
Vbest=y(i);
Vopt=Popu(i,:);end
end
%迭代
for t=1:Maxitert%选择p = y/sum(y);q = cumsum(p);%选择个体索引for i=1:NUMtemp       = rand(1);
idx        = find(q>=temp);
Popus(i,:) = Popu(idx(1),:);end%交叉for i=1:NUMif rand(1)<pci1=randi([1,NUM]);i2=randi([1,NUM]);while i1==i2i1=randi([1,NUM]);i2=randi([1,NUM]);endk                 = randi([1,dim]);temp              = Popus(i1,k+1:end);
Popus(i1,k+1:end) = Popus(i2,k+1:end);
Popus(i2,k+1:end) = temp;endend%变异Pm0   = rand(NUM,dim);
Popus = (Pm0>=pm).*Popus + (Pm0<pm).*Pm0;%更新.....................................................
end
figure
plot(1:Maxiter,Vsave0)
hold on
plot(1:Maxiter,Vsave1)
legend('最优适应度','平均适应度')
xlabel('迭代次数')
ylabel('适应度值')
t=toc 
save R1.mat 
0003

  

 

4.本算法原理

       遗传算法是一种基于生物进化原理的优化算法,广泛应用于各种问题,如函数优化、机器学习、图像处理等。在遗传算法中,编码方式是关键的一步,因为它决定了问题的表示方式以及算法的搜索空间。主要有两种编码方式:二进制编码和实数编码。

 

4.1二进制编码遗传优化算法

 

       二进制编码遗传优化算法是一种常见的遗传算法,它将问题的解表示为二进制字符串。在二进制编码中,每个解的每个基因都被编码为一个0或1的二进制数。这种编码方式在许多问题中都很有效,因为它可以很容易地表示离散解空间。

 

      二进制编码遗传优化算法的基本步骤:

 

       初始化:随机生成一组二进制字符串作为初始种群。每个字符串的长度等于问题中决策变量的数量。

 

       适应度评估:计算每个字符串的适应度值,适应度值是根据问题的目标函数来计算的。

 

       选择:根据适应度值选择哪些字符串进入下一代。通常使用轮盘赌选择法或锦标赛选择法等。

 

       交叉(重组):随机选择两个字符串,进行交叉操作,产生新的字符串。交叉操作是通过交换两个字符串的部分基因来完成的。

 

       变异:随机选择一些字符串,对它们的基因进行变异操作,以增加种群的多样性。变异操作是通过随机改变一个基因的值来实现的。

 

       终止条件:当达到预设的迭代次数或找到满足要求的解时,算法终止。

 

4.2实数编码遗传优化算法

 

       实数编码遗传优化算法将问题的解表示为实数字符串。在实数编码中,每个解的每个基因都被编码为一个实数值。这种编码方式在连续问题或具有连续决策变量的混合离散问题中很常见。

 

以下是实数编码遗传优化算法的基本步骤:

 

       初始化:随机生成一组实数字符串作为初始种群。每个字符串的长度等于问题中决策变量的数量。

 

       适应度评估:计算每个字符串的适应度值,适应度值是根据问题的目标函数来计算的。

 

       选择:根据适应度值选择哪些字符串进入下一代。通常使用轮盘赌选择法或锦标赛选择法等。

 

       交叉(重组):随机选择两个字符串,进行交叉操作,产生新的字符串。交叉操作是通过线性组合两个字符串的基因来完成的。

 

       变异:随机选择一些字符串,对它们的基因进行变异操作,以增加种群的多样性。变异操作是通过随机改变一个基因的值来实现的。

 

       终止条件:当达到预设的迭代次数或找到满足要求的解时,算法终止。

 

       二进制编码和实数编码的主要区别在于问题的表示方式不同。二进制编码适用于离散问题,而实数编码适用于连续问题或具有连续决策变量的混合离散问题。此外,由于实数编码使用了实数表示解,因此可以直接对连续空间进行搜索,而二进制编码只能通过离散的搜索空间进行搜索。然而,由于实数编码的搜索空间是连续的,因此可能需要更复杂的搜索策略来找到全局最优解,因为初始种群可能陷入局部最优解中。在某些问题中,实数编码可能比二进制编码更有效,但在其他问题中,二进制编码可能更有效。选择哪种编码方式取决于问题的具体性质和要求。

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

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

相关文章

【CICID】GitHub-Actions-SpringBoot项目部署

目录【CICID】GitHub-Actions-SpringBoot项目部署0 流程图1 创建SprinBoot项目1.1 项目结构1.2 Dockerfile文件2 云服务器环境搭建2.1 安装docker2.2 获取IP、账号、密码3 Github配置3.1 配置密码3.2 创建Action3.2 action代码4 触发5 效果5.1 查看Action信息5.3 云服务器5.3.1…

使用Visual Studio诊断工具检查内存泄漏——订阅Events

参考文章 8 Ways You can Cause Memory Leaks in .NET订阅事件导致内存泄漏的原因 订阅事件后,该对象将保留对你的类的引用。除非你使用不捕获类成员的匿名方法。 防止Event内存泄漏的方法注销订阅事件。 使用弱句柄(weak-handler)模式。 如果可能,请使用匿名函数进行订阅,…

Jetpack Compose(9)——嵌套滚动

自定义 Composable 组件 目录一、Composable 组件渲染流程1.1 组合1.2 布局1.3 绘制二、自定义组合三、自定义布局3.1 LayoutModifier (自定义 View)3.2 Layout (自定义 ViewGroup)3.3 固有特性测量Intrinsic3.3.1 使用内置组件的固有特性测量3.3.2 自定义固有特性测量3.4 …

ACCESS 用普通按钮控制导航窗体-子窗体中的显示目标

Forms!控制面板!NavigationSubform.SourceObject = "目标窗体"注: 在导航窗体的属性面板中不会显示SourceObject属性,但它是真实存在的.

ECMA标准ECMAScript(JavaScript的一个标准)和C#

2024 年 6 月 26 日,第 127 届 ECMA 大会正式批准了 ECMAScript 2024 语言规范,这意味着它现在正式成为最新 ECMAScript 标准。ECMAScript是ECMA标准中最著名的编程语言标准,它定义了JavaScript语言的核心特性。C#语言则是由ECMA国际组织制定的编程语言标准,目前最新的版本…

CAD、GIS与Three.js如何完美结合,实现2D与3D数据可视化的无限可能

CAD、GIS与Three.js是热门的三大软件或技术,如何将三都完美结合起来,实现2D与3D数据可视化的无限可能呢?现状 AutoCAD是全球最流行的CAD软件之一,其生成的DWG文件格式已经成为二维绘图的事实标准格式。然而,由于AutoCAD使用的是私有文件格式,这些文件只能在支持该格式的C…

HSQL 数据库介绍(2)--使用

本文主要介绍 HSQLDB 的基本使用,文中所使用到的软件版本:Java 11.0.22、HSQLDB 2.7.2。 1、进程内模式 直接使用 JDBC 连接数据库即可,如果数据库不存在会自动创建。 1.1、file 数据库@Test public void inProcessFile() throws SQLException {String dbName = "test&…

Tita的OKR:高端制造行业的OKR案例

高端设备制造行业的发展趋势:产业规模持续扩大:在高技术制造业方面,航空、航天器及设备制造业、电子工业专用设备制造等保持较快增长。新能源汽车保持产销双增,新材料新产品生产也高速增长。 标志性装备不断突破:例如,火电机组、核电机组和水电机组单机容量均超百万千瓦,…

Deepfake Day1:Baseline解读

Deepfake Deepfake是一种使用人工智能技术生成的伪造媒体,特别是视频和音频 深度伪造技术(Deepfake)主要可以分为以下几个研究方向:面部交换:专注于在两个人的图像之间执行身份交换。 面部重演:强调转移源运动和姿态。 说话面部生成:专注于在角色生成中实现口型与文本内…

Blog记录

2024-07-13 博客建立 2024-07-14 博客快照

【Unity】自制PolygonCollider2D

防止和UnityEngine的PolygonCollider2D重名,所有类包裹在了我自己定义的名称空间JimDevPack中,名称空间的声明部分在文章代码中略去了。定义PolygonCollider2D和基类 基类 public class Collider2D : MonoBehaviour {}PolygonCollider2D public class PolygonCollider2D : Co…

C++11 标准库 线程库thread梳理

目录<thread>this_thread命名空间1. get_id()2. sleep_for()3. sleep_until()4. yield()thread类构造函数:类方法1. get_id()2. join()3. detach()4. joinable()5. operator=6. hardware_concurrency(static)多线程的两种计算场景 <thread> this_thread命名空间 在…