1.遗传算法流程图

2.matlab代码

2.1 main.m 主函数

%% 遗传算法,不使用工具包,自行编写函数完成
clear;
close all;
clc;%% 参数
% 计算x1 ^ 2 - 4 * x2 ^ 2 + x3 - x4 ^ 3;的最小值, x1, x2属于{1, 2, 3, 4 ,5 6, 7}
nVar = 12; % 自变量长度
nPop = 300; % 种群规模
maxIt = 30; % 最大迭代次数
nPc = 0.8; % 子代比例
nC = round(nPop * nPc / 2) * 2; % 子代规模
nCmu = 0.5; % 交叉概率
nMu = 0.01; % 变异概率%% Part1. 初始化种群
Parent.x = randi([0, 1], nPop, nVar); % 自变量%% Part2. 适应度计算
Parent.y = fun(Parent.x); % 因变量%% 迭代
for It = 1 : maxIt%% Part3. 选择Offspring = selectPop(Parent, nC);%% Part4. 交叉Offspring.x = crossPop(Offspring.x, nCmu);%% Part5. 变异Offspring.x = mutatePop(Offspring.x, nMu);Offspring.y = fun(Offspring.x);%% Part6. 筛选newPop.x = [Parent.x; Offspring.x]; % 合并种群xnewPop.y = [Parent.y; Offspring.y]; % 合并种群y[~, so] = sort(newPop.y, 'descend');% 排序newPop.x = newPop.x(so, :);newPop.y = newPop.y(so, :);Parent.x = newPop.x(1 : nPop, :);% 筛选xParent.y = newPop.y(1 : nPop);% 筛选ydisp(['迭代次数:', num2str(It), ', 最大值为:', num2str(Parent.y(1))])end

2.2 适应度函数

%% 不使用工具包的目标函数
function y = fun(x)
[m, ~] = size(x);
y = zeros(m, 1);
x1 = x(:, 1 : 3);
x2 = x(:, 4 : 6);
x3 = x(:, 7 : 9);
x4 = x(:, 10 : 12);
out = []; % 特殊淘汰
for t = 1 : mxx1 = bin2dec(num2str(x1(t, :)));xx2 = bin2dec(num2str(x2(t, :)));xx3 = bin2dec(num2str(x3(t, :)));xx4 = bin2dec(num2str(x4(t, :)));if xx1 == 0 || xx2 == 0 || xx3 == 0 || xx4 == 0out = [out, t];endy(t) = xx1 ^ 2 - 4 * xx2 ^ 2 + xx3 - xx4 ^ 3;
end
y(out) = min(y) - 1;
end

2.3 选择

%% 不使用工具包的目标函数
function y = fun(x)
[m, ~] = size(x);
y = zeros(m, 1);
x1 = x(:, 1 : 3);
x2 = x(:, 4 : 6);
x3 = x(:, 7 : 9);
x4 = x(:, 10 : 12);
out = []; % 特殊淘汰
for t = 1 : mxx1 = bin2dec(num2str(x1(t, :)));xx2 = bin2dec(num2str(x2(t, :)));xx3 = bin2dec(num2str(x3(t, :)));xx4 = bin2dec(num2str(x4(t, :)));if xx1 == 0 || xx2 == 0 || xx3 == 0 || xx4 == 0out = [out, t];endy(t) = xx1 ^ 2 - 4 * xx2 ^ 2 + xx3 - xx4 ^ 3;
end
y(out) = min(y) - 1;
end

2.4 交叉

function p = crossPop(pop, pc)
[px, py] = size(pop);
p = zeros(size(pop));
% 相邻个体交叉
for i = 1:2:px-1if(rand < pc) %交叉cpoint = round(rand * py); % 交叉点,向下取整,不会取到最后一个p(i, :) = [pop(i, 1 : cpoint), pop(i + 1, cpoint + 1 : end)];p(i + 1, :) = [pop(i + 1, 1 : cpoint), pop(i, cpoint + 1 : end)];else % 不交叉p(i, :) = pop(i, :);p(i + 1, : ) = pop(i + 1, : );end
end
end

