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

📄 matlab程序源码.txt

📁 是用遗传算法求函数:f(x1,x2)=100(x1*x1-x2*x2) (x1*x1-x2*x2)+(1-x1)(1-x1) 约束:-2.048<=x1,x2<=2.048的极大值
💻 TXT
字号:
%下面的程序是用遗传算法求函数:f(x1,x2)=100(x1*x1-x2*x2) (x1*x1-x2*x2)+(1-x1)(1-x1) 
%约束:-2.048<=x1,x2<=2.048的极大值



%Generic Algorithm for function f(x1,x2) optimum
clear all;
close all;
                         
%parameters
Size=80;
G=100;
Codel=10;
umax=2.048;
umin=-2.048;
E=round(rand(Size,2*Codel));  %initial code
%Main program
for k=1:1:G
    time(k)=k;
    for s=1:1:Size
        m=E(s,:);
        y1=0;
        y2=0;
        
        %uncoding
        m1=m(1:1:Codel);
        for i=1:1:Codel
            y1=y1+m1(i)*2^(i-1);
        end
        x1=(umax-umin)*y1/1023+umin;
        m2=m(Codel+1:1:2*Codel);
        for i=1:1:Codel
            y2=y2+m2(i)*2^(i-1);
        end
        x2=(umax-umin)*y2/1023+umin;
        
        F(s)=100*(x1^2-x2)^2+(1-x1)^2;
    end
    
    Ji=1./F;
    %***********Step 1:Evaluate BestJ**********
    BestJ(k)=min(Ji);
    fi=F;          %Fitness Function
    [Oderfi,Indexfi]=sort(fi);   %Arranging fi small to bigger
    Bestfi=Oderfi(Size);         %LetBestJfi=max(fi)
    BestS=E(Indexfi(Size),:);    %Let  BestS=E(m),m is the Indexfi belong to max(fi)
    bfi(k)=Bestfi;
     
    %**********Step 2:Select and Reproduct Operetion******
    fi_sum=sum(fi);
    fi_Size=(Oderfi/fi_sum)*Size;
    
    fi_S=floor(fi_Size);        %Selecting Bigger fi value
     
    kk=1;
    for i=1:1:Size  %Selece and Reproduce
        for j=1:1:fi_S(i)
            TempE(kk,:)=E(Indexfi(i),:);
            kk=kk+1;     %kk is used to roproduce
        end;
    end
    
    %**********Step 3:Crossover Operation***********
    pc=0.60;
    n=ceil(20*rand);
    for i=1:2:(Size-1)
        temp=rand;
        if pc>temp        %crossover condition
            for j=n:1:20
                TempE(i,j)=E(i+1,j);
                TempE(i+1,j)=E(i,j);
            end
        end
    end
    TempE(Size,:)=BestS;
    E=TempE;
    
    %*********Step 4:Mutation Operation**********
    %pm=0.001;
    %pm=0.001-[1:1:Size]*(0.001)/Size;  %Bigger fi,smaller Pm
    %pm=0.0;      %No mutation
    pm=0.1;    %Big mutation
       
    for i=1:1:Size
        for j=1:1:2*Codel
            temp=rand;
            if pm>temp      %Mutation condition
                if TempE(i,j)==0
                    TempE(i,j)=1;
                else
                    TempE(i,j)=0;
                end
            end
        end
    end
     
    %Guarantee TempPop(30,:)is the code belong to the best individual (maxz(fi))
    TempE(Size,:)=BestS;
    E=TempE;
end
Max_Value=Bestfi
BestS
x1
x2
figure(1);
plot(time,BestJ);
xlabel('Times');ylabel('bestJ');
figure(2);
plot(time,bfi);
xlabel('times');ylabel('Best F');

⌨️ 快捷键说明

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