1、目标函数介绍
2、遗传算法与程序
3、仿真

1、目标函数介绍

该函数有10个变量,变量的取值范围为[-20,20],这个函数只有一个极小值点,其坐标为x=(0,0,…,0),极小值为0,具体函数形式为下式

2、遗传算法与程序

遗传算法参数
(1)、初始化种群数目为NP=100, 染色体基因维数为10(即基因维数与变量数相等),最大进化代数为G=1000,交叉概率为Pc=0.8,变异概率为Pm=0.1。
(2)、产生初始种群,计算个体适应度值;进行实数编码的选择以及交叉和变异操作。选择和交叉操作采用“君主方案”,即在对群体根据适应度值高低进行排序的基础上,用最优个体与其他偶数位的所有个体进行交叉,每次交叉产生两个新的个体。在交叉过后,对新产生的群体进行多点变异产生子群体,再计算其适应度值,然后和父群体合并,并且根据适应度值进行排序,取前NP个个体为新群体,进行下一次遗传操作。
具体MATLAB实现程序与介绍如下

// 遗传算法程序
%初始化
clear all;                           %清除所有变量
close all;                           %清图
clc;                                 %清屏
D=10;                                %单染色体上的基因数(即10个变量)(每个基因采用10进制)
NP=100;                              %染色体数目(初始化种群的数目)
Xs=20;                               %变量上限
Xx=-20;                              %变量下限
G=1000;                              %最大遗传代数
f=zeros(D,NP);                       %初始种群赋空间 创建一个10*100的0矩阵
nf=zeros(D,NP);                      %子种群赋空间   创建一个10*100的0矩阵
Pc=0.8;                              %交叉概率
Pm=0.1;                              %变异概率
f=rand(D,NP)*(Xs-Xx)+Xx;             %随机获得初始种群(10进制的种群),维数10*100
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%按适应度升序排列
for np=1:NPMSLL(np)=func2(f(:,np));         %计算个染色体的适应度
end
[SortMSLL,Index]=sort(MSLL);         %sort对数组元素按升序排列 SortMSLL放排序后的数 Index放排序后的位置
Sortf=f(:,Index);                    %将适应度按升序排列
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%遗传算法循环
for gen=1:G%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%采用君主方案进行选择交叉操作Emper=Sortf(:,1);                      %君主染色体(即最好的一个)NoPoint=round(D*Pc);                   %每次交叉点的个数   round取整函数PoPoint=randi([1 D],NoPoint,NP/2);     %交叉基因的位置   1-10 8*50矩阵nf=Sortf;%%%50个个体交叉for i=1:NP/2nf(:,2*i-1)=Emper;                 %将所有的奇数项换为君主染色体nf(:,2*i)=Sortf(:,2*i);            %偶数项不变for k=1:NoPointnf(PoPoint(k,i),2*i-1)=nf(PoPoint(k,i),2*i);nf(PoPoint(k,i),2*i)=Emper(PoPoint(k,i));endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%变异操作for m=1:NP                             %对所有个体进行变异for n=1:D                          %每个基因都可能变异r=rand(1,1);if r<Pmnf(n,m)=rand(1,1)*(Xs-Xx)+Xx; %变异操作endendend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%子种群按适应度升序排列for np=1:NP NMSLL(np)=func2(nf(:,np));   end[NSortMSLL,Index]=sort(NMSLL);           NSortf=nf(:,Index);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %产生新种群f1=[Sortf,NSortf];                %子代和父代合并MSLL1=[SortMSLL,NSortMSLL];       %子代和父代的适应度值合并[SortMSLL1,Index]=sort(MSLL1);    %适应度按升序排列Sortf1=f1(:,Index);               %按适应度排列个体SortMSLL=SortMSLL1(1:NP);         %取前NP个适应度值(这个地方有子代变为父代了)Sortf=Sortf1(:,1:NP);             %取前NP个个体trace(gen)=SortMSLL(1);           %历代最优适应度值
end
Bestf=Sortf(:,1)                      %最后最优个体
trace(end)                            %最优值 end为取最后一个值
figure
plot(trace)
xlabel('迭代次数')
ylabel('目标函数值')
title('适应度进化曲线')
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%适应度函数
function result=func2(x)
summ=sum(x.^2);
result=summ;
end

仿真结果如图1所示:

** 图1 遗传算法仿真图**

文章来源

文章来自于智能优化算法及其MATLAB实例(第2版)的例2.2。可能是MATLAB版本的原因,书中的程序无法运行,本文将其进行了改写和具体解释。