2.5 变异

function p = crossPop(pop, pc)
[px, py] = size(pop);
p = zeros(size(pop));
% 相邻个体交叉
for i = 1:2:px-1if(rand < pc) %交叉cpoint = round(rand * py); % 交叉点,向下取整,不会取到最后一个p(i, :) = [pop(i, 1 : cpoint), pop(i + 1, cpoint + 1 : end)];p(i + 1, :) = [pop(i + 1, 1 : cpoint), pop(i, cpoint + 1 : end)];else % 不交叉p(i, :) = pop(i, :);p(i + 1, : ) = pop(i + 1, : );end
end
end

3. 使用Gaot工具箱

3.1 main.m 主函数

%% 遗传算法,使用GA工具箱
clear;
close all;
clc;%% 绘制函数曲线
t = 1:0.01:7;
x = repmat(t, length(t), 1);
y = x';
z = x .^ 2 - y .^ 2;figure;
plot3(x, y, z);
xlabel('自变量x');
ylabel('自变量y')
zlabel('自变量z');
title('z = x^2 + y^2');
grid%%  初始化种群
initPop = initializega(500, [1, 7; 1, 7], 'fitness'); %种群大小;变量变化范围;适应度函数的名称%% 遗传算法优化
[x, endPop, bpop, trace] = ga([1, 7; 1, 7], 'fitness', [], initPop, [1e-6, 1, 1], 'maxGenTerm', 200, ...'normGeomSelect', 0.1, 'arithXover', 3, 'nonUnifMutation', [2, 25, 3]);
%变量范围上下界;适应度函数;适应度函数的参数;初始种群;精度和显示方式;终止函数的名称;终止函数的参数;
% 选择函数的名称;选择函数的参数;交叉函数的名称;交叉函数的参数;变异函数的名称;变异函数的参数
%  x: 最优个体     endpop: 优化终止的最优种群    bpop: 最优种群的进化轨迹   trace: 进化迭代过程中
%最优的适应度函数值和适应度函数值矩阵%% 输出最优解并绘制最优点
disp("最优解");
disp(x);
hold on;
plot3(x(1), x(2), x(3), 'r*')%% 绘制迭代进化曲线
figure;
plot(trace(:, 1), trace(:, 3), 'b:');
hold on;
plot(trace(:, 1), trace(:, 2), 'r-');
xlabel('Generation');
ylabel('Fittness');
legend('Mean Fitness', 'Best Fitness');

3.2 适应度函数 fitness.m

function [sol, fitnessVal] = fitness(sol, ~)
x = sol(1);
y = sol(2);
fitnessVal = x ^ 2 - y ^ 2;
end

3.3 运行结果


