GA优化BP网络代码

合集下载

python gabp 代码

python gabp 代码

Python GABP代码随着人工智能和大数据的迅速发展,以及机器学习算法的普及,越来越多的人开始关注并学习Python编程语言。

而在机器学习领域中,GABP(Generalized Approximate Back Propagation)算法因其在深度学习中的高效性和精确性而备受关注。

本文将介绍使用Python 编写GABP算法的一般步骤和代码实现。

一、GABP算法简介GABP算法是一种用于训练神经网络的反向传播算法,它通过不断迭代调整神经网络中的参数,使神经网络的输出尽可能接近实际值。

与传统的反向传播算法相比,GABP算法在训练速度和准确性上有着明显的优势,尤其适用于大规模神经网络的训练。

二、Python编程语言简介Python是一种高级编程语言,具有优雅、简洁、易读的特点,广泛应用于数据分析、人工智能、Web开发等领域。

它提供了丰富的第三方库和工具,使得编写复杂的机器学习算法变得更加便捷和高效。

三、使用Python实现GABP算法的基本步骤1. 导入所需的Python库和模块为了实现GABP算法,我们需要先导入Python中的一些基本库和模块,包括numpy、matplotlib、scikit-learn等。

这些库和模块将为我们提供在Python中实现GABP算法所需的基本功能和工具。

2. 准备数据集在实现GABP算法之前,我们需要准备一个适当的数据集,用于训练和测试神经网络模型。

通常情况下,数据集包括输入特征和对应的输出标签,我们需要将数据集划分为训练集和测试集,以便对模型进行训练和评估。

3. 构建神经网络模型使用Python编程语言,我们可以借助第三方库如tensorflow、keras 等来构建神经网络模型。

通过定义输入层、隐藏层和输出层的结构以及激活函数、损失函数等参数,我们可以轻松地构建起一个深度学习模型。

4. 实现GABP算法基于Python编程语言,我们可以使用numpy等库来实现GABP算法的主要逻辑。

bp神经网络代码

bp神经网络代码

bp神经网络代码
BP神经网络代码,是一种用于训练深度学习模型的反向传播算法。

它使用一系列的步骤,以每次迭代的方式来调整神经网络中权重的大小,从而使得它能够更准确地识别数据集中的特征。

BP神经网络代码的基本步骤如下:
1. 初始化权重:首先,选择一组随机初始权重参数。

2. 输入数据:然后,将数据输入神经网络,并将输入与权重相乘以计算输出。

3. 计算错误:接下来,通过比较预期输出和实际输出,计算网络的误差。

4. 反向传播:使用反向传播算法,根据误差调整权重参数,以减少误差。

5. 重复步骤2-4:重复步骤2-4,直到误差低到满足要求为止。

基于MATLAB编程的PCA改进GA-BP回归分析

基于MATLAB编程的PCA改进GA-BP回归分析

基于MATLAB编程的PCA改进GA-BP回归分析PCA改进GA-BP回归分析是一种强大的工具,它结合了PCA分析、GA优化算法和BP神经网络算法。

其基本思想是,先用PCA分析提取出数据集的主成分,然后将主成分作为输入向量,通过GA优化算法优化BP神经网络的权值和偏置,以实现回归分析。

下面我们就来详细介绍一下PCA改进GA-BP回归分析的MATLAB编程实现。

首先,我们需要导入数据集并进行PCA分析。

假设我们的数据集是一个$N\times M$的矩阵,其中$N$表示样本数,$M$表示特征数。

我们可以使用MATLAB的pca函数来实现PCA分析,代码如下:``` matlab[coeff, score, latent] = pca(data);```其中,coeff为主成分系数矩阵,score为主成分得分矩阵,latent为主成分方差向量。

我们可以通过观察latent的大小来确定需要保留的主成分数,一般来说保留累计方差贡献率达到80%以上的主成分即可。

接下来,我们将保留下来的主成分作为输入向量,构建一个BP神经网络。

为了优化BP神经网络的权值和偏置,我们需要使用GA优化算法。

具体来说,我们将BP神经网络的权值和偏置作为基因,将神经网络的误差作为适应度函数,使用遗传算法来搜索最优解。

下面是实现遗传算法的MATLAB代码:``` matlabfunction [best_gen, best_fit] = genetic_algorithm(pop_size, bit_num, generation_num, pc, pm, eval_func)% 初始化种群pop = rand(pop_size, bit_num);% 遗传进化for gen = 1:generation_num% 计算适应度函数值scores = zeros(pop_size, 1);for i = 1:pop_sizescores(i) = eval_func(pop(i, :));end% 选择优秀个体[sorted_scores, sorted_indexes] = sort(scores, 'descend'); elite_num = round(pop_size * 0.1);elites = pop(sorted_indexes(1:elite_num), :);% 交叉操作for i = 1:2:pop_sizeparent1 = elites(randi(elite_num), :);parent2 = elites(randi(elite_num), :);if rand < pc[child1, child2] = crossover(parent1, parent2);pop(i, :) = child1;pop(i + 1, :) = child2;elsepop(i, :) = parent1;pop(i + 1, :) = parent2;endend% 变异操作for i = 1:pop_sizeif rand < pmpop(i, :) = mutation(pop(i, :));endendend% 返回最优个体和适应度函数值best_fit = eval_func(elites(1, :));best_gen = elites(1, :);end```其中,pop_size表示种群大小,bit_num表示染色体长度,generation_num表示迭代次数,pc表示交叉概率,pm表示变异概率,eval_func为适应度函数。

GA-BP神经网络仿真

GA-BP神经网络仿真

GA-BP神经网络仿真[摘要]:本文主要是对基于遗传算法优化的BP神经网络(GA-BP)进行仿真,BP神经网络在BP神经网络中已经做详细介绍,本文首先介绍了遗传算法的基本原理,然后对遗传算法进行了描述,最后给出用遗传算法优化BP神经网络的程序。

[关键词]:GA-BP;遗传算法;仿真1遗传算法遗传算法(Genetic Algorithm, GA)起源于对生物系统所进行的计算机模拟研究。

它是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,借鉴了达尔文的进化论和孟德尔的遗传学说。

其本质是一种高效、并行、全局搜索的方法,能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应地控制搜索过程以求得最佳解。

1.1遗传算法基本原理遗传算法GA—模拟自然界遗传机制和生物进化论而成的一种并行随机搜索最优化方法。

(具有“生存+检测”的迭代过程的搜索算法)基于自然界“优胜劣汰,适者生存”的生物进化原理引入优化参数形成的编码串联群体中,按照所选择的适应度函数并通过遗传中的选择、交叉和变异对个体进行筛选,使适应度值好的个体被保留,适应度差的个体被淘汰,新的群体既继承了上一代的信息,又优于上一代。

反复循环,直至满足条件。

1.2遗传算法基本步骤种群中的每个个体是问题的一个解,称为“染色体”,染色体是一串符号,如二进制字符串。

利用“适值”(适应性函数)测量染色体的好坏。

