A. matlab的遗传算法优化BP神经网络
对y=x1^2+x2^2非线性系统进行建模,用1500组数据对网络进行构建网络,500组数据测试网络。由于BP神经网络初始神经元之间的权值和阈值一般随机选择,因此容易陷入局部最小值。本方法使用遗传算法优化初始神经元之间的权值和阈值,并对比使用遗传算法前后的效果。
步骤:
未经遗传算法优化的BP神经网络建模
1、
随机生成2000组两维随机数(x1,x2),并计算对应的输出y=x1^2+x2^2,前1500组数据作为训练数据input_train,后500组数据作为测试数据input_test。并将数据存储在data中待遗传算法中使用相同的数据。
2、
数据预处理:归一化处理。
3、
构建BP神经网络的隐层数,次数,步长,目标。
4、
使用训练数据input_train训练BP神经网络net。
B. 如何用matlab解决多元遗传算法问题
如何用matlab解决多元遗传算法的极值问题?可以按下列步骤做
1、首先,建立自定义带条件的最大值目标函数文件,ga_fun.m
if x(1)+x(2)>=-1
y=-(exp(-0.1*(x(1)^4+x(2)^4))+ exp(cos(2*pi*x(1))+cos(2*pi*x(2)))
)
else
y=inf
end
式中:x=x(1),y=x(2)
2、利用ga遗传算法工具箱求解
3、在工具箱中,Fitness function项输入@ga_fun;Number of variables项输入2;Lower项输入[-1,2];Upper项输入[2,1];
4、点击Start按钮,运行可以得到 fmax(0,0)值(Objective function value)。说明这里负号是最大值的标志
运行界面
C. Matlab问题--如何用遗传算法优化BP神经网络这篇文献(中文)是如何做的
我上次发给你的程序,只要你从网上下一个matcom45就行了,直接装在c盘就可以了,你发给我的论文变量太多用一般的遗传算法不行,我从网上发现了一个PID神经网络,相当好用,不用计算隐层数目,很适合用遗传算法进行优化,我编了一个例程回来发给你。
我真的不会用matlab的工具箱,如果一定要用matlab来做优化,恐怕我帮不了你了。
为什么一定要用matlab,用C++自己编写不也很好吗?
D. 基于Matlab的函数优化遗传算法程序
新建一个函数
_f.m
function
f=_f(x)
f=0.5-((sin(sqrt(x(1)^2+x(2)^2)))^2-0.5)/(1+0.001*(x(1)^2+x(2)^2)^2)
然后用fmins函数寻找极值。
x
=
fmins('_f',
[0
0],
[2
2]);
另外你的语句中有错,少写了一个括号,你再自己检查一下。
E. 遗传算法的matlab代码实现是什么
遗传算法我懂,我的论文就是用着这个算法,具体到你要遗传算法是做什么?优化什么的。。。我给你一个标准遗传算法程序供你参考:
该程序是遗传算法优化BP神经网络函数极值寻优:
%% 该代码为基于神经网络遗传算法的系统极值寻优
%% 清空环境变量
clc
clear
%% 初始化遗传算法参数
%初始化参数
maxgen=100; %进化代数,即迭代次数
sizepop=20; %种群规模
pcross=[0.4]; %交叉概率选择,0和1之间
pmutation=[0.2]; %变异概率选择,0和1之间
lenchrom=[1 1]; %每个变量的字串长度,如果是浮点变量,则长度都为1
bound=[-5 5;-5 5]; %数据范围
indivials=struct('fitness',zeros(1,sizepop), 'chrom',[]); %将种群信息定义为一个结构体
avgfitness=[]; %每一代种群的平均适应度
bestfitness=[]; %每一代种群的最佳适应度
bestchrom=[]; %适应度最好的染色体
%% 初始化种群计算适应度值
% 初始化种群
for i=1:sizepop
%随机产生一个种群
indivials.chrom(i,:)=Code(lenchrom,bound);
x=indivials.chrom(i,:);
%计算适应度
indivials.fitness(i)=fun(x); %染色体的适应度
end
%找最好的染色体
[bestfitness bestindex]=min(indivials.fitness);
bestchrom=indivials.chrom(bestindex,:); %最好的染色体
avgfitness=sum(indivials.fitness)/sizepop; %染色体的平均适应度
% 记录每一代进化中最好的适应度和平均适应度
trace=[avgfitness bestfitness];
%% 迭代寻优
% 进化开始
for i=1:maxgen
i
% 选择
indivials=Select(indivials,sizepop);
avgfitness=sum(indivials.fitness)/sizepop;
%交叉
indivials.chrom=Cross(pcross,lenchrom,indivials.chrom,sizepop,bound);
% 变异
indivials.chrom=Mutation(pmutation,lenchrom,indivials.chrom,sizepop,[i maxgen],bound);
% 计算适应度
for j=1:sizepop
x=indivials.chrom(j,:); %解码
indivials.fitness(j)=fun(x);
end
%找到最小和最大适应度的染色体及它们在种群中的位置
[newbestfitness,newbestindex]=min(indivials.fitness);
[worestfitness,worestindex]=max(indivials.fitness);
% 代替上一次进化中最好的染色体
if bestfitness>newbestfitness
bestfitness=newbestfitness;
bestchrom=indivials.chrom(newbestindex,:);
end
indivials.chrom(worestindex,:)=bestchrom;
indivials.fitness(worestindex)=bestfitness;
avgfitness=sum(indivials.fitness)/sizepop;
trace=[trace;avgfitness bestfitness]; %记录每一代进化中最好的适应度和平均适应度
end
%进化结束
%% 结果分析
[r c]=size(trace);
plot([1:r]',trace(:,2),'r-');
title('适应度曲线','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);
axis([0,100,0,1])
disp('适应度 变量');
x=bestchrom;
% 窗口显示
disp([bestfitness x]);
F. 遗传算法改进的模糊C-均值聚类MATLAB源码范例
function [BESTX,BESTY,ALLX,ALLY]=GAFCM(K,N,Pm,LB,UB,D,c,m)
%% 此函数实现遗传算法,用于模糊C-均值聚类
%% 输入参数列表
% K 迭代次数
% N 种群规模,要求是偶数
% Pm 变异概率
% LB 决策变量的下界,M×1的向量
% UB 决策变量的上界,M×1的向量
% D 原始样本数据,n×p的矩阵
% c 分类个数
% m 模糊C均值聚类数学模型中的指数
%% 输出参数列表
% BESTX K×1细胞结构,每一个元素是M×1向量,记录每一代的最优个体
% BESTY K×1矩阵,记录每一代的最优个体的评价函数值
% ALLX K×1细胞结构,每一个元素是M×N矩阵,记录全部个体
% ALLY K×N矩阵,记录全部个体的评价函数值
%% 第一步:
M=length(LB);%决策变量的个数
%种群初始化,每一列是一个样本
farm=zeros(M,N);
for i=1:M
x=unifrnd(LB(i),UB(i),1,N);
farm(i,:)=x;
end
%输出变量初始化
ALLX=cell(K,1);%细胞结构,每一个元素是M×N矩阵,记录每一代的个体
ALLY=zeros(K,N);%K×N矩阵,记录每一代评价函数值
BESTX=cell(K,1);%细胞结构,每一个元素是M×1向量,记录每一代的最优个体
BESTY=zeros(K,1);%K×1矩阵,记录每一代的最优个体的评价函数值
k=1;%迭代计数器初始化
%% 第二步:迭代过程
while k<=K
%% 以下是交叉过程
newfarm=zeros(M,2*N);
Ser=randperm(N);%两两随机配对的配对表
A=farm(:,Ser(1));
B=farm(:,Ser(2));
P0=unidrnd(M-1);
a=[A(1:P0,:);B((P0+1):end,:)];%产生子代a
b=[B(1:P0,:);A((P0+1):end,:)];%产生子代b
newfarm(:,2*N-1)=a;%加入子代种群
newfarm(:,2*N)=b;???
for i=1:(N-1)
A=farm(:,Ser(i));
B=farm(:,Ser(i+1));
P0=unidrnd(M-1);
a=[A(1:P0,:);B((P0+1):end,:)];
b=[B(1:P0,:);A((P0+1):end,:)];
newfarm(:,2*i-1)=a;
newfarm(:,2*i)=b;
end
FARM=[farm,newfarm];
%% 选择复制
SER=randperm(3*N);
FITNESS=zeros(1,3*N);
fitness=zeros(1,N);
for i=1:(3*N)
Beta=FARM(:,i);
FITNESS(i)=FIT(Beta,D,c,m);
end
for i=1:N
f1=FITNESS(SER(3*i-2));
f2=FITNESS(SER(3*i-1));
f3=FITNESS(SER(3*i));
if f1<=f2&&f1<=f3
farm(:,i)=FARM(:,SER(3*i-2));
fitness(:,i)=FITNESS(:,SER(3*i-2));
elseif f2<=f1&&f2<=f3
farm(:,i)=FARM(:,SER(3*i-1));
fitness(:,i)=FITNESS(:,SER(3*i-1));
else
farm(:,i)=FARM(:,SER(3*i));
fitness(:,i)=FITNESS(:,SER(3*i));
end
end
%% 记录最佳个体和收敛曲线
X=farm;
Y=fitness;
ALLX{k}=X;
ALLY(k,:)=Y;
minY=min(Y);
pos=find(Y==minY);
BESTX{k}=X(:,pos(1));
BESTY(k)=minY;???
%% 变异
for i=1:N
if Pm>rand&&pos(1)~=i
AA=farm(:,i);
BB=GaussMutation(AA,LB,UB);
farm(:,i)=BB;
end
end
disp(k);
k=k+1;
end
%% 绘图
BESTY2=BESTY;
BESTX2=BESTX;
for k=1:K
TempY=BESTY(1:k);
minTempY=min(TempY);
posY=find(TempY==minTempY);
BESTY2(k)=minTempY;
BESTX2{k}=BESTX{posY(1)};
end
BESTY=BESTY2;
BESTX=BESTX2;
plot(BESTY,'-ko','MarkerEdgeColor','k','MarkerFaceColor','k','MarkerSize',2)
ylabel('函数值')
xlabel('迭代次数')
grid on
忘记写了,这个是源代码!谢谢谢谢!
G. matlab遗传算法改进bp神经网络
你提供的代码是一个基本的BP神经网络训练过程。一般都是用GA训练,之后再用改进动量法继续训练,直至最后达到目标。
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(indivial)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。
H. matlab上的遗传算法函数优化
用ga函数,ga函数就是遗传算法的函数,它的调用格式为:
x
=
ga(fitnessfcn,nvars,a,b,aeq,beq,lb,ub,nonlcon,options)
fitnessfcn就是待优化函数,nvars为变量个数,然后后面的lb是下界,ub是上界,你这个问题就需要这4个位置的参数,其他位置的参数用[]代替就行,由于ga函数默认是求待优化函数的最小值,所以要想求最大值需要把待优化函数取负,即编写为
function
y=myfun(x)
y=-x.*sin(10*pi.*x)-2;
把这个函数存为myfun.m,然后在命令行里敲
x=ga(@myfun,1,[],[],[],[],[1],[2])
会返回
optimization
terminated:
average
change
in
the
fitness
value
less
than
options.tolfun.
x
=
1.8506
由于遗传算法的原理其实是在取值范围内随机选择初值然后进行遗传,所以可能每次运行给出的值都不一样,比如再运行一次会返回
optimization
terminated:
average
change
in
the
fitness
value
less
than
options.tolfun.
x
=
1.6507
这个具体原因需要参考遗传算法的有关资料
I. 遗传算法优化概率神经网络的matlab代码
原理大概是,设置一个初始种群,种群里的个体就是平滑因子,经过遗传算法的选择、交叉、变异后,逐渐找到一个最佳的spread,即为最终结果。
附件是一个GA-BP算法的程序,虽然不同,但是原理是相近的,可以参考。
遗传算法的基本运算过程如下:
a)初始化:设置进化代数计数器t=0,设置最大进化代数T,随机生成M个个体作为初始群体P(0)。
b)个体评价:计算群体P(t)中各个个体的适应度。
c)选择运算:将选择算子作用于群体。选择的目的是把优化的个体直接遗传到下一代或通过配对交叉产生新的个体再遗传到下一代。选择操作是建立在群体中个体的适应度评估基础上的。
d)交叉运算:将交叉算子作用于群体。遗传算法中起核心作用的就是交叉算子。
e)变异运算:将变异算子作用于群体。即是对群体中的个体串的某些基因座上的基因值作变动。
群体P(t)经过选择、交叉、变异运算之后得到下一代群体P(t+1)。
f)终止条件判断:若t=T,则以进化过程中所得到的具有最大适应度个体作为最优解输出,终止计算。
J. 使用matlab遗传算法工具箱能不能解决组合优化问题还有使用工具箱方便还是自己编程方便呢
1、要看你组合优化是属于哪种问题,一般的组合优化都是混合整数线性或非线性的,那么就不行了,因此要对遗传算法改进才能计算。
2、如果有现成的工具箱求解你的组合优化问题肯定要方便些,但碰到具体问题,可能要对参数进行一些设置更改,所以最好能有编程基础,那样就可以自己修改工具箱里面的参数或策略了
对你的补充问题,组合优化问题一般都是用matlab 和 lingo实现吧。建议买一本数学建模的书看一看,都涉及到组合优化问题,也可以下载论文看看。lingo对编程要简单些,主要是求混合规划,缺点是似乎还不能用上多目标问题,一般的组合优化都属于多目标问题。但是matlab功能强大的多。