📄 dymaic_main.m
字号:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clear('all');
clc;
load('matlabhia31.mat');
times=1;
ttimes=times;
GG=500;
G=50;
pro=zeros(G+2,GG);
global_va=ones(size(result2,1),size(result2,2),10);
global_va(:,2:size(result2,2)-1,:)=-2+4*rand(size(result2,1),size(result2,2)-2,10);
global_va(:,size(result2,2),:)=1+7*rand(size(result2,1),1,10);
global_fitting=zeros(1,10);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
while(times<=GG)
clc;
ss=0.01;
sss=15;
num=judge(result2,t_x,t_y,ss);
while(length(find(num>=sss))==30)
ss=ss+0.01;
num=judge(result2,t_x,t_y,ss);
end
fixindex=find(num>=sss);
%获得全局节点
fixnum=length(fixindex);
%找出每个节点对于网络的重要程度
while(fixnum<10||fixnum>20)
if(fixnum<10)
sss=sss-1;
elseif(fixnum>20)
sss=sss+1;
end
fixindex=find(num>=sss);
%获得全局节点
fixnum=length(fixindex);
% fprintf('fixnum=%d',fixnum);
end
changenum=size(result2,1)-fixnum;
changeindex=1:size(result2,1);
changeindex(fixindex)=[];
%获得局部节点
[t_x,t_y,te_x,te_y]=drosen;
%产生伪动态样本
fitv=fitness(result2,t_x,t_y);
%计算此时的自适应函数值
pro(G+3,times)=fitv;
fprintf('time=%d\n',times);
fprintf('此时自适应度值为:%f\n',fitv);
fprintf('Gen Num:%d\n',times);
pro(G+1,times)=0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if(fitv<3)
%如果不满足要求,则进化
tic
count=find_error(result2,t_x,t_y,0.05);
%找到需要重新拟合的样本
XX=t_x(:,count);
if(changenum~=1&&changenum~=0&&isempty(XX)~=1&&size(XX,2)>=changenum)
fprintf('changenum=%d\n',changenum);
fprintf('changeXX=%d\n',size(XX,2));
[IDX,C]=kmeans(XX',changenum,'distance','sqEuclidean');
%重新生成新的个体
else
C=result2(changeindex,2:size(result2,2)-1);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=1:10
global_fitting(i)=fitness(global_va(:,:,i),t_x,t_y);
end
[global_sort,global_sort_index]=sort(global_fitting);
global_index=find(global_fitting>0.9*fitv);
if(~isempty(global_index))
global_length=length(global_index);
if(global_length>5)
global_length=5;
end
changing_index=randperm(40);
temp_index=find(changing_index==1);
changing_index(temp_index)=[];
changing_index=changing_index(1:global_length);
fprintf('goodnum=%d\n',global_length);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
init=zeros(size(result2,1),size(result2,2),40);
init(:,1,:)=1;
for i=1:30
init(:,:,i)=result2;
end
% add the subtle-fixing neurons to the origin network
init(changeindex,2:size(result2,2)-1,1)=C;
init(changeindex,size(result2,2),1)=result2(changeindex,size(result2,2));
for i=2:2:28
init(changeindex,2:size(result2,2),i)=init(changeindex,2:4,1)+2*rand(changenum,size(result2,2)-1,1);
end
init(:,2:size(result2,2)-1,29:40)=-2+4*rand(size(result2,1),size(result2,2)-2,12);
init(:,size(result2,2),29:40)=1+7*rand(size(result2,1),1,12);
%形成新的种群
if(~isempty(global_index))
init(:,:,changing_index)=global_va(:,:,global_sort_index(1:global_length));
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[nvault,pro2,result2]=hia1(init,t_x,t_y,vault,G,inf);
%重新进化调整
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
vault=nvault;
%替换疫苗库
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
timer=toc;
pro(G+1,times)=1;
if(fitness(result2,t_x,t_y)<3)
disp('fail\n');
pro(G+1,times)=-1;
end
fprintf('时间:%f\n',timer);
pro(1:size(pro2,2),times)=pro2';
pro(G+2,times)=size(pro2,2);
times=times+1;
global_va(:,:,global_sort_index(1))=result2;
else
disp('不需要调整');
end
end
save('dy_g_v.mat');
%作相关的收尾工作
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -