资源简介

使用matlab编程利用遗传算法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=randi(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;  %计算选择概率
  

评论

共有 条评论