• 大小: 1KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-03
  • 语言: 其他
  • 标签: 遗传  

资源简介

Max f (x1, x2) = 21.5 + x1·sin(4πx1) + x2·sin(20πx2) s. t. -3.0 ≤ x1 ≤ 12.1 4.1 ≤ x2 ≤ 5.8

资源截图

代码片段和文件信息

%%%*****用遗传算法求函数最大值(双输入单输出)****%%%%%
clc;
clear;
x1min=-3.0; %输入变量1的变化范围
x1max=12.1;       
x2min=4.1;  %输入变量2的变化范围
x2max=5.8;                                      
pb=0.001;  %变异概率

N=20;    %初始种群数目=20
s1=ceil(log2(1000*(x1max-x1min))); %计算二进制串的长度
s2=ceil(log2(1000*(x2max-x2min))); 
s=s1+s2;    %%种群的位数

zq=randint(Ns); %产生初始种群,库函数和for循环均可
% for i=1:N
%     for j=1:s
%         r=rand(1);
%         if r>0.5
%         zq(ij)=1;
%         else zq(ij)=0;
%         end
%     end
% end

%%*****用于二进制转化为十进制****
for i=1:s1
    zhuanhuan(i1) = 2^(s1-i);
end
for i=s1+1:s
    zhuanhuan(i1) = 2^(s-i);
end

for k=1:500 %遗传算法的次数
    %%********将二进制转换成十进制
    for  i=1:N
        j1(i)=zq(i1:s1)*zhuanhuan(1:s1);
        j2(i)=zq(is1+1:s)*zhuanhuan(s1+1:s);
    end 
    %%****转化为目标函数值
    x1=x1min+j1*(x1max-x1min)/(2^s1-1);
    x2=x2min+j2*(x2max-x2min)/(2^s2-1);
    %%****计算适配值 
    f=21.5+x1.*sin(4*pi*x1)+x2.*sin(20*pi*x2);
    %%%******依次得到最大值,平均值
    f_max(k)=max(f);
    f_sum=sum(f);
    f_avr(k)=sum(f)/N;
    %%******复制******** 
    g=f/f_sum;  %计算选择概率
    q(1)=g(1);  %计算累计概率
    for i=2:N
        q(i)=q(i-1)+g(i);
    end
    
    for i=1:N    %轮盘赌法
       r=rand(1);
       for j=1:N
           if r<=q(j)
               zq1(i:)=zq(j:);
                break;
           end
       end
    end
    zq = zq1;
    %%*****交叉操作*****
    zq2 = zq;  
    zz = randperm(N);%产生交叉顺序
    for i=1:N/2
       v1 = randperm(s1-1);%产生交叉位
       v2 = randperm(s2-1);
       for j=v1(1)+1:s1     %交叉
           t = zq2(zz(i*2-1)j);
           zq2(zz(i*2-1)j) = zq2(zz(i*2)j);
           zq2(zz(i*2)j) = t;
       end
       for j=v2(1)+1:s2
           t = zq2(zz(i*2-1)j+s1);
           zq2(zz(i*2-1)j+s1) = zq2(zz(i*2)j+s1);
           zq2(zz(i*2)j+s1) = t;
       end
    end
    zq = zq2;
    %%*********变异操作****    
    for i=1:N 
       for j=1:s
           if rand(1)               if zq(ij)==1
                   zq(ij)=0;
               else zq(ij)=1;
               end
           end
       end
   end
end
figure()%绘图
subplot(211)plot(f_max)title(‘适配值最大值‘);
subplot(212)plot(f_avr)title(‘适配值平均值‘);

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2408  2010-05-12 23:44  yichuansuanfa.m

----------- ---------  ---------- -----  ----

                 2408                    1


评论

共有 条评论