资源简介

该资源详细地给出了分布估计算法的PBIL算法的具体流程。供学习分布估计算的人参考使用。

资源截图

代码片段和文件信息

%%%%%%%%%%%%PBIL algorithm
clc
clear
clf
tic           %%%%%%%%%%%开始计时
%%%%%%%%%%%%参数设置
Pop_Size=40;
Individual_Len=20;%%%%%%%%%每个变量的长度
Variable_Num=2;
Learning_Rate=0.01;
Iteration_Times=50;
I=1;
%%%%%%%%%%%%%%%产生初始种群
Binary_X=zeros(Pop_SizeVariable_NumIndividual_Len);
for i=1:1:Pop_Size
    for j=1:1:Variable_Num
        for k=1:1:Individual_Len
            Binary_X(ijk)=round(rand());
        end
    end
end
Best_Individual=zeros(1Iteration_Times);
Probability_Vector=zeros(Iteration_TimesVariable_NumIndividual_Len);
traces=zeros(3Iteration_Times);%%%%%追踪每一代的最优值
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%对每一代执行如下操作
while I<=Iteration_Times    
 %%%%%%%%%%%%%%%%将采样的值,由二进制转化到十进制
  Decimal_X=zeros(Pop_SizeVariable_Num);
    for i=1:1:Pop_Size
        for j=1:1:Variable_Num  
            k=Individual_Len;
            t=1;
            while k>=1
               Decimal_X(ij)=Decimal_X(ij)+Binary_X(ijk)*2^(t-1);
               k=k-1;
               t=t+1;
            end
        end
    end
    %%%%%%%%%%%%%%%%%将十进制映射到解空间中
    Solution=zeros(Pop_SizeVariable_Num);
    for i=1:1:Pop_Size
        for j=1:1:Variable_Num
            Solution(ij)=-2+Decimal_X(ij)*4/(2^Individual_Len-1);
        end
    end
    %%%%%%%%%%%%%%%%%%计算适应值
    Fitness_Value=zeros(1Pop_Size);
    for i=1:1:Pop_Size
      %  Fitness_Value(i)=100*(Solution(i1)^2-Solution(i2))^2+(1-Solution(i1))^2;
    %  Fitness_Value(i)=Solution(i1)*cos(2*pi*Solution(i2))+Solution(i2)*sin(2*pi*Solution(i1));
    %Fitness_Value(i)=Solution(i1)+Solution(i2);
   % Fitness_Value(i)=Solution(i1)^2+Solution(i2);
   %Fitness_Value(i)=Solution(i1)*Solution(i2);
   %Fitness_Value(i)=(Solution(i1)-Solution(i2))^2;
    Fitness_Value(i)=Solution(i1).*cos(2*pi*Solution(i2))+Solution(i2).*cos(2*pi*Solution(i1));
    end
    %%%%%%%%%%%%%%%%%%将适应值按照从小到大的顺序排序,并选出最优个体
    [FitnessValueindex]=sort(Fitness_Value);%%%%%%%排序  
    Best_Individual(I)=Fitness_Value(index(Pop_Size));%%%%%%%%选最优个体
    traces(1I)=Solution(index(Pop_Size)1);
    traces(2I)=Solution(index(P

评论

共有 条评论