遗传算法基本操作分为:(1)选择操作:以一定概率选择旧群体个体到新群体中,个体被选中的概率跟适应度值有关个体适应度越好被选中改了吧越大。

(2)交叉操作:信息交换思想选两个个体交换组合产生新的优秀个体,染色体位置互换。

(3)变异操作:—以一定的低概率发生,染色体位置产生变异(通常取值0.001-0.01之间)。

遗传算法是具有高效启发式搜索、并行计算等特点,应用于函数优化、组合优化及生产调度等方面。

1.3 算法实现1.3.1 种群初始化个体编码方法为实数编码,每隔个体均为一个实数串,由输入层和隐含层连接权值、隐含层阈值、隐含层与输出层连接权值以及输出层阈值4个部分组成。

用GA训练BP网络的权值、阈值从而优化神经网络

用GA训练BP网络的权值、阈值从而优化神经网络

% 计算误差平方和
SE=sumsqr(T(i)-A2);
sum=sum+SE;
end
eval=10/sum; % 遗传算法的适应值
>>file:bpinit.m
% BP网络初始化:给出网络的训练样本P、T,
% 输入、输出数及隐含神经元数R,S2,S1
end
end
% 接着的S1*S2个编码(即第R*S1个后的编码)为W2
for i=1:S2
for k=1:S1,
W2(i,k)=x(S1*(i-1)+k+R*S1);
end
end
% 接着的S1个编码(即第R*S1+S1*S2个后的编码)为B1
[P,T,R,S1,S2,S]=bpinit;
numv=size(sol,2)-1;
x=sol(1:numv);
eval=f(x);
>>file:f.m
function [eval]=f(sol)
numv=size(sol,2);
% tic,
% % BP网络初始化
% [P,T,R,S1,S2,S]=bpinit;
% bounds=ones(S,1)*[0.1 0.9];
% % 初始种群个数
% num=60;
% pop=initializega(num,bounds,'fitness');
B2(i,1)=x((R*S1+S1*S2+S1)+i);
end
% 计算S1与S2层的输出
for i=1:100
x1=W1*P(i)+B1;

基于GA的BP神经网络智能

基于GA的BP神经网络智能

(k )]
⎫ (k ) ⎪ ⎬ ⎪ ⎭
(13) i=1,2,…,N
式中, ωij(2) 为隐层权系数, ƒ [.]为隐层激发函数, ƒ [.]=tanh(x)。上角标(1)、(2)、
(3)分别对应输入层、隐含层、输出层。 网络的输出层的输入、输出为
n e t (n3 ) ( k ) = O O O O
侯树文 李艳华 杨科科 柏 镇
(华北水利水电学院动力系,河南郑州 摘 450008)
要:水力发电机组是一个非线性、时变系统,常规 PID 控制不能达到较好的控制效果。提出了一种基
于遗传算法、BP 神经网络和 BRF 神经网络的智能 PID 控制方法。文中讨论了智能控制系统的结构,GA、 BP、 BRF 的算法以及水电机组的数学模型。 对水电机组采用智能 PID 控制器和常规 PID 控制器的动态特性 进行了分析,结果表明,采用智能 PID 控制器的水电机组具有更好的控制精度和动态特性。 关键词:水电机组 PID 控制 遗传算法 神经网络 Abstract:Hydroelectric power generating unit is a non-linear, time-variable, high step system, so the traditional PID control can’t get good controlling performance. Proposed an intelligent PID control method based on genetic algorithm, BP neural network and BRF neural network. Discussed the structure of the intelligent control system, GA、 BP、 BRF algorithms and mathematical model of the unit respectively. Analysis the dynamic characteristics of the unit, which used intelligent PID controller and traditional PID controller respectively, the results showed that the unit with intelligent PID controller has better accuracy and dynamic characteristics. Keywords:Hydroelectric power generating unit PID controller Genetic algorithm Neural network

pso优化bp算法python代码

pso优化bp算法python代码

pso优化bp算法python代码PSO优化BP算法Python代码是基于粒子群算法(PSO)和BP(反向传播)神经网络算法的优化算法,用于解决分类和回归问题。

以下是一些关键的Python代码段来实现此算法:1. 导入必要的库```pythonimport numpy as npimport random```2. 定义神经网络类```pythonclass NeuralNetwork:def __init__(self, inputs, hidden, outputs):self.input_nodes = inputsself.hidden_nodes = hiddenself.output_nodes = outputsself.weights_ih = np.random.randn(self.hidden_nodes, self.input_nodes)self.weights_ho = np.random.randn(self.output_nodes, self.hidden_nodes)self.bias_h = np.random.randn(self.hidden_nodes, 1)self.bias_o = np.random.randn(self.output_nodes, 1)```3. 定义激活函数sigmoid```pythondef sigmoid(x):return 1 / (1 + np.exp(-x))```4. 定义前向传播函数```pythondef feedforward(self, input_array):inputs = np.array(input_array, ndmin=2).Thidden_inputs = np.dot(self.weights_ih, inputs) +self.bias_hhidden_outputs = sigmoid(hidden_inputs)final_inputs = np.dot(self.weights_ho, hidden_outputs) + self.bias_ofinal_outputs = sigmoid(final_inputs)return final_outputs```5. 定义损失函数```pythondef mse_loss(self, input_array, target):inputs = np.array(input_array, ndmin=2).Ttargets = np.array(target, ndmin=2).Toutputs = self.feedforward(inputs)return np.mean((targets - outputs)**2)```6. 定义粒子类```pythonclass Particle:def __init__(self, dim):self.position = np.random.randn(dim, 1)self.velocity = np.random.randn(dim, 1)self.best_position = self.positionself.best_cost = float('inf')```7. 定义PSO算法类```pythonclass PSO:def __init__(self, cost_function, dimension, swarm_size, max_iter):self.cf = cost_functionself.dim = dimensionself.swarm_size = swarm_sizeself.max_iter = max_iterself.swarm = [Particle(self.dim) for i inrange(self.swarm_size)]self.best_swarm_position = self.swarm[0].positionself.best_swarm_cost = float('inf')```8. 定义更新粒子位置和速度的函数```pythondef update_particle(self, particle):w = 0.729c1 = 1.49445c2 = 1.49445r1 = random.random()r2 = random.random()new_velocity = w * particle.velocity + c1 * r1 * (particle.best_position - particle.position) + c2 * r2 * (self.best_swarm_position - particle.position)new_position = particle.position + new_velocityparticle.velocity = new_velocityparticle.position = new_position```9. 定义运行PSO算法的函数```pythondef run(self):for i in range(self.max_iter):for particle in self.swarm:cost = self.cf(particle.position)if cost < particle.best_cost:particle.best_position = particle.positionparticle.best_cost = costif cost < self.best_swarm_cost:self.best_swarm_position = particle.positionself.best_swarm_cost = costfor particle in self.swarm:self.update_particle(particle)```10. 实例化神经网络和PSO算法,运行PSO优化BP算法```pythonnn = NeuralNetwork(2, 3, 1)pso = PSO(nn.mse_loss, nn.weights_ih.size +nn.weights_ho.size + nn.bias_h.size + nn.bias_o.size, 20, 100) pso.run()```以上是使用Python实现PSO优化BP算法的主要代码段。

