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

📄 yichuansuanfa2.m

📁 自己编的遗传算法程序
💻 M
字号:
a=zeros(20,33);          %存染色体20个
aby=zeros(20,33);        %起缓冲作用
aby2=zeros(20,33);       %起缓冲作用
x1=-3:0.7947:12.1;          %存x1
x2=4.1:0.0894:5.8;          %存x2
xb1=round((2^18-1)/15.1*(x1+3));      %存变换后的x1
xb2=round((2^15-1)/1.7*(x2-4.1));       %存变换后的x2

%产生第一代染色体
for i=1:20
    for j=18:-1:1
        a(i,j)=mod(xb1(i),2);
        xb1(i)=floor(xb1(i)/2);
    end
    for j=33:-1:19
        a(i,j)=mod(xb2(i),2);
        xb2(i)=floor(xb2(i)/2);
    end
end

%产生后代
for k=1:1000
    fsum =0;             %适值之和
    for i=1:20
        xb1(i)=2^17*a(i,1)+2^16*a(i,2)+2^15*a(i,3)+2^14*a(i,4)+2^13*a(i,5)+2^12*a(i,6)+2^11*a(i,7)+2^10*a(i,8)+2^9*a(i,9)+2^8*a(i,10)+2^7*a(i,11)+2^6*a(i,12)+2^5*a(i,13)+2^4*a(i,14)+2^3*a(i,15)+2^2*a(i,16)+2*a(i,17)+a(i,18);
        xb2(i)=2^14*a(i,19)+2^13*a(i,20)+2^12*a(i,21)+2^11*a(i,22)+2^10*a(i,23)+2^9*a(i,24)+2^8*a(i,25)+2^7*a(i,26)+2^6*a(i,27)+2^5*a(i,28)+2^4*a(i,29)+2^3*a(i,30)+2^2*a(i,31)+2*a(i,32)+a(i,33);
        x1(i)=15.1/(2^18-1)*xb1(i)-3;
        x2(i)=1.7/(2^15-1)*xb2(i)+4.1;
        f(i)=21.5+x1(i)*sin(4*pi*x1(i))+x2(i)*sin(20*pi*x2(i));  %适值
        fsum=fsum+f(i);
    end
    for i=1:20
        n(i)=round(f(i)/fsum*20) ;  %根据适值计算第i个染色体的后代数
        if n(i)<0.7
            n(i)=0;
        end
        if n(i)>1.3 && n(i)<2
            n(i)=2;
        end
    end
    count=20;
    for i=1:20
        if n(i)>0
            for m=(count+1):(count+n(i))
                for j=1:33
                    aby(m,j)=a(i,j);
                end
            end
        end
        count=count+n(i);
    end
    for m=1:count
        xb1(m)=2^17*aby(m,1)+2^16*aby(m,2)+2^15*aby(m,3)+2^14*aby(m,4)+2^13*aby(m,5)+2^12*aby(m,6)+2^11*aby(m,7)+2^10*aby(m,8)+2^9*aby(m,9)+2^8*aby(m,10)+2^7*aby(m,11)+2^6*aby(m,12)+2^5*aby(m,13)+2^4*aby(m,14)+2^3*aby(m,15)+2^2*aby(m,16)+2*aby(m,17)+aby(m,18);
        xb2(m)=2^14*aby(m,19)+2^13*aby(m,20)+2^12*aby(m,21)+2^11*aby(m,22)+2^10*aby(m,23)+2^9*aby(m,24)+2^8*aby(m,25)+2^7*aby(m,26)+2^6*aby(m,27)+2^5*aby(m,28)+2^4*aby(m,29)+2^3*aby(m,30)+2^2*aby(m,31)+2*aby(m,32)+aby(m,33);
        x1(m)=15.1/(2^18-1)*xb1(m)-3;
        x2(m)=1.7/(2^15-1)*xb2(m)+4.1;
        f(m)=21.5+x1(m)*sin(4*pi*x1(m))+x2(m)*sin(20*pi*x2(m));
    end
    for u=1:count
        for v=1:(count-1)
            if f(v)<f(v+1)
                fjh=f(v);
                f(v)=f(v+1);
                f(v+1)=fjh;
                for j=1:33
                    abyjh=aby(v,j);
                    aby(v,j)=aby(v+1,j);
                    aby(v+1,j)=abyjh;
                end
            end
        end
    end
            
    a=aby;
    
    %产生交换,有两组交换
    %产生要交换的4组染色体
    ihh=ceil(rand(4,1)*20);
    while ihh(2)==ihh(1)
        ihh(2)=ceil(rand()*20);
    end
    while ihh(3)==ihh(1)||ihh(3)==ihh(2)
        ihh(3)=ceil(rand()*20);
    end
    while ihh(4)==ihh(1)||ihh(4)==ihh(2)||ihh(4)==ihh(3)
        ihh(4)=ceil(rand()*20);
    end
    %产生从第几个数交换
    ihl=ceil(rand(2,1)*33);
    %进行交换
    jh=0;
    for j=ihl(1):33
        jh=a(ihh(1),j);
        a(ihh(1),j)=a(ihh(2),j);
        a(ihh(2),j)=jh;
    end
    for j=ihl(2):33
        jh=a(ihh(3),j);
        a(ihh(3),j)=a(ihh(4),j);
        a(ihh(4),j)=jh;
    end
    %进行变异
    l=ceil(rand()*50);
    if l==1              % 2%的概率变异
        byh=ceil(rand()*20);
        byl=ceil(rand()*33);
        if a(byh,byl)==1
            a(byh,byl)=0;
        else
            a(byh,byl)=1;
        end
    end
end
for i=1:20
    xb1(i)=2^17*a(i,1)+2^16*a(i,2)+2^15*a(i,3)+2^14*a(i,4)+2^13*a(i,5)+2^12*a(i,6)+2^11*a(i,7)+2^10*a(i,8)+2^9*a(i,9)+2^8*a(i,10)+2^7*a(i,11)+2^6*a(i,12)+2^5*a(i,13)+2^4*a(i,14)+2^3*a(i,15)+2^2*a(i,16)+2*a(i,17)+a(i,18);
    xb2(i)=2^14*a(i,19)+2^13*a(i,20)+2^12*a(i,21)+2^11*a(i,22)+2^10*a(i,23)+2^9*a(i,24)+2^8*a(i,25)+2^7*a(i,26)+2^6*a(i,27)+2^5*a(i,28)+2^4*a(i,29)+2^3*a(i,30)+2^2*a(i,31)+2*a(i,32)+a(i,33);
    x1(i)=15.1/(2^18-1)*xb1(i)-3;
    x2(i)=1.7/(2^15-1)*xb2(i)+4.1;
    f(i)=21.5+x1(i)*sin(4*pi*x1(i))+x2(i)*sin(20*pi*x2(i));  %适值
end
fmax=f(1);
x1max=x1(1);
x2max=x2(1);
for i=2:20
    if f(i)>fmax
        fmax=f(i);
        x1max=x1(i);
        x2max=x2(i);
    end
end

⌨️ 快捷键说明

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