多种群遗传算法的函数寻优算法

2023-10-29 17:20

本文主要是介绍多种群遗传算法的函数寻优算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

多种群遗传算法的函数寻优算法

  • 多种群遗传算法的介绍
  • 问题与思路
  • 代码
  • 结果显示

多种群遗传算法的介绍

传统的遗传算法是一种借鉴于生物界自然选择和进化机制发展起来的高度并行、随机、自适应的全局优化概率搜索算法。因为优化时不依赖于梯度,具有很强的鲁棒性和全局搜索能力。但是未成熟收敛确实遗传算法中不可忽视的现象,它主要表现为所有个体都区域同一状态而停止进化。

接下来所介绍的多种群遗传算法可以很好地解决这个问题。

多种群遗传算法主要引入了这几个概念。
1.突破SGA仅靠单个种群进行遗传进化的框架,引入多个种群进行全局搜索,不同种群用不同参数,实现不同的搜索目的。2.各种群之间通过移民算子进行联系,实现了多种群协同进化,最优解是多个种群共同进化的结果,3.通过人工算子保留每代中的最优个体,并作为判断收敛的依据。
在这里插入图片描述

问题与思路

在这里插入图片描述
这里是谢尔德工具箱的下载地址,大家可以自行前往gatbx

代码

话不多说,看Matlab代码:

% 多种群遗传算法主函数
clear
clc
nind = 40;
nvar = 1;
preci = 20;
ggap = 0.9;     % 代沟
mp = 10;    % 种群数目
field = [preci;0;1;1;0;1;1];    % 区域描述器
for i = 1:mpchrom{i} = crtbp(nind,nvar*preci);
end
gen = 0;
pc = 0.7 + (0.9-0.7)*rand(mp,1);
pm = 0.001 + (0.05-0.001)*rand(mp,1);
gen0 = 0;
maxgen = 10;
maxy = 0;   % 最优值
% 计算各初始种群的适应度
for i = 1:mpobjv{i} = objf(bs2rv(chrom{i},field));
end
maxobjv = zeros(mp,1);      % 记录精华种群
maxchrom = zeros(mp,preci*nvar);        % 记录精华种群的二进制编码
while gen0 < maxgengen = gen + 1;for i = 1:mp% 各种群的适应度fitnv{i} = ranking(-objv{i});% 选择selch{i} = select('sus',chrom{i},fitnv{i},ggap);% 交叉selch{i} = recombin('xovsp',selch{i},pc(i));% 变异selch{i} = mut(selch{i},pm(i));% 计算子代目标值objvesl = objf(bs2rv(selch{i},field));% 重插入工作[chrom{i},objv{i}] = reins(chrom{i},selch{i},1,1,objv{i},objvesl);end% 移民操作[chrom,objv] = immigrant(chrom,objv);% 人工选择精华种群[maxobjv,maxchrom] = elite(chrom,objv,maxobjv,maxchrom);yy(gen) = max(maxobjv);if yy(gen) > maxymaxy = yy(gen);gen0 = 0;elsegen0 = gen0 + 1;end
end
% 画图
plot(1:gen,yy)
xlabel('进化代数')
ylabel('最优解变化')
title('进化过程')
xlim([1,gen])
% 输出最优解
[y,i] = max(maxobjv);
x = bs2rv(maxchrom(i,:),field);
disp(['最优值为:',num2str(y)])
disp(['对应的自变量取值为:',num2str(x)])function obj = objf(x)
% 目标函数
[row,~] = size(x);
for i = 1:rowobj(i,1) = exp(((x(i,1)-0.1)/0.8)^2)*(sin(5*pi*x(i,1)))^6;
end

这里是谢尔德工具箱的下载地址,大家可以自行前往gatbx

结果显示

在这里插入图片描述
在这里插入图片描述
可以见到,多种群遗传算法对于函数寻优的效果很好,很快就得到收敛找到最优值。相较于传统的遗传算法,一般问题都需要几十代或几百代来说,效果非常好。

这篇关于多种群遗传算法的函数寻优算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/302153

相关文章

pandas使用apply函数给表格同时添加多列

《pandas使用apply函数给表格同时添加多列》本文介绍了利用Pandas的apply函数在DataFrame中同时添加多列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录一、Pandas使用apply函数给表格同时添加多列二、应用示例一、Pandas使用apply函

Java多种文件复制方式以及效率对比分析

《Java多种文件复制方式以及效率对比分析》本文总结了Java复制文件的多种方式,包括传统的字节流、字符流、NIO系列、第三方包中的FileUtils等,并提供了不同方式的效率比较,同时,还介绍了遍历... 目录1 背景2 概述3 遍历3.1listFiles()3.2list()3.3org.codeha

使用Python在PDF中绘制多种图形的操作示例

《使用Python在PDF中绘制多种图形的操作示例》在进行PDF自动化处理时,人们往往首先想到的是文本生成、图片嵌入或表格绘制等常规需求,然而在许多实际业务场景中,能够在PDF中灵活绘制图形同样至关重... 目录1. 环境准备2. 创建 PDF 文档与页面3. 在 PDF 中绘制不同类型的图形python

使用C#导出Excel数据并保存多种格式的完整示例

《使用C#导出Excel数据并保存多种格式的完整示例》在现代企业信息化管理中,Excel已经成为最常用的数据存储和分析工具,从员工信息表、销售数据报表到财务分析表,几乎所有部门都离不开Excel,本文... 目录引言1. 安装 Spire.XLS2. 创建工作簿和填充数据3. 保存为不同格式4. 效果展示5

Python中Namespace()函数详解

《Python中Namespace()函数详解》Namespace是argparse模块提供的一个类,用于创建命名空间对象,它允许通过点操作符访问数据,比字典更易读,在深度学习项目中常用于加载配置、命... 目录1. 为什么使用 Namespace?2. Namespace 的本质是什么?3. Namesp

MySQL中如何求平均值常见实例(AVG函数详解)

《MySQL中如何求平均值常见实例(AVG函数详解)》MySQLavg()是一个聚合函数,用于返回各种记录中表达式的平均值,:本文主要介绍MySQL中用AVG函数如何求平均值的相关资料,文中通过代... 目录前言一、基本语法二、示例讲解1. 计算全表平均分2. 计算某门课程的平均分(例如:Math)三、结合

Python函数作用域与闭包举例深度解析

《Python函数作用域与闭包举例深度解析》Python函数的作用域规则和闭包是编程中的关键概念,它们决定了变量的访问和生命周期,:本文主要介绍Python函数作用域与闭包的相关资料,文中通过代码... 目录1. 基础作用域访问示例1:访问全局变量示例2:访问外层函数变量2. 闭包基础示例3:简单闭包示例4

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

python中的高阶函数示例详解

《python中的高阶函数示例详解》在Python中,高阶函数是指接受函数作为参数或返回函数作为结果的函数,下面:本文主要介绍python中高阶函数的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录1.定义2.map函数3.filter函数4.reduce函数5.sorted函数6.自定义高阶函数