BP神经网络算法的C语言实现代码

BP神经网络算法的C语言实现代码

BP神经网络算法的C语言实现代码以下是一个BP神经网络的C语言实现代码,代码的详细说明可以帮助理解代码逻辑:```c#include <stdio.h>#include <stdlib.h>#include <math.h>#define INPUT_SIZE 2#define HIDDEN_SIZE 2#define OUTPUT_SIZE 1#define LEARNING_RATE 0.1//定义神经网络结构体typedef structdouble input[INPUT_SIZE];double hidden[HIDDEN_SIZE];double output[OUTPUT_SIZE];double weights_ih[INPUT_SIZE][HIDDEN_SIZE];double weights_ho[HIDDEN_SIZE][OUTPUT_SIZE];} NeuralNetwork;//激活函数double sigmoid(double x)return 1 / (1 + exp(-x));//创建神经网络NeuralNetwork* create_neural_networNeuralNetwork* nn =(NeuralNetwork*)malloc(sizeof(NeuralNetwork));//初始化权重for (int i = 0; i < INPUT_SIZE; i++)for (int j = 0; j < HIDDEN_SIZE; j++)nn->weights_ih[i][j] = (double)rand( / RAND_MAX * 2 - 1;}}for (int i = 0; i < HIDDEN_SIZE; i++)for (int j = 0; j < OUTPUT_SIZE; j++)nn->weights_ho[i][j] = (double)rand( / RAND_MAX * 2 - 1;}}return nn;//前向传播void forward(NeuralNetwork* nn)//计算隐藏层输出for (int i = 0; i < HIDDEN_SIZE; i++)double sum = 0;for (int j = 0; j < INPUT_SIZE; j++)sum += nn->input[j] * nn->weights_ih[j][i];}nn->hidden[i] = sigmoid(sum);}//计算输出层输出for (int i = 0; i < OUTPUT_SIZE; i++)double sum = 0;for (int j = 0; j < HIDDEN_SIZE; j++)sum += nn->hidden[j] * nn->weights_ho[j][i];}nn->output[i] = sigmoid(sum);}void backpropagation(NeuralNetwork* nn, double target)//计算输出层误差double output_error[OUTPUT_SIZE];for (int i = 0; i < OUTPUT_SIZE; i++)double delta = target - nn->output[i];output_error[i] = nn->output[i] * (1 - nn->output[i]) * delta;}//更新隐藏层到输出层权重for (int i = 0; i < HIDDEN_SIZE; i++)for (int j = 0; j < OUTPUT_SIZE; j++)nn->weights_ho[i][j] += LEARNING_RATE * nn->hidden[i] * output_error[j];}}//计算隐藏层误差double hidden_error[HIDDEN_SIZE];for (int i = 0; i < HIDDEN_SIZE; i++)double delta = 0;for (int j = 0; j < OUTPUT_SIZE; j++)delta += output_error[j] * nn->weights_ho[i][j];}hidden_error[i] = nn->hidden[i] * (1 - nn->hidden[i]) * delta;}//更新输入层到隐藏层权重for (int i = 0; i < INPUT_SIZE; i++)for (int j = 0; j < HIDDEN_SIZE; j++)nn->weights_ih[i][j] += LEARNING_RATE * nn->input[i] * hidden_error[j];}}void train(NeuralNetwork* nn, double input[][2], double target[], int num_examples)int iteration = 0;while (iteration < MAX_ITERATIONS)double error = 0;for (int i = 0; i < num_examples; i++)for (int j = 0; j < INPUT_SIZE; j++)nn->input[j] = input[i][j];}forward(nn);backpropagation(nn, target[i]);error += fabs(target[i] - nn->output[0]);}//判断误差是否已达到允许范围if (error < 0.01)break;}iteration++;}if (iteration == MAX_ITERATIONS)printf("Training failed! Error: %.8lf\n", error); }void predict(NeuralNetwork* nn, double input[]) for (int i = 0; i < INPUT_SIZE; i++)nn->input[i] = input[i];}forward(nn);printf("Prediction: %.8lf\n", nn->output[0]); int maiNeuralNetwork* nn = create_neural_network(; double input[4][2] ={0,0},{0,1},{1,0},{1,1}};double target[4] =0,1,1,};train(nn, input, target, 4);predict(nn, input[0]);predict(nn, input[1]);predict(nn, input[2]);predict(nn, input[3]);free(nn);return 0;```以上代码实现了一个简单的BP神经网络,该神经网络包含一个输入层、一个隐藏层和一个输出层。

遗传算法(GeneticAlgorithm,GA)及MATLAB实现

遗传算法(GeneticAlgorithm,GA)及MATLAB实现

遗传算法(GeneticAlgorithm,GA)及MATLAB实现遗传算法概述:• 遗传算法(Genetic Algorithm,GA)是⼀种进化算法,其基本原理是仿效⽣物界中的“物竞天择、适者⽣存”的演化法则,它最初由美国Michigan⼤学的J. Holland教授于1967年提出。

• 遗传算法是从代表问题可能潜在的解集的⼀个种群(population)开始的,⽽⼀个种群则由经过基因(gene)编码的⼀定数⽬的个体(individual)组成。

因此,第⼀步需要实现从表现型到基因型的映射即编码⼯作。

初代种群产⽣之后,按照适者⽣存和优胜劣汰的原理,逐代(generation)演化产⽣出越来越好的近似解,在每⼀代,根据问题域中个体的适应度(fitness)⼤⼩选择个体,并借助于⾃然遗传学的遗传算⼦(genetic operators)进⾏组合交叉和变异,产⽣出代表新的解集的种群。

这个过程将导致种群像⾃然进化⼀样,后⽣代种群⽐前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。

• 遗传算法有三个基本操作:选择(Selection)、交叉(Crossover)和变异(Mutation)。

• (1)选择。

选择的⽬的是为了从当前群体中选出优良的个体,使它们有机会作为⽗代为下⼀代繁衍⼦孙。

根据各个个体的适应度值,按照⼀定的规则或⽅法从上⼀代群体中选择出⼀些优良的个体遗传到下⼀代种群中。

选择的依据是适应性强的个体为下⼀代贡献⼀个或多个后代的概率⼤。

• (2)交叉。

通过交叉操作可以得到新⼀代个体,新个体组合了⽗辈个体的特性。

将群体中的各个个体随机搭配成对,对每⼀个个体,以交叉概率交换它们之间的部分染⾊体。

• (3)变异。

对种群中的每⼀个个体,以变异概率改变某⼀个或多个基因座上的基因值为其他的等位基因。

同⽣物界中⼀样,变异发⽣的概率很低,变异为新个体的产⽣提供了机会。

