遗传算法综述 联系客服

发布时间 : 星期四 文章遗传算法综述更新完毕开始阅读844023e20029bd64783e2cd7

%% 创建单BP网络 t=cputime;

net_bp=newff(minmax(P_train),[s1,1],{'tansig','purelin'},'trainlm'); % 设置训练参数

net_bp。trainParam。epochs=1000; net_bp。trainParam。show=10; net_bp。trainParam。goal=0。1; net_bp。trainParam。lr=0。1;

net_bp。trainParam。showwindow=0; %% 训练单BP网络

net_bp=train(net_bp,P_train,T_train); %% 仿真测试单BP网络

tn_bp_sim=sim(net_bp,P_test); % 反归一化

T_bp_sim=postmnmx(tn_bp_sim,mint,maxt); e=cputime-t;

T_bp_sim(T_bp_sim>1。5)=2; T_bp_sim(T_bp_sim<1。5)=1;

result_bp=[T_bp_sim' T_test'];

%% 结果显示(单BP网络)

number_B_sim=length(find(T_bp_sim==1 & T_test==1)); number_M_sim=length(find(T_bp_sim==2 &T_test==2));

disp('(1)BP网络的测试结果为:');

disp(['良性乳腺肿瘤确诊:' num2str(number_B_sim)。。。 ' 误诊:' num2str(number_B-number_B_sim)。。。

' 确诊率p1=' num2str(number_B_sim/number_B*100) disp(['恶性乳腺肿瘤确诊:' num2str(number_M_sim)。。。 ' 误诊:' num2str(number_M-number_M_sim)。。。

' 确诊率p2=' num2str(number_M_sim/number_M*100) disp(['建模时间为:' num2str(e) 's'] ); %% 遗传算法优化 popu=20;

bounds=ones(S,1)*[0,1]; % 产生初始种群

% initPop=crtbp(popu,S);

initPop=randint(popu,S,[0 1]); % 计算初始种群适应度

initFit=zeros(popu,1); for i=1:size(initPop,1)

initFit(i)=de_code(initPop(i,:)); end

initPop=[initPop initFit]; gen=100; % 优化计算

]); ]); '%''%'[X,EndPop,BPop,Trace]=ga(bounds,'fitness',[],initPop,[1e-6 1 0],'maxGenTerm',。。。

gen,'normGeomSelect',0。09,'simpleXover',2,'boundaryMutation',[2 gen 3]);

[m,n]=find(X==1);

disp(['优化筛选后的输入自变量编号为:' num2str(n)]); % 绘制适应度函数进化曲线 figure

plot(Trace(:,1),Trace(:,3),'r:') hold on

plot(Trace(:,1),Trace(:,2),'b') xlabel('进化代数') ylabel('适应度函数')

title('适应度函数进化曲线')

legend('平均适应度函数','最佳适应度函数') xlim([1 gen])

%% 新训练集/测试集数据提取

p_train=zeros(size(n,2),size(T_train,2)); p_test=zeros(size(n,2),size(T_test,2)); for i=1:length(n)

p_train(i,:)=P_train(n(i),:); p_test(i,:)=P_test(n(i),:); end

t_train=T_train; %% 创建优化BP网络 t=cputime;

net_ga=newff(minmax(p_train),[s1,1],{'tansig','purelin'},'trainlm'); % 训练参数设置

net_ga。trainParam。epochs=1000; net_ga。trainParam。show=10; net_ga。trainParam。goal=0。1; net_ga。trainParam。lr=0。1;

net_ga。trainParam。showwindow=0; %% 训练优化BP网络

net_ga=train(net_ga,p_train,t_train); %% 仿真测试优化BP网络

tn_ga_sim=sim(net_ga,p_test); % 反归一化

T_ga_sim=postmnmx(tn_ga_sim,mint,maxt); e=cputime-t;

T_ga_sim(T_ga_sim>1。5)=2; T_ga_sim(T_ga_sim<1。5)=1;

