改进的遗传算法程序
❶ matlab遗传算法改进bp神经网络
你提供的代码是一个基本的BP神经网络训练过程。一般都是用GA训练,之后再用改进动量法继续训练,直至最后达到目标。
遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法。遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(indivial)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。
❷ 遗传算法执行策略的改进的具体方法(详细)
GA最典型的应用之一是解决行商问题,行商问题是这样的:
已知n个城市之间的相互距离,现有一个推销员必须遍访这n个城市,并且每个城市只能访问一次,最后又必须返回出发城市。如何安排他对这些城市的访问次序,可使其旅行路线的总长度最短?
GA的思路是,先随机排序产生n条路线,这些路线当然长短不一,然后从中选出路径最短的若干条路线(优胜劣汰),再基于他们产生新的路线(杂交),同时引入一些新的路线(防止最初的基因不好,怎么遗传都产生不了精英),当然,还要保留其中最短的那条(那可是目前来说最nb的精英哦),再取其中最短的若干条路线(优胜劣汰)。。。。一直到我们最nb的精英基本上不能更好为止。整个过程符合进化论观点。
GA是不保证结果最优的,但按照性价比的观点来说,它通常能在较短的时间内获得一个较优结果。
http://www.longen.org/e-k/GA.htm
http://www.wikilib.com/wiki/%e9%81%97%e4%bc%a0%e7%ae%97%e6%b3%95 (这个比较详尽^_^)
很遗憾,这两天国外网站访问不了,不然可以帮你分析个例程
❸ 遗传算法的优缺点
优点:
1、遗传算法是以决策变量的编码作为运算对象,可以直接对集合、序列、矩阵、树、图等结构对象进行操作。这样的方式一方面有助于模拟生物的基因、染色体和遗传进化的过程,方便遗传操作算子的运用。
另一方面也使得遗传算法具有广泛的应用领域,如函数优化、生产调度、自动控制、图像处理、机器学习、数据挖掘等领域。
2、遗传算法直接以目标函数值作为搜索信息。它仅仅使用适应度函数值来度量个体的优良程度,不涉及目标函数值求导求微分的过程。因为在现实中很多目标函数是很难求导的,甚至是不存在导数的,所以这一点也使得遗传算法显示出高度的优越性。
3、遗传算法具有群体搜索的特性。它的搜索过程是从一个具有多个个体的初始群体P(0)开始的,一方面可以有效地避免搜索一些不必搜索的点。
另一方面由于传统的单点搜索方法在对多峰分布的搜索空间进行搜索时很容易陷入局部某个单峰的极值点,而遗传算法的群体搜索特性却可以避免这样的问题,因而可以体现出遗传算法的并行化和较好的全局搜索性。
4、遗传算法基于概率规则,而不是确定性规则。这使得搜索更为灵活,参数对其搜索效果的影响也尽可能的小。
5、遗传算法具有可扩展性,易于与其他技术混合使用。以上几点便是遗传算法作为优化算法所具备的优点。
缺点:
1、遗传算法在进行编码时容易出现不规范不准确的问题。
2、由于单一的遗传算法编码不能全面将优化问题的约束表示出来,因此需要考虑对不可行解采用阈值,进而增加了工作量和求解时间。
3、遗传算法效率通常低于其他传统的优化方法。
4、遗传算法容易出现过早收敛的问题。
(3)改进的遗传算法程序扩展阅读
遗传算法的机理相对复杂,在Matlab中已经由封装好的工具箱命令,通过调用就能够十分方便的使用遗传算法。
函数ga:[x, fval,reason]= ga(@fitnessfun, nvars, options)x是最优解,fval是最优值,@fitnessness是目标函数,nvars是自变量个数,options是其他属性设置。系统默认求最小值,所以在求最大值时应在写函数文档时加负号。
为了设置options,需要用到下面这个函数:options=gaoptimset('PropertyName1', 'PropertyValue1', 'PropertyName2', 'PropertyValue2','PropertyName3', 'PropertyValue3', ...)通过这个函数就能够实现对部分遗传算法的参数的设置。
❹ c语言实现*/遗传算法改进BP神经网络原理和算法实现怎么弄
遗传算法有相当大的引用。遗传算法在游戏中应用的现状在遗传编码时, 一般将瓦片的坐标作为基因进行实数编码, 染色体的第一个基因为起点坐标, 最后一个基因为终点坐标, 中间的基因为路径经过的每一个瓦片的坐标。在生成染色体时, 由起点出发, 随机选择当前结点的邻居节点中的可通过节点, 将其坐标加入染色体, 依此循环, 直到找到目标点为止, 生成了一条染色体。重复上述操作, 直到达到指定的种群规模。遗传算法的优点:1、遗传算法是以决策变量的编码作为运算对象,可以直接对集合、序列、矩阵、树、图等结构对象进行操作。这样的方式一方面有助于模拟生物的基因、染色体和遗传进化的过程,方便遗传操作算子的运用。另一方面也使得遗传算法具有广泛的应用领域,如函数优化、生产调度、自动控制、图像处理、机器学习、数据挖掘等领域。2、遗传算法直接以目标函数值作为搜索信息。它仅仅使用适应度函数值来度量个体的优良程度,不涉及目标函数值求导求微分的过程。因为在现实中很多目标函数是很难求导的,甚至是不存在导数的,所以这一点也使得遗传算法显示出高度的优越性。3、遗传算法具有群体搜索的特性。它的搜索过程是从一个具有多个个体的初始群体P(0)开始的,一方面可以有效地避免搜索一些不必搜索的点。另一方面由于传统的单点搜索方法在对多峰分布的搜索空间进行搜索时很容易陷入局部某个单峰的极值点,而遗传算法的群体搜索特性却可以避免这样的问题,因而可以体现出遗传算法的并行化和较好的全局搜索性。4、遗传算法基于概率规则,而不是确定性规则。这使得搜索更为灵活,参数对其搜索效果的影响也尽可能的小。5、遗传算法具有可扩展性,易于与其他技术混合使用。以上几点便是遗传算法作为优化算法所具备的优点。遗传算法的缺点:遗传算法在进行编码时容易出现不规范不准确的问题。
❺ 基本遗传算法和改进的遗传算法以概率多少收敛
这个没有确定的数值,对不同的问题概率也不一样,只能定性地说“以接近于1的概率全局收敛”。
❻ 遗传算法改进的模糊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
忘记写了,这个是源代码!谢谢谢谢!
❼ 遗传算法的改进
你到的要问什么?
❽ 谁有用于数据预测的用遗传算法改进的BP神经网络程序
给你来一段
%主程序
%数据归一化预处理
nntwarn off
[pn,minp,maxp]=premnmx(p);
pp=(pn+1)/2;
[tn,mint,maxt]=premnmx(t);
%建立BP网络
net=newff(minmax(pp),[15,1],{'logsig','purelin'},'trainlm');
%应用遗传算法对优化网络初始值
in=size(pn,1);
out=size(tn,1);
hi=15;%隐含层节点数
L=in*hi+hi*out+hi+out;%遗传算法编码长度
aa=ones(L,1)*[-1,1];
popu=50;%种群规模
initPpp=initializega(popu,aa,'ISeval');%初始化种群
gen=100;%遗传世代
%调用GAOT工具箱,其中目标函数定义为ISeval
[x,endPop,bPop,trace]=ga(aa,'ISeval',[],initPpp,[1e-6 1 1],'maxGenTerm',…
,gen,'normGeomSelect',[0.09],['arithXover'],[2],'nonUnifMutation',[2 gen 3]);
%绘收敛曲线图
figure(1)
plot(trace(:,1),1./trace(:,3),'r-');
hold on
plot(trace(:,1),1./trace(:,2),'b-');
xlabel('Generation');
ylabel('Sum-Squared Error');
figure(2)
plot(trace(:,1),trace(:,3),'r-');
hold on
plot(trace(:,1),trace(:,2),'b-');
xlabel('Generation');
ylabel('Fittness');
%将得到的权值矩阵赋给尚未开始训练的BP网络
[w1,b1,w2,b2,a1,a2,se,eval]=IScode(x); %调用自定义编解码函数
%创建网络
net.iW{1,1}=w1;
net.LW{2,1}=w2;
net.b{1,1}=b1;
net.b{2,1}=b2;
%设置训练参数
net.trainParam.show=10;
net.trainParam.epochs=5000;
net.trainParam.goal=0.05;
%训练网络
net=train(net,pp,t);
%自定义目标函数
function [sol, eval] = ISeval(sol,options)
% eval - the fittness of this indivial
% sol - the indivial, returned to allow for Lamarckian evolution
% options - [current_generation]
p=[];%原始输入数据
t=[];%原始输出数据
in=size(p,1);
out=size(t,1);
hi=15;%隐含层节点数
L=in*hi+hi*out+hi+out;%遗传算法编码长度
for i=1:L,
x(i)=sol(i);
end;
[w1, b1, w2, b2, a1, a2, se, eval]=IScode(x);
%自定义编解码函数
function [w1, b1, w2, b2, a1, a2, se, eval]=IScode(x)
[pn,minp,maxp]=premnmx(p);
pp=(pn+1)/2;
[tn,mint,maxt]=premnmx(t);
in=size(pn,1);%输入层结点数
out=size(tn,1);%隐含层结点数
hi=15;%隐含层结点数
L=in*hi+hi*out+hi+out;%遗传算法编码长度
% 前in*hi个编码为w1
for i=1:hi,
for j=1:in,
w1(i,j)=x(in*(i-1)+j);
end
end
% 接着的hi*out个编码为w2
for i=1:out,
for j=1:hi,
w2(i,j)=x(hi*(i-1)+j+in*hi);
end
end
% 接着的hi个编码为b1
for i=1:hi,
b1(i,1)=x((in*hi+hi*out)+i);
end
% 最后的out个编码b2
for i=1:out,
b2(i,1)=x((in*hi+hi*out+hi)+i);
end
% 计算hi层与out层的输出
a1=tansig(w1*pp,b1);
a2=purelin(w2*a1,b2);
% 计算误差平方和
se=sumsqr(t-a2);eval=1/se; % 遗传算法的适应值
❾ 有关遗传算法这段程序需要改进的地方
不知道你的问题有多复杂,不过你到CSDN下载频道或者程序员联合开发网等网站应该可以搜到你要的程序。
❿ 遗传算法的改进研究,先做一个具体应用在用改进算法对比
我不知道你具体做的是什么,你的问题我试着读了几次,没读懂,哈哈!不过遗传算法的改进。。。本科毕业设计。。。我的理解是具体可以改进一下“变异”的几率。。。