多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出

多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出

目录

    • 多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出
      • 预测效果
      • 基本介绍
      • 程序设计
      • 往期精彩
      • 参考资料

预测效果

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

基本介绍

多输入多输出 | MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出
1.data为数据集,10个输入特征,3个输出变量。
2.main.m为主程序文件。
3.命令窗口输出MBE、MAE和R2,可在下载区获取数据和程序内容。

程序设计

  • 完整程序和数据下载方式:私信博主回复MATLAB实现GA-BP遗传算法优化BP神经网络多输入多输出
%-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function [x, endPop, bPop, traceInfo] = ga(bounds, evalFN, evalOps, startPop, opts, ...
termFN, termOps, selectFN, selectOps, xOverFNs, xOverOps, mutFNs, mutOps)% Output Arguments:
%   x            - the best solution found during the course of the run
%   endPop       - the final population 
%   bPop         - a trace of the best population
%   traceInfo    - a matrix of best and means of the ga for each generation
%
% Input Arguments:
%   bounds       - a matrix of upper and lower bounds on the variables
%   evalFN       - the name of the evaluation .m function
%   evalOps      - options to pass to the evaluation function ([NULL])
%   startPop     - a matrix of solutions that can be initialized
%                  from initialize.m
%   opts         - [epsilon prob_ops display] change required to consider two 
%                  solutions different, prob_ops 0 if you want to apply the
%                  genetic operators probabilisticly to each solution, 1 if
%                  you are supplying a deterministic number of operator
%                  applications and display is 1 to output progress 0 for
%                  quiet. ([1e-6 1 0])
%   termFN       - name of the .m termination function (['maxGenTerm'])
%   termOps      - options string to be passed to the termination function
%                  ([100]).
%   selectFN     - name of the .m selection function (['normGeomSelect'])
%   selectOpts   - options string to be passed to select after
%                  select(pop,#,opts) ([0.08])
%   xOverFNS     - a string containing blank seperated names of Xover.m
%                  files (['arithXover heuristicXover simpleXover']) 
%   xOverOps     - A matrix of options to pass to Xover.m files with the
%                  first column being the number of that xOver to perform
%                  similiarly for mutation ([2 0;2 3;2 0])
%   mutFNs       - a string containing blank seperated names of mutation.m 
%                  files (['boundaryMutation multiNonUnifMutation ...
%                           nonUnifMutation unifMutation'])
%   mutOps       - A matrix of options to pass to Xover.m files with the
%                  first column being the number of that xOver to perform
%                  similiarly for mutation ([4 0 0;6 100 3;4 100 3;4 0 0])%%  初始化参数
n = nargin;
if n < 2 || n == 6 || n == 10 || n == 12disp('Insufficient arguements') 
end% 默认评估选项
if n < 3 evalOps = [];
end% 默认参数
if n < 5opts = [1e-6, 1, 0];
end% 默认参数
if isempty(opts)opts = [1e-6, 1, 0];
end%%  判断是否为m文件
if any(evalFN < 48)% 浮点数编码 if opts(2) == 1e1str = ['x=c1; c1(xZomeLength)=', evalFN ';'];  e2str = ['x=c2; c2(xZomeLength)=', evalFN ';']; % 二进制编码elsee1str = ['x=b2f(endPop(j,:),bounds,bits); endPop(j,xZomeLength)=', evalFN ';'];end
else% 浮点数编码if opts(2) == 1e1str = ['[c1 c1(xZomeLength)]=' evalFN '(c1,[gen evalOps]);'];  e2str = ['[c2 c2(xZomeLength)]=' evalFN '(c2,[gen evalOps]);'];% 二进制编码elsee1str=['x=b2f(endPop(j,:),bounds,bits);[x v]=' evalFN ...'(x,[gen evalOps]); endPop(j,:)=[f2b(x,bounds,bits) v];'];  end
end%%  默认终止信息
if n < 6termOps = 100;termFN = 'maxGenTerm';
end%%  默认变异信息
if n < 12% 浮点数编码if opts(2) == 1mutFNs = 'boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation';mutOps = [4, 0, 0; 6, termOps(1), 3; 4, termOps(1), 3;4, 0, 0];% 二进制编码elsemutFNs = 'binaryMutation';mutOps = 0.05;end
end%%  默认交叉信息
if n < 10% 浮点数编码if opts(2) == 1xOverFNs = 'arithXover heuristicXover simpleXover';xOverOps = [2, 0; 2, 3; 2, 0];% 二进制编码elsexOverFNs = 'simpleXover';xOverOps = 0.6;end
end%%  仅默认选择选项,即轮盘赌。
if n < 9selectOps = [];
end%%  默认选择信息
if n < 8selectFN = 'normGeomSelect';selectOps = 0.08;
end%%  默认终止信息
if n < 6termOps = 100;termFN = 'maxGenTerm';
end%%  没有定的初始种群
if n < 4startPop = [];
end%%  随机生成种群
if isempty(startPop)startPop = initializega(80, bounds, evalFN, evalOps, opts(1: 2));
end%%  二进制编码
if opts(2) == 0bits = calcbits(bounds, opts(1));
end%%  参数设置
xOverFNs     = parse(xOverFNs);
mutFNs       = parse(mutFNs);
xZomeLength  = size(startPop, 2); 	          % xzome 的长度
numVar       = xZomeLength - 1; 	          % 变量数
popSize      = size(startPop,1); 	          % 种群人口个数
endPop       = zeros(popSize, xZomeLength);   % 第二种群矩阵
numXOvers    = size(xOverFNs, 1);             % Number of Crossover operators
numMuts      = size(mutFNs, 1); 		      % Number of Mutation operators
epsilon      = opts(1);                       % Threshold for two fittness to differ
oval         = max(startPop(:, xZomeLength)); % Best value in start pop
bFoundIn     = 1; 			                  % Number of times best has changed
done         = 0;                             % Done with simulated evolution
gen          = 1; 			                  % Current Generation Number
collectTrace = (nargout > 3); 		          % Should we collect info every gen
floatGA      = opts(2) == 1;                  % Probabilistic application of ops
display      = opts(3);                       % Display progress %%  精英模型
while(~done)[bval, bindx] = max(startPop(:, xZomeLength));            % Best of current popbest =  startPop(bindx, :);if collectTracetraceInfo(gen, 1) = gen; 		                        % current generationtraceInfo(gen, 2) = startPop(bindx,  xZomeLength);      % Best fittnesstraceInfo(gen, 3) = mean(startPop(:, xZomeLength));     % Avg fittnesstraceInfo(gen, 4) = std(startPop(:,  xZomeLength)); end%%  最佳解if ( (abs(bval - oval) > epsilon) || (gen==1))% 更新显示if displayfprintf(1, '\n%d %f\n', gen, bval);          end% 更新种群矩阵if floatGAbPop(bFoundIn, :) = [gen, startPop(bindx, :)]; elsebPop(bFoundIn, :) = [gen, b2f(startPop(bindx, 1 : numVar), bounds, bits)...startPop(bindx, xZomeLength)];endbFoundIn = bFoundIn + 1;                      % Update number of changesoval = bval;                                  % Update the best valelseif displayfprintf(1,'%d ',gen);	                      % Otherwise just update num genendend
%%  选择种群endPop = feval(selectFN, startPop, [gen, selectOps]);% 以参数为操作数的模型运行if floatGAfor i = 1 : numXOversfor j = 1 : xOverOps(i, 1)a = round(rand * (popSize - 1) + 1); 	     % Pick a parentb = round(rand * (popSize - 1) + 1); 	     % Pick another parentxN = deblank(xOverFNs(i, :)); 	         % Get the name of crossover function[c1, c2] = feval(xN, endPop(a, :), endPop(b, :), bounds, [gen, xOverOps(i, :)]);% Make sure we created a new if c1(1 : numVar) == endPop(a, (1 : numVar)) c1(xZomeLength) = endPop(a, xZomeLength);elseif c1(1:numVar) == endPop(b, (1 : numVar))c1(xZomeLength) = endPop(b, xZomeLength);elseeval(e1str);endif c2(1 : numVar) == endPop(a, (1 : numVar))c2(xZomeLength) = endPop(a, xZomeLength);elseif c2(1 : numVar) == endPop(b, (1 : numVar))c2(xZomeLength) = endPop(b, xZomeLength);elseeval(e2str);endendPop(a, :) = c1;endPop(b, :) = c2;endendfor i = 1 : numMutsfor j = 1 : mutOps(i, 1)a = round(rand * (popSize - 1) + 1);c1 = feval(deblank(mutFNs(i, :)), endPop(a, :), bounds, [gen, mutOps(i, :)]);if c1(1 : numVar) == endPop(a, (1 : numVar)) c1(xZomeLength) = endPop(a, xZomeLength);elseeval(e1str);endendPop(a, :) = c1;endend%%  运行遗传算子的概率模型else for i = 1 : numXOversxN = deblank(xOverFNs(i, :));cp = find((rand(popSize, 1) < xOverOps(i, 1)) == 1);if rem(size(cp, 1), 2) cp = cp(1 : (size(cp, 1) - 1)); endcp = reshape(cp, size(cp, 1) / 2, 2);for j = 1 : size(cp, 1)a = cp(j, 1); b = cp(j, 2); [endPop(a, :), endPop(b, :)] = feval(xN, endPop(a, :), endPop(b, :), ...bounds, [gen, xOverOps(i, :)]);endendfor i = 1 : numMutsmN = deblank(mutFNs(i, :));for j = 1 : popSizeendPop(j, :) = feval(mN, endPop(j, :), bounds, [gen, mutOps(i, :)]);eval(e1str);endendend%  更新记录gen = gen + 1;done = feval(termFN, [gen, termOps], bPop, endPop); % See if the ga is donestartPop = endPop; 			                      % Swap the populations[~, bindx] = min(startPop(:, xZomeLength));         % Keep the best solutionstartPop(bindx, :) = best; 		                  % replace it with the worstend
[bval, bindx] = max(startPop(:, xZomeLength));%%  显示结果
if display fprintf(1, '\n%d %f\n', gen, bval);	  
end%%  二进制编码
x = startPop(bindx, :);
if opts(2) == 0x = b2f(x, bounds,bits);bPop(bFoundIn, :) = [gen, b2f(startPop(bindx, 1 : numVar), bounds, bits)...startPop(bindx, xZomeLength)];
elsebPop(bFoundIn, :) = [gen, startPop(bindx, :)];
end%%  赋值
if collectTracetraceInfo(gen, 1) = gen; 		                      % 当前迭代次数traceInfo(gen, 2) = startPop(bindx, xZomeLength);   % 最佳适应度traceInfo(gen, 3) = mean(startPop(:, xZomeLength)); % 平均适应度
end

往期精彩

MATLAB实现RBF径向基神经网络多输入多输出预测
MATLAB实现BP神经网络多输入多输出预测
MATLAB实现DNN神经网络多输入多输出预测

参考资料

[1] https://blog.csdn.net/kjm13182345320/article/details/116377961
[2] https://blog.csdn.net/kjm13182345320/article/details/127931217
[3] https://blog.csdn.net/kjm13182345320/article/details/127894261

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/139569.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

接入国家能源平台MQTT应用案例

一、项目介绍 随着国家对节能环保措施的力度不断加大&#xff0c;基于物联网技术搭建的国家能源平台在国家相关部门的建设下逐渐成熟。致力于利用实际能耗数据建立能效仿真模型&#xff0c;通过实时寻优运算&#xff0c;获得当前的最优化运行策略&#xff0c;并将控制指令下发…

MDK工程转换Vscode+EIDE方法

MDK工程转换VscodeEIDE方法 1、VscodeEIDE环境搭建方法 请按下方视频完成环境搭建&#xff0c;并编译成功。下载&#xff0c;单步调试如无视频中芯片可暂不执行。 https://www.bilibili.com/video/BV1Zu4y1f72H/?spm_id_from333.337.search-card.all.click&vd_source73…

摩尔信使MThings实用功能盘点

“冗长的用户手册”与“精简的交互设计”之间势必产生一条信息鸿沟&#xff0c;现在就来盘点一下摩尔信使MThings有哪些隐蔽而实用的功能。 01 数据配置类 一键刷新 功能&#xff1a;快速读取所有位数据、寄存器数据的当前数值。 操作&#xff1a;双击“数值”列表头。 一键…

有一个新工具,能让程序员变成高手,优雅撸它!

不知道从什么时候开始&#xff0c;程序员这个职位变得家喻户晓&#xff0c;对程序员的印象也从以前的高深莫测变成如今的加班代名词。对于程序员加班&#xff0c;不懂有话要说。 作为大厂的一枚螺丝钉&#xff0c;接到任务的第一时间需要缕清底层逻辑&#xff0c;并随时关注部门…

AUTOSAR实战篇:手把手带你搞定Watchdog协议栈

AUTOSAR实战篇:手把手带你搞定Watchdog协议栈 前言 小T出品,必是精品! 手把手搞定Watchdog协议栈,你值得拥有! 正文 在进行Watchdog协议栈实战之前,建议先阅读小T之前有关Watchdog协议栈的两篇文章《Watchdog协议栈上》与《Watchdog协议栈下》先了解下在AUTOSAR框架下的W…

SQL模板-用户留存率计算

在这段实习中&#xff0c;我遇到了用户留存率计算的需求&#xff0c;这里做个总结。 首先来讲下&#xff0c;什么是用户留存&#xff1f; 在互联网行业中&#xff0c;用户在某段时间内开始使用应用&#xff0c;经过一段时间后&#xff0c;仍然继续使用该应用的用户。用户留存一…

【数据分享】2005-2022年全国民航机场客货吞吐量和起降架次数据

机场是一个城市对外联系的重要渠道&#xff0c;机场的旅客吞吐量和货物吞吐量是体现一个城市对外联系程度的重要指标。 本次我们给大家分享的是2005-2022年我国民航机场的旅客吞吐量、货邮吞吐量、起降架次数据。数据格式为Excel和Shp两种格式。数据坐标为WGS1984。原始数据来…

根据条件关闭软件

使用下载工具时&#xff0c;经常出现磁盘空间已满&#xff0c;无法下载的情况。 使用shell写一个监控&#xff0c;每2分钟执行一次。判断当前磁盘的空间&#xff0c;低于2G时&#xff0c;关闭下载软件。 获取空间大小 ➜ ~ df -h …

CTF--攻防世界杂项--第二课

下载题目根据文件类型可知&#xff0c;这是一个流量包 那么接下来就是利用分析流量包常用的工具wireshark来分析 利用关键词进行搜索 http contains shell 在最后一条数据中看到了flag。 以上就结束&#xff0c;非常简单的一道题。

使用Visual Leak Detector排查内存泄漏问题

目录 1、VLD工具概述 2、下载、安装VLD 2.1、下载VLD 2.2、安装VLD 3、VLD安装目录及文件说明 3.1、安装目录及文件说明 3.2、关于32位和64位版本的详细说明 4、在工程中引入VLD 5、内存泄漏检测实例讲解 5.1、程序启动报错 5.2、启动调试&#xff0c;查看内存泄漏报…

redis如何清空当前缓存和所有缓存

Windows环境下使用命令行进行redis缓存清理 redis安装目录下输入cmdredis-cli -p 端口号flushdb 清除当前数据库缓存flushall 清除整个redis所有缓存keys * 查看所有key值del key 删除指定索引的值 注意&#xff1a; 我们清空缓存的时候&#xff0c;需要确保redis-…

Leetcode199. 二叉树的右视图

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 题解&#xff1a;力扣&#xff08;LeetCode&#xff09…

pdf添加水印

给pdf文件添加水印 引入依赖 <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.13.3</version></dependency>添加水印 package com.it2.pdfdemo02.util;import com.itextpdf.tex…

nodeJs+Mongodb+mongoose入门

nodeJsexpressMongodbmongooseNavicat 自我记录 一、简介 1.1 Mongodb 是什么 MongoDB 是一个基于分布式文件存储的数据库&#xff0c;官方地址 https://www.mongodb.com/ 1.2 数据库是什么 数据库&#xff08;DataBase&#xff09;是按照数据结构来组织、存储和管理数据…

EDA(Exploratory Data Analysis)探索性数据分析

EDA(Exploratory Data Analysis)中文名称为探索性数据分析&#xff0c;是为了在特征工程或模型开发之前对数据有个基本的了解。数据类型通常分为两类&#xff1a;连续类型和离散类型&#xff0c;特征类型不同&#xff0c;我们探索的内容也不同。 1. 特征类型 1.1 连续型特征 …

Matlab中 * 与 .* 的区别

* 用于矩阵乘法 示例1&#xff1a; 注&#xff1a; 表示转置&#xff0c;即矩阵a的转置 乘以 矩阵b 根据矩阵乘法&#xff0c;r结果为&#xff1a; 示例2&#xff1a; 矩阵a 乘以 矩阵b的转置 根据矩阵乘法&#xff0c;结果为&#xff1a; .* 用于对应位置单个元素相乘 示例…

代码片段的理解

1.后面的error直接走的是失败的回调 例如:权限不足,可以理解为服务器的一种形式 2.前面走的是成功的回调 但是也可能不对,例如在传过去的参数,在数据库查询不了这个值,传递过来的值不一样&#xff0c;这样它也是走的成功回调。

Spire.OCR for .NET 1.9.0 Crack

Spire.OCR for .NET 是一个专业的 OCR 库&#xff0c;用于从 JPG、PNG、GIF、BMP 和 TIFF 格式的图像中读取文本。开发人员可以轻松地在 C# 和 VB.NET 的 .NET 应用程序中添加 OCR 功能。它支持常用的图像格式&#xff0c;并提供从图像中​​读取多个字符和字体、粗体和斜体样式…

PyTorch实战:卷积神经网络详解+Python实现卷积神经网络Cifar10彩色图片分类

目录 前言 一、卷积神经网络概述 二、卷积神经网络特点 卷积运算 单通道&#xff0c;二维卷积运算示例 单通道&#xff0c;二维&#xff0c;带偏置的卷积示例 带填充的单通道&#xff0c;二维卷积运算示例 Valid卷积 Same卷积 多通道卷积计算 1.局部感知域 2.参数共…

【php经典算法】冒泡排序,冒泡排序原理,冒泡排序执行逻辑,执行过程,执行结果 代码

冒泡排序原理 每次比较两个相邻的元素&#xff0c;将较大的元素交换至右端 冒泡排序执行过程输出效果 冒泡排序实现思路 每次冒泡排序操作都会将相邻的两个元素进行比较&#xff0c;看是否满足大小关系要求&#xff0c;如果不满足&#xff0c;就交换这两个相邻元素的次序&…