result_ga=[T_ga_sim' T_test']; %% 结果显示(优化BP网络)

number_b_sim=length(find(T_ga_sim==1 & T_test==1)); number_m_sim=length(find(T_ga_sim==2 &T_test==2));

disp('(2)优化BP网络的测试结果为:');

disp(['良性乳腺肿瘤确诊:' num2str(number_b_sim)。。。 ' 误诊:' num2str(number_B-number_b_sim)。。。

' 确诊率p1=' num2str(number_b_sim/number_B*100) '%']); disp(['恶性乳腺肿瘤确诊:' num2str(number_m_sim)。。。 ' 误诊:' num2str(number_M-number_m_sim)。。。

' 确诊率p2=' num2str(number_m_sim/number_M*100) '%']); disp(['建模时间为:' num2str(e) 's'] );

图3 程序结果图

由此可得到结论:遗传算法优化BP神经网络的识别率比单纯的BP神经网络高,而且识别速度较快。 6.遗传算法的改进与未来 6.1遗传算法的改进

虽然遗传算法已经取得了广泛的应用,但存在着收敛速度慢及算法稳定性差等缺陷。用遗传算法进行路径规划时,随机产生初始种群,为了避免陷入局部极值点,种群数量要达到一定的规模。但种群规模大会导致搜索空间较大,删除冗余个体的能力较差,大大影响路径规划的速度。特别在环境较为复杂的情形下,这种缺点就更加明显。针对标准遗传算法的不足,在吸收前人研究成果的基础上,对于遗传算法的求解过程,我们提出了如下改进措施与步骤: (1)人工方法产生初始群体

先将优化问题的初始解转化为个体,然后在问题的解空间中用人工方法产生初始种群的其它个体,使初始群体的个体模式阶次较高、模式数目较大,具有多样性。这样通

过适当选择字符串长度和群体规模,可以在开始的几代内找到各极值点所在的区域,加快搜索速度。 (2)上代群体的处理

对于上代群体,计算其个体的适应度,判别其是否满足终止条件。如果满足终止条件,停止遗传操作,输出最优解。否则,将上代群体全部放入中间群体,并对上代群体独立进行优选父代交换和大突变操作。 (3)优选父代交换

优选父代交换的主要思想是指在进行交换操作时,提高父代的质量,即选择较优的父代个体参与交换。具体过程是:从上代群体中随机选取两个个体,然后比较其适应度,保留适应度大的个体,再从上代群体中随机选取两个个体,同样保留适应度大的个体,以保留下来的两个个体作为父代个体。产生[0,1]之间均匀分布的随机数s,如果s

理论上,遗传算法的突变操作可以产生新个使算法跳出“早熟”。但为了保持算法的稳定性,突变操作的突变率通常取得很小,单靠传统的突变操作需要很多代才能变异出一个不同于其它个体的新个体。大突变操作的思想是:对上代群体,以一个远大于通常的突变概率的概率进行一次突变操作,并将突变后产生的新个体加入到中间群体。大突变操作能够随机、独立地产生许多新个体,从而能始终保持群体的多样性,使群体脱离“早熟”。

(5)基于Metropolis判别准则的复制策略

对于中间群体,运用基于Metropolis判别准则的复制策略,产生下一代群体。基于Metropolis判别准则的复制策略分为两步:

a.实施最优保留策略 将中间群体中性能最好的个体无条件地复制到下一代群体中,这样就会保留中间群体中的最好解,使遗传算法可以以概率1收敛到全局最优解,保证了算法的收敛。

b.实施Metropolis判别准则的复制策略 在中间群体中随机选取个体i和j,i和j竞争进入下一代群体的准则采用Metropolis判别准则:产生[0,1]之间均匀分布的随机数s,如果s<=min(1,exp(- (f(i) -f(j))/T))(式中,f(i),f(j)分别为个体i和j的适应度,T为控