遗传算法的基本步骤:1)编码:GA在进⾏搜索之前先将解空间的解数据表⽰成遗传空间的基因型串结构数据,这些串结构数据的丌同组合便构成了丌同的点。

第6章 基于GA优化的BP网络算法分析与MATLAB实现

第6章  基于GA优化的BP网络算法分析与MATLAB实现

第六章
MATLAB优化算法案例分析与应用
图6- 14 某工作面温度、湿度与通风量之间 的关系图
第六章
MATLAB优化算法案例分析与应用
适 应 度 曲 线 终 止 代 数 = 10 4.5
平均适应度
4
适应度
3.5
3
1
2
3
4
5
6
7
8
9 10 11
进化代数
图6- 15 遗传算法适应度曲线
第六章
MATLAB优化算法案例分析与应用
%
标记中心
[A, id] = max([s.Area]);
bw(labelmatrix(cc)~=id)=0;
bw = imdilate(bw,blk); % 膨胀
im_sep = immultiply(im_org,bw);
% figure,imshow(im_sep);title('seperate brain,gray matter and white matter')
%% 大脑灰白质提取 % lev2 = 50/255; % 阈值
% L = zeros(size(im_sep)); %0=背景
% L(im_sep<lev2 & im_sep>0) = 2; %2=灰质
第六章 MRI大 脑 图 像
MATLAB优化算法案例分析与应用
图6- 3 大脑灰白质原始图像
第六章
-0.1 -0.12
0
GA BP预 测 误 差 回归预测误差
5
10 15 20 25 30 35 40 45
误 差 error
图6- 18 GA_BP预测和回归预测工作面误差 比较

BP神经网络详细代码

BP神经网络详细代码

运用BP神经网络进行预测代码如下:clcclear allclose all%bp神经网络预测%输入输出赋值p=[493 372 445;372 445 176;445 176 235;176 235 378;235 378 429;378 429 561;429 561 651;561 651 467;651 467 527;467 527 668;527 668 841; 668 841 526;841 526 480;526 480 567;480 567 685]';t=[176 235 378 429 561 651 467 527 668 841 526 480 567 685 507];%数据归一化[p1ps]=mapminmax(p);[t1ts]=mapminmax(t);%数据集分配[trainsample.pvalsample.ptestsample.p] =dividerand(p0.70.150.15);[alsample.ttestsample.t] =dividerand(t0.70.150.15);%建立BP神经网络TF1='tansig';TF2='purelin';net=newff(minmax(p)[101]{TF1 TF2}'traingdm');%网络参数的设置net.trainParam.epochs=10000;%训练次数设置net.trainParam.goal=1e-7;%训练目标设置net.trainParam.lr=0.01;%学习率设置net.trainParam.mc=0.9;%动量因子的设置net.trainParam.show=25;%显示的间隔次数% 指定训练参数net.trainFcn='trainlm';[nettr]=train(nettrainsample.ptrainsample.t);%计算仿真[normtrainoutputtrainPerf]=sim(nettrainsample.p[][]trainsample.t);%训练数据,经BP得到的结果[normvalidateoutputvalidatePerf]=sim(netvalsample.p[][]valsample.t);%验证数据,经BP得到的结果[normtestoutputtestPerf]=sim(nettestsample.p[][]testsample.t);%测试数据,经BP得到的结果%计算结果反归一化,得到拟合数据trainoutput=mapminmax('reverse'normtrainoutputts);validateoutput=mapminmax('reverse'normvalidateoutputts);testoutput=mapminmax('reverse'normtestoutputts);%输入数据反归一化,得到正式值trainvalue=mapminmax('reverse'trainsample.tts);%正式的训练数据validatevalue=mapminmax('reverse'valsample.tts);%正式的验证数据testvalue=mapminmax('reverse'testsample.tts);%正式的测试数据%输入要预测的数据pnewpnew=[313256239]';pnewn=mapminmax(pnew);anewn=sim(netpnewn);anew=mapminmax('reverse'anewnts);%绝对误差的计算errors=trainvalue-trainoutput;%plotregression拟合图figureplotregression(trainvaluetrainoutput)%误差变化图figureplot(1:length(errors)errors'-b')title('误差变化图')%误差值的正态性的检验figurehist(errors);%频数直方图figurenormplot(errors);%Q-Q图[muhatsigmahatmucisigmaci]=normfit(errors);%参数估计均值方差均值的0.95置信区间方差的0.95置信区间[h1sigci]= ttest(errorsmuhat);%假设检验figure ploterrcorr(errors);%绘制误差的自相关图figure parcorr(errors);%绘制偏相关图。

BP神经网络算法代码

BP神经网络算法代码

BP神经网络算法代码以下是一个简单实现的BP神经网络算法代码,实现了一个简单的二分类任务。

代码主要分为四个部分:数据准备、网络搭建、训练和预测。

```pythonimport numpy as np#数据准备def prepare_data(:X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]]) # 输入数据return X, y#网络搭建def build_network(X, y, hidden_dim):input_dim = X.shape[1] # 输入维度output_dim = y.shape[1] # 输出维度#初始化权重和偏置np.random.seed(0)W1 = np.random.randn(input_dim, hidden_dim) /np.sqrt(input_dim)b1 = np.zeros((1, hidden_dim))W2 = np.random.randn(hidden_dim, output_dim) / np.sqrt(hidden_dim)b2 = np.zeros((1, output_dim))return W1, b1, W2, b2#前向传播def forward_propagation(X, W1, b1, W2, b2):z1 = np.dot(X, W1) + b1a1 = sigmoid(z1)z2 = np.dot(a1, W2) + b2a2 = sigmoid(z2)return a1, a2#激活函数def sigmoid(x):return 1 / (1 + np.exp(-x))#反向传播def backward_propagation(X, y, a1, a2, W1, W2): m = X.shape[0] # 样本数量#计算损失loss = np.sum((a2-y)**2) / (2*m)#计算梯度delta2 = 1/m * (a2-y) * a2 * (1-a2)dW2 = np.dot(a1.T, delta2)db2 = np.sum(delta2, axis=0, keepdims=True)delta1 = np.dot(delta2, W2.T) * a1 * (1-a1)dW1 = np.dot(X.T, delta1)db1 = np.sum(delta1, axis=0)return loss, dW1, db1, dW2, db2#更新参数def update_parameters(W1, b1, W2, b2, dW1, db1, dW2, db2, learning_rate):W1 -= learning_rate * dW1b1 -= learning_rate * db1W2 -= learning_rate * dW2b2 -= learning_rate * db2return W1, b1, W2, b2#训练def train(X, y, hidden_dim, num_epochs, learning_rate):W1, b1, W2, b2 = build_network(X, y, hidden_dim)for epoch in range(num_epochs):a1, a2 = forward_propagation(X, W1, b1, W2, b2)loss, dW1, db1, dW2, db2 = backward_propagation(X, y, a1, a2, W1, W2)W1, b1, W2, b2 = update_parameters(W1, b1, W2, b2, dW1, db1, dW2, db2, learning_rate)if (epoch+1) % 100 == 0:print("Epoch {}: loss = {}".format(epoch+1, loss))return W1, b1, W2, b2#预测def predict(X, W1, b1, W2, b2):_, a2 = forward_propagation(X, W1, b1, W2, b2)predictions = (a2 > 0.5).astype(int)return predictions#主函数def main(:X, y = prepare_datahidden_dim = 3num_epochs = 1000learning_rate = 0.1W1, b1, W2, b2 = train(X, y, hidden_dim, num_epochs, learning_rate)predictions = predict(X, W1, b1, W2, b2)print("Predictions:", predictions)if __name__ == "__main__":main```注意:这段代码只是一个简单的实现,可能在复杂任务上效果不佳。

