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

📄 heixianghanshuyouhua.txt

📁 黑箱优化算法
💻 TXT
字号:
function [Opt_prmt,Opt_obj,Opt_obj2,LC]=RODGSA(M,N,Pm,K,t0,alpha,net1,net2,net3)
%输入参数列表
%  M            遗传进化迭代次数
%  N            种群规模
%  Pm           变异概率
%  K            同一温度下的状态跳转次数
%  t0           初始温度
%  alpha        降温系数
%
%输出参数列表
%  Opt_prmt     最优结构参数
%  Opt_obj      目标函数的最优值
%  LC           算法的收敛曲线

%第一步:变量初始化
load LHC%导入原始数据
%[net1,net2,net3]=BPNET(P1,T1,P2,T2,P3,T3)%构造并训练BP神经网络
[g_D,g_L,g_hm,g_d,g_px,g_n,g_pin,g_kl]=Gene_Construct;%构造基因库
Opt_prmt=zeros(M,8);
Opt_obj=zeros(1,M);
LC=zeros(1,M);

%第二步:产生初始种群
farm=zeros(N,8);
farm(1,:)=[120,75,0.06,0.6,0.3,8,0.4,0.6];
Len_g_D=length(g_D);
Len_g_L=length(g_L);
Len_g_hm=length(g_hm);
Len_g_d=length(g_d);
Len_g_px=length(g_px);
Len_g_n=length(g_n);
Len_g_pin=length(g_pin);
Len_g_kl=length(g_kl);
for i=2:N
    farm(i,1)=g_D(unidrnd(Len_g_D));
    farm(i,2)=g_L(unidrnd(Len_g_L));
    farm(i,3)=g_hm(unidrnd(Len_g_hm));
    farm(i,4)=g_d(unidrnd(Len_g_d));
    farm(i,5)=g_px(unidrnd(Len_g_px));
    farm(i,6)=g_n(unidrnd(Len_g_n));
    farm(i,7)=g_pin(unidrnd(Len_g_pin));
    farm(i,8)=g_kl(unidrnd(Len_g_kl));
end

counter=0;%设置迭代计数器
T=t0;
while counter<M%停止条件为达到最大迭代次数
       
    %第三步:双亲双子交叉
    newfarm=zeros(2*N,8);
    Ser=randperm(N);
    AA=farm(Ser(1),:);
    BB=farm(Ser(2),:);
    cp=unidrnd(7);
    aa=[AA(1:cp),BB((cp+1):end)];
    bb=[BB(1:cp),AA((cp+1):end)];
    newfarm(2*N-1,:)=aa;
    newfarm(2*N,:)=bb;
    for i=1:(N-1)
        AA=farm(Ser(i),:);
        BB=farm(Ser(i+1),:);
        cp=unidrnd(7);
        aa=[AA(1:cp),BB((cp+1):end)];
        bb=[BB(1:cp),AA((cp+1):end)];
        newfarm(2*i-1,:)=aa;
        newfarm(2*i,:)=bb;
    end
    FARM=[farm;newfarm];
   
    %第四步:选择复制
    Qer=randperm(3*N);
    FITNESS=zeros(3*N,1);
    fitness=zeros(N,1);
    for i=1:(3*N)
        Ind=FARM(i,:);
        FITNESS(i)=Fit(Ind,net1,net2,net3,P1,T1,P2,T2,P3,T3);
    end
    for i=1:N
        f1=FITNESS(Qer(3*i-2));
        f2=FITNESS(Qer(3*i-1));
        f3=FITNESS(Qer(3*i));
        if f1>=f2&&f1>=f3
            farm(i)=FARM(Qer(3*i-2));
            fitness(i)=FITNESS(Qer(3*i-2));
        elseif f2>=f1&&f2>=f3
            farm(i)=FARM(Qer(3*i-1));
            fitness(i)=FITNESS(Qer(3*i-1));
        elseif f3>=f1&&f3>=f2
            farm(i)=FARM(Qer(3*i));
            fitness(i)=FITNESS(Qer(3*i));
        else
        end
    end
    %记载最佳个体和平均适应值
    maxfit=max(fitness);
    Opt_obj(counter+1)=maxfit;
    pos=find(fitness==maxfit);
    Opt_prmt(counter+1,:)=farm(pos(1),:);
    LC(counter+1)=mean(fitness);
   
    %第五步:变异退火
    for i=1:N
        kk=1;
        if Pm>rand
            AAA=farm(i,:);
            while kk<K
                BBB=AAA;
                Bpos=unidrnd(8);
                switch Bpos
                    case 1,
                        BBB(1)=g_D(unidrnd(Len_g_D));
                    case 2,
                        BBB(2)=g_L(unidrnd(Len_g_L));
                    case 3,
                        BBB(3)=g_hm(unidrnd(Len_g_hm));
                    case 4,
                        BBB(4)=g_d(unidrnd(Len_g_d));
                    case 5,
                        BBB(5)=g_px(unidrnd(Len_g_px));
                    case 6,
                        BBB(6)=g_n(unidrnd(Len_g_n));
                    case 7,
                        BBB(7)=g_pin(unidrnd(Len_g_pin));
                    case 8,
                        BBB(8)=g_kl(unidrnd(Len_g_kl));
                    otherwise,
                end
                kk=kk+1;
                fitAAA=Fit(AAA,net1,net2,net3,P1,T1,P2,T2,P3,T3);
                fitBBB=Fit(BBB,net1,net2,net3,P1,T1,P2,T2,P3,T3);
                if fitBBB>=fitAAA
                    AAA=BBB;
                    farm(i,:)=AAA;
                elseif exp((fitBBB-fitAAA)/T)>rand
                    AAA=BBB;
                    farm(i,:)=AAA;
                else
                end
            end
        end
    end
   
    %第六步:进化退火
    counter=counter+1
    T=T*alpha;
