⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dymaic_main.m

📁 免疫算法实现多峰、多极值函数平面曲面拟合
💻 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 + -