GA-BP

GA-BP
K=K(:,randperm(n));
k1=K(1:m-1,1:n);
k2=K(m,1:n);
% 数据归一化
[kn,ps1]= mapminmax(k1,ps1);
%% BP神经网络
% 网络创建
net=newff(minmax(p),[S1,1],{'tansig','purelin'},'trainlm'); %%%S1为隐藏层的层数,7为输出层的层数,tansig为训练隐藏层数据的函数,purelin为训练输出层数据的函数
day=DAY';
day=day(:,2:end);
% 输入和输出样本
[m1,n1]=size(day);
%%%%%随机打乱矩阵的列,相当于随机进行样本排序nl变量长度,randperm(n1)产生长度为n的随机数列
day=day(:,randperm(n1));
A=day(m1,1:n1);
% 设置训练参数
net.trainParam.show=10;
net.trainParam.epochs=2000;
net.trainParam.goal=1.0e-3;
net.trainParam.lr=0.3;
% 网络训练
[net,tr]=train(net,p,t);
%BP仿真测试1 训练集精度
%% 程序说明
% 主程序:ga_bp.m
% 适应度函数:gabpEval.m
% 编解码子函数:gadecod.m
% 使用前需安装gaot工具箱,上述三个文件需放在同一文件夹中且将该文件夹
% 设置为当前工作路径

pso优化bp算法python代码精选全文完整版

pso优化bp算法python代码精选全文完整版

可编辑修改精选全文完整版pso优化bp算法python代码PSO优化BP算法Python代码BP神经网络是一种常用的人工神经网络,它可以用于分类、回归等任务。

但是,BP神经网络的训练过程需要大量的计算和时间,而且容易陷入局部最优解。

为了解决这些问题,我们可以使用粒子群优化(PSO)算法来优化BP神经网络。

PSO算法是一种基于群体智能的优化算法,它模拟了鸟群或鱼群等生物的行为,通过不断地搜索和迭代,找到最优解。

在PSO算法中,每个粒子代表一个解,它们通过不断地移动和更新自己的位置和速度,来寻找最优解。

下面是使用Python实现PSO优化BP算法的代码:```pythonimport numpy as npimport random# 定义BP神经网络类class BPNN:def __init__(self, input_size, hidden_size, output_size):self.input_size = input_sizeself.hidden_size = hidden_sizeself.output_size = output_sizeself.W1 = np.random.randn(self.input_size, self.hidden_size) self.W2 = np.random.randn(self.hidden_size, self.output_size) # 定义sigmoid函数def sigmoid(self, x):return 1 / (1 + np.exp(-x))# 定义前向传播函数def forward(self, X):self.z2 = np.dot(X, self.W1)self.a2 = self.sigmoid(self.z2)self.z3 = np.dot(self.a2, self.W2)y_hat = self.sigmoid(self.z3)return y_hat# 定义损失函数def loss(self, X, y):y_hat = self.forward(X)J = 0.5 * sum((y - y_hat) ** 2)return J# 定义反向传播函数def backward(self, X, y):y_hat = self.forward(X)delta3 = np.multiply(-(y - y_hat), self.sigmoid(self.z3) * (1 - self.sigmoid(self.z3)))dJdW2 = np.dot(self.a2.T, delta3)delta2 = np.dot(delta3, self.W2.T) * self.sigmoid(self.z2) * (1 - self.sigmoid(self.z2))dJdW1 = np.dot(X.T, delta2)return dJdW1, dJdW2# 定义PSO算法类class PSO:def __init__(self, n_particles, input_size, hidden_size, output_size, max_iter, c1, c2, w):self.n_particles = n_particlesself.input_size = input_sizeself.hidden_size = hidden_sizeself.output_size = output_sizeself.max_iter = max_iterself.c1 = c1self.c2 = c2self.w = wself.particles = []self.gbest = Noneself.gbest_loss = float('inf')# 初始化粒子群for i in range(self.n_particles):bpnn = BPNN(self.input_size, self.hidden_size, self.output_size) particle = {'position': [bpnn.W1, bpnn.W2], 'velocity': [np.zeros((self.input_size, self.hidden_size)), np.zeros((self.hidden_size, self.output_size))], 'pbest': None, 'pbest_loss': float('inf')}self.particles.append(particle)# 定义更新粒子位置和速度的函数def update(self):for particle in self.particles:# 更新速度particle['velocity'][0] = self.w * particle['velocity'][0] + self.c1 * random.random() * (particle['pbest'][0] - particle['position'][0]) + self.c2 * random.random() * (self.gbest[0] - particle['position'][0])particle['velocity'][1] = self.w * particle['velocity'][1] + self.c1 * random.random() * (particle['pbest'][1] - particle['position'][1]) + self.c2 * random.random() * (self.gbest[1] - particle['position'][1])# 更新位置particle['position'][0] += particle['velocity'][0]particle['position'][1] += particle['velocity'][1]# 更新pbest和gbestbpnn = BPNN(self.input_size, self.hidden_size, self.output_size) bpnn.W1 = particle['position'][0]bpnn.W2 = particle['position'][1]loss = bpnn.loss(X, y)if loss < particle['pbest_loss']:particle['pbest'] = [bpnn.W1, bpnn.W2]particle['pbest_loss'] = lossif loss < self.gbest_loss:self.gbest = [bpnn.W1, bpnn.W2]self.gbest_loss = loss# 定义训练函数def train(self, X, y):for i in range(self.max_iter):self.update()print('Iteration:', i, 'Loss:', self.gbest_loss)# 测试代码X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])y = np.array([[0], [1], [1], [0]])pso = PSO(n_particles=10, input_size=2, hidden_size=4, output_size=1,max_iter=100, c1=2, c2=2, w=0.8)pso.train(X, y)```在上面的代码中,我们首先定义了一个BP神经网络类,包括前向传播、损失函数和反向传播等方法。

GA-BP神经网络在NVH中的应用

GA-BP神经网络在NVH中的应用

1、BP神经网络介绍:BP神经网络是多层前向型神经网络,一般是由三层神经元构成的,每层有多个神经元且每个神经元自身相互独立。

当三层网络模型构建成功后给网络一个输入样本,样本向量开始由输入层神经元传输到隐含层单元,经过中间层逐层处理后又顺序输出到输出层单元,通过传递到输出层单元得出一个实际的样本输出,这种过程是逐层向前的传播修改状态,这就是前向传播过程。

