Matlab多种群遗传算法

目录

  • Matlab多种群遗传算法
    • 准备
    • 多种群遗传算法
      • 种群初始化和计算初始种群适应度
      • 计算适应度
      • 单种群遗传算法
      • 移民
      • 人工选择
      • 记录最优解
      • 算法计算结果
    • 代码地址
    • 参考文章

准备

在编写自己的代码之前应该了解的是算法的基本结构,具体可参考我之前的文章大纲或者这里简单函数优化亦或者是更为进阶的非线性规划问题和TSP问题
文章虽然简单,但是也能了解基本该设置的参数与具体的算法结构。

多种群遗传算法

普通的遗传算法虽然也能解决一些简单的问题,但是具有很多的缺陷与不足,类似于早熟问题:种群中的所有个体过早的进化为同一状态而停止进化。
在传统的遗传算法上添加:

  • 多种群不同的控制参数,实现不同的搜索目的;
  • 移民算子实现多种群的共同进化
  • 通过人工选择算子保存各种群每个进化代中的最优个体形成精华种群,并作为判断算法收敛的依据。

本篇文章重点在与对添加内容的描述,基本的遗传算法还请转到之前的文章。
更改简单函数优化中的目标函数:
Max=sin⁡(π⋅xy)+sin⁡(y2)x,y∈[0,2]Max=\sin \left( \pi \cdot xy \right) +\sin \left( y^2 \right) \\ x,y\in \left[ 0,2 \right] Max=sin(π⋅xy)+sin(y2)x,y∈[0,2]
不难观察的是,函数取得最大值为2,x,yx,yx,y满足下列条件
{π⋅xy=k1π2⇒xy=k12y2=k2π2⇒y=k2π2x,y∈[0,2]k1,k2,k3为任意整数\left\{ \begin{array}{l} \pi \cdot xy=\dfrac{k_1\pi}{2}\Rightarrow xy=\dfrac{k_1}{2}\\ \\ y^2=\dfrac{k_2\pi}{2}\Rightarrow y=\sqrt{\dfrac{k_2\pi}{2}}\\ \\ x,y∈\left[ 0,2 \right]\\ \end{array} \right. \,\,\,\,\,\,\,\,k_1,k_2,k_3为任意整数 ⎩⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎧​π⋅xy=2k1​π​⇒xy=2k1​​y2=2k2​π​⇒y=2k2​π​​x,y∈[0,2]​k1​,k2​,k3​为任意整数
选择了谢菲尔德大学的Matlab遗传算法工具箱实现算法。
工具箱的导入极为简单,可以自行在网上下载导入。
由于本文中关于交叉与变异的操作方法与适应度无关,仅在选择操作中的排序与适应度有关,因此排序决定了遗传算法整体的选取值趋向(最大值还是最小值)。

种群初始化和计算初始种群适应度

  • 初始参数设置
clc
clear
close all
%% 定义遗传算法参数
NIND=40;       %个体数目
NVAR=2;         %变量的维数
MAXGEN=10;      %最大遗传代数
PRECI=10;       %变量的二进制位数
GGAP=0.9;       %代沟
MP=10;          %多种群的种群数量
Y_max=0;                                   %最优值
px=0.7+(0.9-0.7)*rand(MP,1);            %交叉概率(0.7,0.9)
pm=0.001+(0.05-0.001)*rand(MP,1);         %变异概率(0.001,0.05)
Scope_individual=[0 0;2 2];            %个体的自变量范围
FieldD=[rep(PRECI,[1,NVAR]);Scope_individual;rep([1;0;1;1],[1,NVAR])]; %区域描述器
Chrom=cell(1,MP);
ObjV=cell(1,MP);
gen=0;                                  %初始遗传代数
gen_keep=0;                             %初始保持代数
MaxObjV=zeros(MP,1);                    %记录精华种群
MaxChrom=zeros(MP,NVAR*PRECI);          %记录精华种群的编码
FitnV=cell(1,MP);
SelCh=cell(1,MP);for i=1:MPChrom{i}=crtbp(NIND,NVAR*PRECI);      %初始种群
end
for i=1:MPX=bs2rv(Chrom{i},FieldD);           %计算初始种群的十进制转换ObjV{i}=Multi_fun(X);
end

这里并未对多种群设置多目标。在前期参数设置阶段中:
将交叉概率与变异概率变换为在相应范围随机变换的向量,代表着各个种群不同的参数。
添加变量的维度,计算得到实际个体的二进制位数为preci⋅nvarpreci\cdot nvarpreci⋅nvar,即将二进制转化为十进制时,十进制维度为nvarnvarnvar。
设置元胞数组独立储存每个种群的个体和适应度。

计算适应度

  • 创建独立的.m文件计算适应度
function ObjV=Multi_fun(X)[m,~]=size(X);ObjV=zeros(m,1);for i=1:mObjV(i,1)=sin(pi*X(i,1)*X(i,2))+sin(X(i,2)^2);end
end

单种群遗传算法

  • 在这一步里,相当于对于所有种群各自独立的进化了一代。
gen=gen+1;for i=1:MPFitnV{i}=ranking(-ObjV{i});                      %分配适应度值SelCh{i}=select('sus',Chrom{i},FitnV{i},GGAP);    %选择SelCh{i}=recombin('xovsp',SelCh{i},px(i));    %重组SelCh{i}=mut(SelCh{i},pm(i));                   %变异X=bs2rv(SelCh{i},FieldD);                       %计算初始种群的十进制转换ObjVSel=Multi_fun(X);                                              %计算目标函数值[Chrom{i},ObjV{i}]=reins(Chrom{i},SelCh{i},1,1,ObjV{i},ObjVSel);   %重新插入end

相关函数的具体讲解参看简单函数优化。虽然都是求最大值,与简单函数优化的过程不同的是,这里并没有在适应度函数内部对优化目标函数进行修改,而是在排序操作上对适应度取了负号,实际与在适应度内部更改效果相同。

移民

  • 用移民操作使得各个种群之间有了联系,也是多种群遗传算法中最重要的一环
[Chrom,ObjV]=Multi_immigration(Chrom,ObjV);                             %移民操作
  • 选取每个种群中最优个体进行移民。 将移民去的种群中的最劣个体替换成移民个体。
  • Multi_immigrationMulti\_immigrationMulti_immigration
function [Chrom,ObjV]=Multi_immigration(Chrom,ObjV)
%%移民算子MP=length(Chrom);for i=1:MP[~,MaxI]=max(ObjV{i});Total_target=i+1;if Total_target>MP;Total_target=mod(Total_target,MP);end   %保证小于MP[~,MinI]=min(ObjV{Total_target});%%目标种群最劣个体替换成源种群最优个体Chrom{Total_target}(MinI,:)=Chrom{i}(MaxI,:);ObjV{Total_target}(MinI,:)=ObjV{i}(MaxI,:);end
end

人工选择

  • 挑选出各个种群的最优个体重新组成一个新的最佳种群
[MaxObjV,MaxChrom]=Artificial_selection(Chrom,ObjV,MaxObjV,MaxChrom);   %人工选择
  • Artificial_selectionArtificial\_selectionArtificial_selection
function [MaxObjV,MaxChrom]=Artificial_selection(Chrom,ObjV,MaxObjV,MaxChrom)
%%人工选择算子MP=length(Chrom);for i=1:MP[MaxY,MaxI]=max(ObjV{i});if MaxY>MaxObjV(i)MaxObjV(i)=MaxY;MaxChrom(i,:)=Chrom{i}(MaxI,:);       %单独构成一个种群,长度与种群数相同endend
end

记录最优解

  • 找到并记录当代最优个体,更新最优解。
 %找出并记录每代最优值Y_current(gen)=max(MaxObjV);    %找到精华种群中最优的个体if Y_current(gen)>Y_max                                                Y_max=Y_current(gen);       %更新最优值gen_keep=0;elsegen_keep=gen_keep+1;        %最优值保持次数加1end

对于总循环而言,考察的是在当前进化的程度,而不是进化的总代数。如果在MAXGEN的大循环中最优值保持不变,说明已经进化到很高程度了,再多的进化也无法撼动当前最优值进化的程度,此时退出进化,得到较优解。

算法计算结果

  • 最优解与最优值

xyxyxy y2y^2y2
0.049980.049980.04998 1.570511.570511.57051
1/21/21/2 π/2\pi/2π/2

对结果进行验证与预测结果一致。

  • 最优值随进化代数变化


在这里只是举了一个简单的例子,哪怕不使用多种群遗传算法,单采用遗传算法也能有较好的结果。重点在于多种群算法对传统遗传算法的改进,具体问题要具体分析。

代码地址

完整代码在 GitHub网站上,如果有条件可以支持一下。现在关注我你就是老粉了

参考文章

本文内容参考下列文章,如有任何问题还请联系该账号

[1]史峰. MATLAB智能算法30个案例分析[M]. 北京航空航天大学出版社, 2011.

Matlab多种群遗传算法相关推荐

  1. MATLAB实战系列(十一)-多种群遗传算法的函数优化算法(附MATLAB代码)

    前言: 本篇博文参考,智能优化算法书籍<MATLAB智能算法30个案例分析(第2版)>,今天要与大家分享的智能算法是多种群遗传算法. 本地MATLAB环境部署 因为后面要介绍的多种群遗传算 ...

  2. 遗传算法系列 | 多种群遗传算法(matlab)

    多种群遗传算法 MPGA 本文是作者遗传算法系列之篇四,前面已经系统地讲解了遗传算法基本原理以及简单应用 系列一 -- 标准遗传算法原理及程序实现 系列二 -- 遗传算法应用于TSP问题 系列三 -- ...

  3. 加速遗传算法 matlab,求加速遗传算法,不是自适应遗传算法

    就是用第一次.第二次进化迭代所产生的优秀个体的变量变化空间, 作为变量新的初始变化区间, 算法进入步 1, 重新运行 SGA ,如此加速循环, 直到最优个体的优化准则函数值小于某一设定值或算法运行达到 ...

  4. 分布式电源优化配置与选址定容MATLAB程序基于遗传算法

    分布式电源优化配置与选址定容MATLAB程序基于遗传算法 (1)该程序为基于遗传算法的分布式电源优化配置与选址定容程序,硕士学位论文源程序,配有该论文. (2)本程序可有效配置分布式电源容量与安装位置 ...

  5. MATLAB实现基于遗传算法/引力搜索算法优化新安江水文模型

    MATLAB实现基于遗传算法/引力搜索算法优化新安江水文模型 1 新安江模型 1.1 新安江模型结构 1.2 模型参数种类及意义 2 新安江模型优化参数 2.1 蒸散发参数: KC.WUM.WLM.C ...

  6. matlab做TSP,基于matlab TSP问题遗传算法的实现

    %TSP问题(又名:旅行商问题,货郎担问题)遗传算法通用matlab程序 %D是距离矩阵,n为种群个数,建议取为城市个数的1~2倍, %C为停止代数,遗传到第 C代时程序停止,C的具体取值视问题的规模 ...

  7. 公式写成matlab代码,大话遗传算法(含Matlab代码)

    一.遗传算法简介 转载自:https://blog.csdn.net/acelit/article/details/78187715 在工程实践中,经常面临多变量.不可微.不连续.有约束等条件下的最优 ...

  8. 双隐藏层BP网络的matlab仿真,求遗传算法优化含有两个隐含层的BP神经网络的matlab程序...

    怎样用遗传算法优化含有两个隐含层的BP神经网络的matlab程序啊,这个代码是错的,可不知道错在哪,求高手帮忙解答,非常感谢! FieldD=[repmat(PRECI,1,N);repmat([-0 ...

  9. 使用matlab写一个遗传算法的路径规划

    遗传算法是一种模拟自然进化的过程来解决优化问题的算法.在路径规划中,遗传算法可以用来寻找最优的路径. 首先,你需要定义一个适应度函数,用来评估每个解决方案的优劣.通常情况下,路径规划中的适应度函数是路 ...

  10. 进化算法框架的介绍及Matlab实现(遗传算法)

    进化算法介绍及实现(遗传算法) 进化算法也可以称为遗传算法.进化算法的求解过程是模拟大自然生物进化的过程,通过"适者生存,劣者 淘汰"的规则不断进化,直到找到最优解或者达到终止条件 ...

最新文章

  1. LIVE预告 | 哈佛大学CS博士徐莉莉:用博弈论保护野生动物
  2. VMplay CEO 艾奇伟:借鉴Docker思路 像投影仪一样将App投到云端
  3. VTK:可视化算法之MarchingCases
  4. php扩展开发1--添加函数
  5. 用户模块开发 分类模块 商品模块 购物车模块
  6. 黑马程序员---面向对象笔记总结
  7. oracle更新blol字段超长,oracle - 将对象值插入表PL / SQL而无需指定属性 - 堆栈内存溢出...
  8. mysql维护计划 自动备份_MysQL windows 下自动备份,同时加入计划任务脚本
  9. Ubuntu14.04环境下配置TFTP服务器
  10. 【BZOJ 1036】树的统计【树链剖分模板】
  11. lcd开机流程图_LCD1602程序代码及显示流程图.doc
  12. C语言中性别比例怎么表示,Problem G: C语言实验--算算男生女生的比例
  13. android hdmi拔插广播,Android drivers/switch驱动详解(用于通过GPIO状态检测耳机、HDMI等的插拔状态)...
  14. 科比,老大1000天
  15. 实例演示使用RDIFramework.NET 框架的工作流组件进行业务流程的定义—请假申请流程-WinForm
  16. tar.gz00 xxx.tar.gz01 xxx.tar.gz02……解压
  17. RxSwift实战经验
  18. GLES2.0中文API-glUseProgram
  19. 小王子(LCA的运用)
  20. 计算机毕业设计ssm高校就业管理系统157v3系统+程序+源码+lw+远程部署

热门文章

  1. 分享188个JS图片效果JS代码,总有一款适合你
  2. Linux下的经典软件-史上最全
  3. 制造业数字化转型-项目案例合集
  4. CImage 载入缓存区图像数据
  5. 单片机原理及接口技术--01什么是单片机
  6. Python处理txt文件
  7. 盘点常用的IDC综合业务、财务及用户管理平台
  8. 科创板在6月的这30天:方邦电子等31家过会并提交注册 新受理28家
  9. 网页设计中文标题h1~h4应用技巧
  10. Creo 6.0软件安装教程|兼容WIN10