该算法的选择、交叉、变异操作都采用了基础的方法,操作方法在代码的注释给出:

选择:二元锦标赛选择法;

交叉:单点交叉;

变异:单点变异

1.主程序 main

clc;clearnVar = 100;   %定义一个变量来接受x的长度
nPop = 30;    %定义种群大小
maxIt = 2000;    %定义最大种群迭代次数
%在进行选择、交叉、变异之前要先定义子代规模大小
nPc = 0.8;     %代表交叉比列
nC = round(nPop * nPc / 2) * 2;     %代表子代规模的大小;其中做了偶数化处理
nMu = 0.01;         %变异概率template.x = [];   %定义结构体来存储变量x、y   后面经常要用到,所以下面直接生成一个模板
template.y = [];Parent = repmat(template, nPop, 1);     %初始化种群之后的变量,用Parent来接收,代表他是一个父代种群  repmat()矩阵复制命令for i = 1 : nPopParent(i).x = randi([0,1], 1, nVar);Parent(i).y = fun(Parent(i).x);endfor It = 1 : maxItoffspring = repmat(template, nC/2, 2);    %定义子代规模后,定义子代数据存放的模板;子代种群会刷新,写进循环内,防止数据不断增长for j = 1 : nC / 2     %首先生成一个12*2的子代种群p1 = selectPop(Parent);     %选择两个个体,把父代种群传进来进行选择p2 = selectPop(Parent);[offspring(j,1).x, offspring(j,2).x] = crossPop(p1.x , p2.x);    %交叉endoffspring = offspring(:);for k = 1 : nCoffspring(k).x = mutatePop(offspring(k).x, nMu);        %变异offspring(k).y = fun(offspring(k).x);                   %调用fun()函数,计算y值end% 进行种群筛选,如果不进行种群筛选,种群会越来越庞大newPop = [Parent; offspring];[~,so] = sort([newPop.y], 'ascend');newPop = newPop(so);Parent = newPop(1 : nPop);            %进行筛选,只保留前30个,同时前30个也最接近我们需要的结果disp(['迭代次数:', num2str(It), ',最小值为:', num2str(Parent(1).y)]);end

2.选择   selectPop

function  p =selectPop(Parent)    %从父代种群中选择%锦标赛选择法 :从父代种群中选择两个个体,比较他们的适应度值,如果谁的适应度值更接近我们最后理想结果,就选中,另外一个被淘汰n = numel(Parent);    %计算父代种群中有多少个体,先读取一下index = randperm(n);   %随机的生成一个序列,选中两个个体出来p1 = Parent(index(1));p2 = Parent(index(2));if p1.y <= p2.yp = p1;else p = p2;end
end  

3.交叉  crossPop

function [y1,y2] = crossPop(x1,x2)    %传进两个个体让他们去交叉%单点交叉,交换随机点后面的元素,随机点不能为最后一位!n = numel(x1);              %先获取x长度s = randi([1, n - 1]);       %随机生成随机点且不能为最后一位y1 = [x1(1 : s) x2(s + 1 : end)];y2 = [x2(1 : s) x1(s + 1 : end)];
end

4.变异  mutatePop

function p = mutatePop(x, mu)%单点变异:随机指定一个点,原来是1则变为0,原来是0则变为1;mu为变异概率if rand <= mun = numel(x);s = randi([1,n]);if x(s) == 0x(s) = 1;elseif x(s) == 1x(s) = 0;endendp = x;
end