当输出的样本向量与期望的输出不符时就产生了误差,误差需要逆向传播,逆向传播的过程也是逐层传递并修改各层连接权值的过程。

这样的传递过程需要不断的进行,直到一组训练模式结束或者误差达到了极小值,输出结果满足期望输出为止。

通过实验知道经过不断的修改神经元之间的权值和偏置可以使网络的输出在误差允许的范围内拟合所有的训练输入。

这个拟合的过程就是神经网络训练的过程,BP网络的梯度下降算法是比较快速的权值调整算法,可以不断地进行误差反向传输从而调整网络结构的权值和阈值达到预期目标。

由于BP神经网络的功能特性使它成为使用最为广泛的网络模型之一。

图1 BP神经网络基本结构2、遗传算法原理介绍:遗传算法(GeneticAlgorithm,GA)的理论是根据达尔文进化论而设计出来的算法,大体意思是生物是朝着好的方向进化的,在进化的过程中会自动选择优良基因淘汰劣等基因。

向好的方向进化就是最优解的方向,优良的基因是符合当前条件的样本基因,可以得到充分的选择。

遗传学机理中的生物进化过程中生物的一连串过程包括选测、交叉和变异三个主要的行为机制。

因此遗传算法也主要分为选择、交叉和变异这三类操作完成淘汰机制,使训练后的自我进化按照条件朝着有力的方向进行,最终取得最优个体和解集合。

作为一种算法的形成还需要编码、遗传变异计算适应度和解码等。

遗传算法的实现过程和运算过程如图2所示。

首先需要通过编码组成初始群体形成了遗传算法的基础;以后就是选择交叉和变异再选择的过程。

其中种群中个体的遗传算子的操作都是在一定概率的情况下发生的。

第6章 基于GA优化的BP网络算法分析与MATLAB实现

第6章  基于GA优化的BP网络算法分析与MATLAB实现
按照顺序排列是789,乙手上也有三个数字456,且按照顺序排列是456,指 定一个规则“如果抛一个骰子,如果得到数字1,则甲手上的7和乙手上的4
交换,此时甲的数字为489,乙的数字为756;如果为数字2,则甲手上的8
和乙手上的5 交换,此时甲的数字为 759,乙的数字为486;如果为数字 3, 则甲手上的9 和乙手上的6 交换,此时甲的数字为 786,乙的数字为459;如
MATLAB优化算法案例分析与应用
% 输
% 隐
藏层
outputnum = 1; 出层 % 输
%构建网络
nntwarn off 告消除 net=newff(input_train,output_train,hiddennum); % 警
第六章
MATLAB优化算法案例分析与应用
交叉操作具体又是什么含义呢?打个比方,甲手上有789这三个数字,且
得到相应的权值和阈值,从而可以稳定的控制 BP神经网络结构
,实现问题的快速高效求解,并且大大地提高算法稳定性。
第六章
MATLAB优化算法案例分析与应用
•6.1 遗传算法
• 遗传算法(GA)是模仿自然界生物进化理论发展而来的一 个高度并行,自适应检测算法。遗传算法通过仿真生物个体, 区别个体基因变化信息来保留高适应环境的基因特征,消除低 适应环境的基因特征,以实现优化目的。遗传算法能够在数据
0.08
MATLAB优化算法案例分析与应用
GA BP预 测 误 差 0.06 0.04 0.02 0 -0.02 -0.04 -0.06 -0.08 -0.1 -0.12 回归预测误差
0
5
10
15
20 25 误 差 error
30Leabharlann 354045图6- 18 GA_BP预测和回归预测工作面误差 比较

GA优化BP网络代码

GA优化BP网络代码

根据他人的代码,稍微改进后,并附上个人对代码的理解情况。

采用遗传算法(GA)对BP网络的权值进行优化。

其思路如下:(1)根据BP的输入值和目标值,确定好BP网络的输入层单元数、隐层单元数(本例只处理1个隐层的情况;多个隐层的方法类似,主要是在构造GA种群基因时有所差异)、以及输出层的单元个数。

(2)根据BP网络的各层单元数来确定其输入层与隐层之间的权值w12,和隐层输出值b1,以及隐层到输出层的权值w23,和输出层输出b2。

这四个值各个元素的组合就组成了一个基因,即根据他们来确定基因长度。

这一步非常重要!可根据以下代码进行理解。

% 权值矩阵分配% 输入到隐层用w_he表示,3x4,3表示输入层个数,4表示输出层个数% w_he=[chrom(i,1) chrom(i,5) chrom(i,9) chrom(i,13);% chrom(i,2) chrom(i,6) chrom(i,10) chrom(i,14);% chrom(i,3) chrom(i,7) chrom(i,11) chrom(i,15)];%以下for循环的作用是将某个基因,分别转换为bp网络所对应的权值或输出值。

% 其中chrom(i,:)表示第i个基因的所有元素% in_num表述输入层单元个数% n表示基本的元素个数% w_he表示输入层到输出层权值;w_out表示因此到输出层的权值% b_he表示隐层输出向量;b_out表示输出层的输出向量。

for j=1:nw_he(:,j)=chrom(i,(j-1)*(in_num+1)+1:j*(in_num+1)-1);w_out(j)=chrom(i,(in_num+1)*n+j);b_he(j)=chrom(i,(in_num+1)*j);endb_out=chrom(i,len);% 隐层到输出层用w_out表示,4x1% w_out=[chrom(i,17) chrom(i,18) chrom(i,19) chrom(i,20)];% b_he=[chrom(i,4) chrom(i,8) chrom(i,12) chrom(i,16)];% b_out=chrom(i,21);(3)确定好权值与基因的对应关系后。

压铸工艺参数GA-BP网络优化

压铸工艺参数GA-BP网络优化

压铸工艺参数GA-BP网络优化赵云龙【摘要】针对遗传算法在全局寻优的特点和BP神经网络在局部精确搜索的特性,通过采用遗传算法优化神经网络初始权值,加速BP网络训练速度。

通过算法比较和实例结果分析,表明该算法可以有效、可靠地运用铸造工艺参数优选中,并可方便地应用于专家系统。

【期刊名称】《电大理工》【年(卷),期】2013(000)004【总页数】3页(P17-18,37)【关键词】GA-BP;遗传算法;神经网络【作者】赵云龙【作者单位】辽宁装备制造职业技术学院沈阳 110161【正文语种】中文对于铸造生产,由于其过程复杂、影响因素很多,很难建立一个足够精确的模型来描述这样一个系统。

利用常规的控制方法很难解决该问题,近年来,人工神经网络的发展为解决这个问题提供了有效的途径。

BP神经网络有广泛的用途,并且人们对它的理论研究最透彻。

目前,在神经网络的实际应用中,绝大多数的神经网络模型是采用BP网络和它的变化形式,它体现了神经网络最精华的部分[1]。