end

%第七步:绘收敛曲线图
Opt_obj2=Opt_obj;
for i=1:M
    leijia=Opt_obj2(1:i);
    Opt_obj2(i)=max(leijia);
end
plot(Opt_obj2)
hold on
plot(LC)
Best_obj=max(Opt_obj)
Pos=find(Opt_obj==Best_obj);
Best_prmt=Opt_prmt(Pos(end),:)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 构造并训练BP神经网络
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function [net1,net2,net3]=BPNET(P1,T1,P2,T2,P3,T3)
[PN1,minP1,maxP1]=premnmx(P1);
[TN1,minT1,maxT1]=premnmx(T1);
net1=newff(minmax(PN1),[6,20,3],{'tansig','tansig','purelin'},'trainlm');
net1.trainParam.show=5;
net1.trainParam.lr=0.1;
net1.trainParam.epochs=2000;
net1.trainParam.goal=0.000001;
[net1,tr1]=train(net1,PN1,TN1)
AN1=sim(net1,PN1)
[A1]=postmnmx(AN1,minT1,maxT1)
error1=(A1-T1)./T1
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
P2=[P2(:,1:16),P2(:,18:end)];%剔除奇异样本点
T2=[T2(:,1:16),T2(:,18:end)];
[PN2,minP2,maxP2]=premnmx(P2);
[TN2,minT2,maxT2]=premnmx(T2);
net2=newff(minmax(PN2),[6,20,2],{'tansig','tansig','purelin'},'trainlm');
net2.trainParam.show=5;
net2.trainParam.lr=0.1;
net2.trainParam.epochs=2000;
net2.trainParam.goal=0.0000001;
[net2,tr2]=train(net2,PN2,TN2)
AN2=sim(net2,PN2)
[A2]=postmnmx(AN2,minT2,maxT2)
error2=(A2-T2)./T2
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[PN3,minP3,maxP3]=premnmx(P3);
[TN3,minT3,maxT3]=premnmx(T3);
net3=newff(minmax(PN3),[4,10,1],{'tansig','tansig','purelin'},'trainlm');
net3.trainParam.show=5;
net3.trainParam.lr=0.1;
net3.trainParam.epochs=2000;
net3.trainParam.goal=0;
[net3,tr3]=train(net3,PN3,TN3)
AN3=sim(net3,PN3)
[A3]=postmnmx(AN3,minT3,maxT3)
error3=(A3-T3)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -