基于君主方案的遗传算法程序(带注释)
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版本的原因,书中的程序无法运行,本文将其进行了改写和具体解释。
基于君主方案的遗传算法程序(带注释)相关推荐
- json注释怎么加注释_基于带注释的JSON模式为vuetify UI库生成表单
json注释怎么加注释 vuetify-jsonschema-form (vuetify-jsonschema-form) Generate forms for the vuetify UI libr ...
- Google更新最大的带注释图像数据集,添加本地化叙述
导语:对注释进行了极大的扩展 近日,Google AI 宣布发布 Open Images V6,和 V5 版本相比,它极大地扩展了 Open Images 数据集的注释,增加了大量新的视觉关系(例如, ...
- 【通信原理课程设计】基于MATLAB/Simulink的2ASK数字带通传输系统建模与仿真
基于MATLAB/Simulink的2ASK数字带通传输系统建模与仿真 目录 基于MATLAB/Simulink的2ASK数字带通传输系统建模与仿真 课程设计要求 方法选择 设计步骤 结果显示与性能分 ...
- 遗传算法程序 matlab(转)
遗传算法程序 matlab( 一) 本程序收集于网络,本人并未运行,如有问题请与作者联系,如有侵权请告之 转载:http://hi.baidu.com/hopeasy/blog/item/c82182 ...
- Idea groovy表生成实体类带注释
Idea groovy表生成实体类带注释 1.点开datasourse,打开idea带的数据库工具,具体添加数据库连接,这里不描述. 这时点击会生成一个poji 这时生成的pojo中是不带中文注释的, ...
- 基于复杂方案OWSAP CsrfGuard的CSRF安全解决方案(适配nginx + DWR)
2019独角兽企业重金招聘Python工程师标准>>> 1.什么是CSRF? 已经有很多博文讲解其过程和攻击手段,在此就不重复了. O(∩_∩)O 不清楚的同学,请自行搜索或按链接去 ...
- 34.35.热图(heatmap)、创建带注释的热图、使用辅助函数的代码样式、图像显示、图像插值、将图像数据导入Numpy数组、将numpy数组绘制为图像
34.热图(heatmap) 34.1.创建带注释的热图 34.2.使用辅助函数的代码样式 35.图像显示 35.1.图像插值 35.2.将图像数据导入Numpy数组 35.3.将numpy数组绘制为 ...
- oracle dba笔试,一个好资企业的的oracle DBA面试试题 大家来看看啊 把答案写下来 最好带注释 测试一下 了 最后30分散分 快来啊...
当前位置:我的异常网» Oracle管理 » 一个好资企业的的oracle DBA面试试题 大家来看看啊 一个好资企业的的oracle DBA面试试题 大家来看看啊 把答案写下来 最好带注释 测试一下 ...
- matlab哈明窗带阻,基于matlabFIR低通,高通,带通,带阻滤波器设计.doc
基于matlabFIR低通,高通,带通,带阻滤波器设计 课 程 设 计 报 告 课程名称: DSP 设计名称:FIR 低通.高通带通和带阻数字滤波器的设计 姓 名: 学 号: 班 级: 指导教师: 起 ...
最新文章
- Android 补间动画(Tween Animation)
- Django框架之第二篇
- 一副耳机的钱,竟让我体验了「元宇宙」办公
- 语言模型GPT跨界CV,OpenAI揭示强算力Transformer具有通用性
- Maven和Gradle对比
- Ubuntu 9.10下载地址
- Windows程序设计:MFC 、Winform 和 WPF 比较
- 双风扇安装图解_汽车灯光标志图解,汽车灯光标志大全图解
- Redis的过期机制
- 学习Python,在人工智能的风口抢占未来
- 『初识C语言』语法入门详解
- python查找文件夹下所有文件_如何用Python实现查找/目录下的文件夹或文件,致谢...
- 【前端】CSS使用总结
- 最新的SAS SID 2023可用至2023年1月SAS 9.4 SID续订更新sas sid 2022服务器通用版server
- Android音视频开发
- 50多款 51单片机程序源码 原理图 编程源代码
- 《麦肯锡方法》阅读笔记2——探索分析问题的方法
- 记录一次CenterOS7中xmrig挖矿病毒的排查测试
- 考勤系统需求分析(软件工程)
- Eric6与pyqt5学习笔记14 【实战5 百度贴吧离线签到工具】