遗传算法(包含选择、交叉、变异) MATLAB完整代码 中文注释详解相关推荐

  1. 史上最详细的Pytorch版yolov3代码中文注释详解(四)

    史上最详细的Pytorch版yolov3代码中文注释详解(一):https://blog.csdn.net/qq_34199326/article/details/84072505 史上最详细的Pyt ...

  2. HTML简单入门 代码加注释详解

    HTML 初识网页 <!DOCTYPE html> <html lang="en"> <!--head标签代表网页头部--> <head& ...

  3. ftp服务器搭建类似云盘功能代码(带注释详解代码)

    ftp服务器使用说明 运行服务端 ./server 本机IP地址 端口号(使用ifconfig查看本机IP 地址) 运行客户端 ./client 服务器IP地址 相同端口号 运行成功后可执行以下指令, ...

  4. Lift-Splat-Shoot算法理解及代码中文注释

    论文:Lift, Splat, Shoot: Encoding Images from Arbitrary Camera Rigs by Implicitly Unprojecting to 3D 完 ...

  5. 基于Python实现的网络爬虫项目——多线程下载小说并保存为txt文件(包含完整代码及注释)

    基于Python实现的网络爬虫项目--多线程下载小说并保存为txt文件(包含完整代码及注释) 一.确立预期目标 二.完成项目所需工具 三.项目需要解决的问题 问题一 问题二 问题三 问题四 问题五 问 ...

  6. 代码+步骤GM(1,1)灰色预测模型-案例长江水质综合评价赛题-级比检测C的确定-matlab完整代码附送

    GM(1,1)灰色预测模型-案例长江水质综合评价赛题第三题-matlab完整代码附送 看到上一篇Blog在短短几天Pageviews就达到了1300多,看来大家还是比较中意建模上的笔记

  7. python外星人入侵代码提示has no attri_Python外星人入侵完整代码和注释(四)

    四.重构:模块game_function,创建game_function.py 文件名 1.创建game_function.py(用来存储项目的大部分函数) 2.函数check_events() :响 ...

  8. 人民币 matlab,Matlab实现人民币币值的显示 实现代码及教程详解

    上图像和程序了--记得程序好像是很久以前收藏的了--分享出来了-- clear all;clc; Img = imread('I.jpg'); if ndims(Img)==3 I=rgb2gray( ...

  9. matlab圆周运动表示三角函数,用代码画画-详解三角函数

    原标题:用代码画画-详解三角函数 用代码画画,必需要懂很多数学知识?如果数学基础没那么好,是否就无法肆意表达,领略其中的乐趣? 其实不然.很多时候,只要用简单的数学知识,也能做出复杂精妙的作品. 希望 ...

最新文章

  1. Linux负载均衡实现
  2. nebula语法学习
  3. springMVC 不扫描 controller 中的方法
  4. Java,想说爱你真不容易
  5. Android动画及滑动事件冲突解决(转载)
  6. android rtsp 延时,ijkplayer 单视频流直播延迟问题解决过程
  7. Spring验证示例 - Spring MVC Form Validator
  8. HDU1048 The Hardest Problem Ever
  9. python之optparse模块
  10. [转]Bash的输入输出重定向
  11. 汉字常用字unicode码表
  12. 大学生信息检索概论练习题
  13. eval()与train()(结合源码理解)
  14. 基于SEIR模型对美国COVID-19疫情传播的预测和分析
  15. k8s、pod、容器、虚拟机概念
  16. tomcat 做为大型应用的配置
  17. 2021.1.28课程摘要(逻辑教育-王劲胜)
  18. linux停止tomcat 8005,为什么Tomcat不会绑定到关闭端口(8005)?
  19. 数码相机短片合并及压缩工具(数码短片伴侣)
  20. Q2财报:联想的逆向“比较优势”

热门文章

  1. rar文件解压后可以删除吗?rar文件删除后怎么恢复?
  2. 抖音 Android 性能优化系列:启动优化实践
  3. C++基础之运算符重载
  4. 2022年济南12行政区高新技术企业补贴政策及认定条件汇总
  5. 杂七杂八,乱七八糟的大杂烩!
  6. 助力篇|常见金融风控数据分析内容汇总,助你面试道路畅通无阻
  7. ECharts教程(未完)
  8. 优化算法——人工蜂群算法(ABC)
  9. 太原理工大学计算机科学与技术老师 王颖,王华 - 太原理工大学 - 信息与计算机学院...
  10. STM32 用RS485进行半双工通信出现的问题