基于君主方案的遗传算法程序(带注释)相关推荐

  1. json注释怎么加注释_基于带注释的JSON模式为vuetify UI库生成表单

    json注释怎么加注释 vuetify-jsonschema-form (vuetify-jsonschema-form) Generate forms for the vuetify UI libr ...

  2. Google更新最大的带注释图像数据集,添加本地化叙述

    导语:对注释进行了极大的扩展 近日,Google AI 宣布发布 Open Images V6,和 V5 版本相比,它极大地扩展了 Open Images 数据集的注释,增加了大量新的视觉关系(例如, ...

  3. 【通信原理课程设计】基于MATLAB/Simulink的2ASK数字带通传输系统建模与仿真

    基于MATLAB/Simulink的2ASK数字带通传输系统建模与仿真 目录 基于MATLAB/Simulink的2ASK数字带通传输系统建模与仿真 课程设计要求 方法选择 设计步骤 结果显示与性能分 ...

  4. 遗传算法程序 matlab(转)

    遗传算法程序 matlab( 一) 本程序收集于网络,本人并未运行,如有问题请与作者联系,如有侵权请告之 转载:http://hi.baidu.com/hopeasy/blog/item/c82182 ...

  5. Idea groovy表生成实体类带注释

    Idea groovy表生成实体类带注释 1.点开datasourse,打开idea带的数据库工具,具体添加数据库连接,这里不描述. 这时点击会生成一个poji 这时生成的pojo中是不带中文注释的, ...

  6. 基于复杂方案OWSAP CsrfGuard的CSRF安全解决方案(适配nginx + DWR)

    2019独角兽企业重金招聘Python工程师标准>>> 1.什么是CSRF? 已经有很多博文讲解其过程和攻击手段,在此就不重复了. O(∩_∩)O 不清楚的同学,请自行搜索或按链接去 ...

  7. 34.35.热图(heatmap)、创建带注释的热图、使用辅助函数的代码样式、图像显示、图像插值、将图像数据导入Numpy数组、将numpy数组绘制为图像

    34.热图(heatmap) 34.1.创建带注释的热图 34.2.使用辅助函数的代码样式 35.图像显示 35.1.图像插值 35.2.将图像数据导入Numpy数组 35.3.将numpy数组绘制为 ...

  8. oracle dba笔试,一个好资企业的的oracle DBA面试试题 大家来看看啊 把答案写下来 最好带注释 测试一下 了 最后30分散分 快来啊...

    当前位置:我的异常网» Oracle管理 » 一个好资企业的的oracle DBA面试试题 大家来看看啊 一个好资企业的的oracle DBA面试试题 大家来看看啊 把答案写下来 最好带注释 测试一下 ...

  9. matlab哈明窗带阻,基于matlabFIR低通,高通,带通,带阻滤波器设计.doc

    基于matlabFIR低通,高通,带通,带阻滤波器设计 课 程 设 计 报 告 课程名称: DSP 设计名称:FIR 低通.高通带通和带阻数字滤波器的设计 姓 名: 学 号: 班 级: 指导教师: 起 ...

最新文章

  1. Android 补间动画(Tween Animation)
  2. Django框架之第二篇
  3. 一副耳机的钱,竟让我体验了「元宇宙」办公
  4. 语言模型GPT跨界CV,OpenAI揭示强算力Transformer具有通用性
  5. Maven和Gradle对比
  6. Ubuntu 9.10下载地址
  7. Windows程序设计:MFC 、Winform 和 WPF 比较
  8. 双风扇安装图解_汽车灯光标志图解,汽车灯光标志大全图解
  9. Redis的过期机制
  10. 学习Python,在人工智能的风口抢占未来
  11. 『初识C语言』语法入门详解
  12. python查找文件夹下所有文件_如何用Python实现查找/目录下的文件夹或文件,致谢...
  13. 【前端】CSS使用总结
  14. 最新的SAS SID 2023可用至2023年1月SAS 9.4 SID续订更新sas sid 2022服务器通用版server
  15. Android音视频开发
  16. 50多款 51单片机程序源码 原理图 编程源代码
  17. 《麦肯锡方法》阅读笔记2——探索分析问题的方法
  18. 记录一次CenterOS7中xmrig挖矿病毒的排查测试
  19. 考勤系统需求分析(软件工程)
  20. Eric6与pyqt5学习笔记14 【实战5 百度贴吧离线签到工具】

热门文章

  1. 哪些飞机机型是安全、可信赖的
  2. 鸿蒙2.0设备开发教程】小熊派HarmonyOS 鸿蒙笔记
  3. oracl 查询一年所有的天
  4. 键盘没坏,快捷键可以用,但不能打字
  5. [福建]福建企业的现实与渴望
  6. 直接从数据库中查询数据生成email附件(excel)
  7. 上海交通大学计算机学院录取分数线,上海交通大学
  8. 如何通过分析数据,从而找到最能赚钱的明星产品?--最详细图解波士顿举证模型篇
  9. 单键模式_购买单键或更换整个键盘是否更好?
  10. 教你写博客 快给俺点赞