遗传算法原理以及MATLAB实现相关推荐

  1. 量子遗传算法原理与MATLAB仿真程序

    写在前面: 1.其实这些智能算法的思想都差不多,只不过是各自搜寻方式.编码方式.种群更新方式等不一样而已. 量子遗传算法是在遗传算法的基础上使用了一种新的编码方式. 2.直接看前面介绍可能会觉得较难, ...

  2. 【GA算法】遗传算法原理及其Matlab代码

    翻阅几篇遗传算法的文章,这篇通俗易懂,且逻辑清楚,最适合入门,不用担心遗漏关键点. 遗传算法,先选择,交叉和变异顺序可更换. 轮盘赌部分,参考了另外一篇文章的解释. 此外,还有一些有价值的文献: 选择 ...

  3. BP神经网络原理及Matlab实现(Back Propagation Neural Networks,BPNN)

    BP神经网络原理及matlab实现 一.简介 1.BP 神经网络的信息处理方式的特点 2.BP神经网络的主要功能 二.神经网络的训练 1.神经网络拓扑结构(隐含层)的确定 2.网络的初始连接权值 3. ...

  4. matlab 投票法_SVM算法原理及其Matlab应用

    <SVM算法原理及其Matlab应用>由会员分享,可在线阅读,更多相关<SVM算法原理及其Matlab应用(18页珍藏版)>请在人人文库网上搜索. 1.SVM 算法及其 Mat ...

  5. PCA的原理及MATLAB实现

    相关文章 PCA的原理及MATLAB实现 UFLDL教程:Exercise:PCA in 2D & PCA and Whitening python-A comparison of vario ...

  6. 【RS码1】系统RS码编码原理及MATLAB实现(不使用MATLAB库函数)

    关注公号[逆向通信猿]更精彩!!! 基础知识 要想搞懂本节知识,需要先熟悉掌握以下前几篇博客 [多元域乘法]多项式乘法电路原理及MATLAB详解 [多元域除法]多项式除法电路原理及MATLAB详解 R ...

  7. 【多元域除法】多项式除法电路原理及MATLAB详解

    关注公号[逆向通信猿]更精彩!!! 关于二元域上的两个元素的加法和乘法.多项式除法,在之前的博客 [有限域除法]二元多项式除法电路原理及MATLAB详解 子程序:sub_poly_div.m [有限域 ...

  8. 【多元域乘法】多项式乘法电路原理及MATLAB详解

    关注公号[逆向通信猿]更精彩!!! 关于二元域上的两个元素的乘法.多项式除法,在之前的博客 [有限域除法]二元多项式除法电路原理及MATLAB详解 子程序:sub_poly_div.m [有限域元素加 ...

  9. 智能优化算法:海鸥算法原理及Matlab代码

    智能优化算法:海鸥算法原理及Matlab代码 文章导航 1. 算法原理 2. SOA算法流程 2.1 迁徙行为(exploration ability) 2.2 攻击行为(exploitation a ...

最新文章

  1. 从ReentrantLock的实现看AQS的原理及应用
  2. DDRx的关键技术介绍(下)
  3. mysql-主从服务器同步搭建
  4. android apk签名工具_Android 应用修改为系统签名的方法(macOS)
  5. 【线上直播】Xilinx低延时、高质量实时视频服务技术实践
  6. Java数字格式:DecimalFormat
  7. python3 一些常用的数学函数
  8. 【笔记】MySQL的基础学习(二)
  9. ENVI入门系列教程---二、图像分析---12. 图像分类流程化工具
  10. IPD流程在华为15年发展历程…
  11. js实现分页并请求ajax,js实现ajax分页完整实例
  12. Sicar标准柜架模板 3.0 版 西门子S7-1500PLC PN总线程序
  13. C语言小日常—关机代码
  14. 基于python/scipy学习概率统计(2):伯努利分布(Bernoulli Distribution)
  15. Python爬虫与信息提取(八)将新浪热搜排名导入数据库
  16. Ubuntu系统搭建PPPoE服务器,Ubuntu上架设PPPoE Server
  17. python数据处理----pandas导入和导入文件
  18. 分享4个自媒体热门领域,选对了收入翻3倍
  19. 蓝屏总结(一) ——基本分析方法
  20. Summary of Statistics for Interview

热门文章

  1. ArcGIS地图制作的注记、格网添加
  2. 使用API进行微信群管理开发
  3. android bitmap内存大小,Android——Bitmap占用的内存大小
  4. java gps转高德坐标_GPS 经纬度转换 百度、高德经纬度
  5. 016-第50周(12.13-12.19)
  6. charles抓包常用
  7. 【项目分享】还有谁不服??这款随机表情包生成器征服你!!
  8. TCP/IP详解--接收RST回应的几种情况
  9. 2020年缓存Redis面试题与答案
  10. 还在不停切换聊天窗口进行回复的客服请看过来