BP算法的优点是寻优具有精确性,但同时存在一些缺点,最主要的是易陷入局部极小、收敛速度慢和引起振荡效应等。

由于遗传算法具有很强的宏观搜索能力,且能以较大的概率找到全局最优解,所以用它来完成前期的搜索能较好的克服BP算法的缺点。

本文将二者结合起来,形成GA-BP混合算法,达到优化网络的目的。

1 GA-BP的原理GA-BP算法就是在BP算法之前,先用GA在随机点集中遗传出优化初值,以此作为BP算法的初始权值,再由BP算法进行训练,这就是GA-BP算法的原理。

用GA算法用来调整BP网的权值,采用实数编码方案,然后随机产生多组权值,组成多个种群,种群大小的设定并没有现成的公式,只能凭经验来设定[6]。

由于网络规模小,因此设定种群大小在5—20之间。

其参数选取为:初始群体数为20,交叉概率 cp=0.5,变异概率 rP=0.02,误差精度e=0.01GA-BP算法的步骤:step1初始化种群P,包括交叉规模、交叉概率Pc、突变概率Pm以及BP给(rsw、st、sqv、qθ)随机赋一个较小的值。

遗传算法优化的 BP 神经网络在 EDX RF 中对钛铁元素含量的预测

遗传算法优化的 BP 神经网络在 EDX RF 中对钛铁元素含量的预测

遗传算法优化的 BP 神经网络在 EDX RF 中对钛铁元素含量的预测王俊;刘明哲;庹先国;李哲;李磊;石睿【期刊名称】《原子能科学技术》【年(卷),期】2015(000)006【摘要】在能量色散X荧光分析(EDXRF)技术中,受均匀效应、颗粒效应和基体效应等的干扰,定量分析精度受到影响。

本文针对这一问题提出了遗传算法(GA )优化BP神经网络(GA‐BP)的混合算法,该算法无需考虑元素浓度和射线强度之间的复杂关系。

遗传算法优化BP神经网络的目的是为了获得更好的网络初始权值和阈值,其基本思想是:将初始化的BP神经网络均方根误差的倒数编码为遗传算法中个体的适应度;初始的权值和阈值用遗传算法中的个体代替,然后通过选择、交叉和变异操作挑选出最优个体,最后通过解码用最优的权值和阈值创建一个新的BP网络模型。

攀枝花矿区5类矿样中钛和铁含量的整体预测和分类预测实验表明,分类预测效果远好于整体预测。

预测值与化学分析值比较结果表明,其中76.7%的样品相对误差小于2%,表明了该方法在元素间基体效应校正上的有效性。

【总页数】6页(P1143-1148)【作者】王俊;刘明哲;庹先国;李哲;李磊;石睿【作者单位】成都理工大学地质灾害防治与地质环境保护国家重点实验室,四川成都 610059;成都理工大学地质灾害防治与地质环境保护国家重点实验室,四川成都 610059;成都理工大学地质灾害防治与地质环境保护国家重点实验室,四川成都 610059; 西南科技大学核废物与环境安全国防重点学科实验室,四川绵阳621010;成都理工大学地质灾害防治与地质环境保护国家重点实验室,四川成都610059;成都理工大学地质灾害防治与地质环境保护国家重点实验室,四川成都610059;成都理工大学地质灾害防治与地质环境保护国家重点实验室,四川成都610059【正文语种】中文【中图分类】TL99【相关文献】1.BP神经网络预测EDXRF中铁、钛元素含量 [J], 何泽;颜瑜成;刘祥和;梁超;雷洲阳;刘明哲2.基于遗传算法优化的BP神经网络在考研结果预测中的应用 [J], 李驰3.基于遗传算法优化的BP神经网络在考研结果预测中的应用 [J], 李驰4.遗传算法优化BP神经网络在山洪临界雨量预测中的应用研究 [J], 邓成靓;宁芊5.基于改进遗传算法优化BP神经网络的土壤湿度预测模型 [J], 王佳楠;王玉莹;何淑林;时龙闽;张艳滴;孙海洋;刘勇因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

根据他人的代码,稍微改进后,并附上个人对代码的理解情况。

采用遗传算法(GA)对BP网络的权值进行优化。

其思路如下:(1)根据BP的输入值和目标值,确定好BP网络的输入层单元数、隐层单元数(本例只处理1个隐层的情况;多个隐层的方法类似,主要是在构造GA种群基因时有所差异)、以及输出层的单元个数。

(2)根据BP网络的各层单元数来确定其输入层与隐层之间的权值w12,和隐层输出值b1,以及隐层到输出层的权值w23,和输出层输出b2。

这四个值各个元素的组合就组成了一个基因,即根据他们来确定基因长度。

这一步非常重要!可根据以下代码进行理解。

%权值矩阵分配%输入到隐层用w_he表示,3x4,3表示输入层个数,4表示输出层个数%w_he=[chrom(i,1)chrom(i,5)chrom(i,9)chrom(i,13);%chrom(i,2)chrom(i,6)chrom(i,10)chrom(i,14);%chrom(i,3)chrom(i,7)chrom(i,11)chrom(i,15)];%以下for循环的作用是将某个基因,分别转换为bp网络所对应的权值或输出值。

%其中chrom(i,:)表示第i个基因的所有元素%in_num表述输入层单元个数%n表示基本的元素个数%w_he表示输入层到输出层权值;w_out表示因此到输出层的权值%b_he表示隐层输出向量;b_out表示输出层的输出向量。

for j=1:nw_he(:,j)=chrom(i,(j-1)*(in_num+1)+1:j*(in_num+1)-1);w_out(j)=chrom(i,(in_num+1)*n+j);b_he(j)=chrom(i,(in_num+1)*j);endb_out=chrom(i,len);%隐层到输出层用w_out表示,4x1%w_out=[chrom(i,17)chrom(i,18)chrom(i,19)chrom(i,20)];%b_he=[chrom(i,4)chrom(i,8)chrom(i,12)chrom(i,16)];%b_out=chrom(i,21);(3)确定好权值与基因的对应关系后。

利用GA对BP网络权值进行优化,也即寻找GA中最佳的适应度的基因。

适应度函数则是利用BP网络构造,即把基因转换成bp权值,再输入样本值查看其误差大小。

(4)寻找最优基因就是GA的基本步骤,选择、交叉、变异,这里就不详述了。

下面附上代码。

如果看懂了代码,请根据自己的需要进行调整,以达到最佳效果。

按照GA流程来看代码,真的很简单!通过调用此函数即可实现其训练BP_GA(p,aim,n)function net=BP_GA(p,aim,n)%p,训练样本列向量矩阵%aim,目标值列向量%n隐层单元个数%源程序为仿真《西北师范大学学报》的遗传主程序%计算的染色体均方误差fitness=8/sum(error.^2)%经过简单改造%ticPopsize=100;%种群规模P_mutation=0.1;%变异系数P_cross=0.6;%交叉系数m=2;%权值和阈值的初始化范围%p=[00001111;%00110011;%10101010];%输入值%aim=[01101001]';%输出值num=size(p,1)*n+2*n+1;chrom=2*m.*rand(Popsize,num)-m;%产生初始种群[40x21]矩阵,范围【-m,m】%temchrom=zeros(size(chrom));ecope=100;%迭代次数currentbest=zeros(ecope,num);%每一步迭代的最优数组currentbest_value=zeros(ecope,1);fitness_gene=fitness(chrom,p,aim,n);%计算的染色体均方误差fitness=8/sum(error.^2)[c_value c_order]=max(fitness_gene);for k=1:ecope%保留当前最好染色体[c_value c_order]=max(fitness_gene);currentbest(k,:)=chrom(c_order,:);currentbest_value(k)=c_value;%选择过程fit=cumsum(fitness_gene)/sum(fitness_gene);N=Popsize;s=select(fit,N);temchrom=chrom(s,:);%将选择的储存到临时变量中%交叉P=rand(1,N);prob=find(P<P_cross);crosschrom=temchrom(prob,:);%从临时变量中选择部分进行交叉crosschrom=cross_over(crosschrom);temchrom(prob,:)=crosschrom;%临时变量中只有部分进行了交叉%变异temchrom=mutation(temchrom,P_mutation);chrom=temchrom;%计算交叉变异之后的染色体的适应度fitness_gene=fitness(chrom,p,aim,n);fit=cumsum(fitness_gene)/sum(fitness_gene);N=Popsize;s=select(fit,N-1);[s_value s_order]=max(fitness_gene);if s_value<currentbest_value(k)%精因选择chrom=[chrom(s,:);currentbest(k,:)];fitness_gene=[fitness_gene(s);currentbest_value(k)];elses=[s s_order(1)];chrom=chrom(s,:);fitness_gene=fitness_gene(s);endendi=100;in_num=size(p,1);for j=1:nw_he(:,j)=currentbest(i,(j-1)*(in_num+1)+1:j*(in_num+1)-1);w_out(j)=currentbest(i,(in_num+1)*n+j);b_he(j)=currentbest(i,(in_num+1)*j);endsamples=size(p,2);b_out=currentbest(i,num);out=zeros(size(aim));for j=1:size(p,2)for s=1:n%隐层的输入与输出in_he(s)=sum(w_he(:,s).*p(:,j))+b_he(s);%隐层的输入out_he(s)=(1-exp(in_he(s)))/(1+exp(in_he(s)));%隐层的输出end%输出层的输入与输出in_out=w_out*out_he'+b_out;out_out=1/(1+exp(-in_out));out(j)=out_out;endnet=currentbest(ecope,:);%figure%plot(aim,'-o')%hold on%plot(out,'r-*')end%图表显示%i=1:k;%y=1./currentbest_value(1:k,:);%%plot(i,y,'r:');%title('sum root mean square error'); %%toc%y(k)function y=fitness(chrom,p,aim,n)%global P_cross P_mutation%chrom,基因种群矩阵%p,样本矩阵%aim,目标矩阵,暂时只支持向量,即网络输出层只有一个单元%n,隐层的单元个数[Popsize len]=size(chrom);[in_num,samples]=size(p);%样本数fitness_gene=zeros(Popsize,1);in_he=zeros(n,1);out_he=zeros(n,1);in_out=0;out_out=0;w_he=zeros(in_num,n);%3x4w_out=zeros(1,n);%1x4b_he=zeros(1,n);%b_out=zeros(1,1);%权值和阈值的分配设置for i=1:Popsize%权值矩阵分配%输入到隐层用w_he表示,3x4,3表示输入层个数,4表示输出层个数%w_he=[chrom(i,1)chrom(i,5)chrom(i,9)chrom(i,13);%chrom(i,2)chrom(i,6)chrom(i,10)chrom(i,14);%chrom(i,3)chrom(i,7)chrom(i,11)chrom(i,15)];for j=1:nw_he(:,j)=chrom(i,(j-1)*(in_num+1)+1:j*(in_num+1)-1);w_out(j)=chrom(i,(in_num+1)*n+j);b_he(j)=chrom(i,(in_num+1)*j);endb_out=chrom(i,len);%隐层到输出层用w_out表示,4x1%w_out=[chrom(i,17)chrom(i,18)chrom(i,19)chrom(i,20)];%b_he=[chrom(i,4)chrom(i,8)chrom(i,12)chrom(i,16)];%b_out=chrom(i,21);error=zeros(samples,1);for j=1:samplesfor s=1:n%隐层的输入与输出in_he(s)=sum(w_he(:,s).*p(:,j))+b_he(s);%隐层的输入out_he(s)=(1-exp(in_he(s)))/(1+exp(in_he(s)));%隐层的输出end%输出层的输入与输出in_out=w_out*out_he+b_out;out_out=1/(1+exp(-in_out));%计算各个样本误差error(j)=aim(j)-out_out;endfitness_gene(i)=samples/sum(error.^2);%染色体均方误差%误差越小,fitness_gene越大endy=fitness_gene;function y=cross_over(chrom)%[m,n]=size(chrom);%temchrom=zeros(1,n);%for i=1:2:m-1%%c=rand(1);%%temchrom=chrom(i,:);%%chrom(i,:)=c.*chrom(i,:)+(1-c).*chrom(i+1,:); %%chrom(i+1,:)=(1-c).*temchrom+c.*chrom(i+1,:); %c=rand(1);%temchrom=chrom(i,:);%chrom(i,:)=c.*chrom(i,:)+(1-c).*chrom(i+1,:);%chrom(i+1,:)=(1-c).*temchrom+c.*chrom(i+1,:); %end%y=chrom;[m,n]=size(chrom);%两点交叉for i=1:2:m-1c=1+fix(n*rand(1,2));c_a=min(c);c_b=max(c);%第i个与第i+1个交叉temchrom=chrom(i,c_a:c_b);chrom(i,c_a:c_b)=chrom(i+1,c_a:c_b);chrom(i+1,c_a:c_b)=temchrom;endy=chrom;function y=mutation(chrom,P_mutation,m)%均匀变异if nargin==1P_mutation=0.1;m=100;endif nargin==2m=100;end%P=rand(Popsize,1);%n=find(P<P_mutation);%len=length(n);%for i=1:len%d=fix(9*rand(1))+1;%x=4*rand(1)-2;%chrom(n(i),d)=x;%%endP=rand(size(chrom));n=find(P<P_mutation);len=length(n);for i=1:lenchrom(n(i))=m*(rand-0.5);end%for i=1:len%tem_a=chrom(n(i));%R=min(m-tem_a,tem_a-m);%tem_a=tem_a+R*2*rand-R;%if tem_a>m%tem_a=m-rand;%elseif tem_a<-m%tem_a=-m+rand;%end%%chrom(n(i))=tem_a;%endy=chrom;endfunction y=select(fit,N)P=rand(1,N);for i=1:Ntem_p=find(fit>=P(i));s(i)=tem_p(1);endy=s;。

相关文档
最新文档