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

📄 genetic_1.m

📁 一个难得的遗传算法matlab程序
💻 M
字号:
function [x_opt]=genetic_1()
%遗传算法求f()=x^2(0<x<31)的整数最优解
%编码和初始化群体
pop=zeros(4,5);
for m=1:4
    a=rand(1,5);
    a(find(a>=0.5))=1;
    a(find(a<0.5))=0;
    pop(m,:)=a;
end

for generation=1:100
%计算各染色体的适应值
fitness=zeros(1,4);
temp=[16 8 4 2 1];
for m=1:4
    fitness(m)=sum(pop(m,:).*temp);
end

%由各染色体的适应值计算概率
property=zeros(1,4);
for m=1:4
    property(m)=fitness(m)/sum(fitness);
end

%由概率选定种群
pop_next=zeros(4,5);
for m=1:4
    p(m)=sum(property(1:m));
end
count=1;
for m=1:4
    b=rand;  
    if b<=p(1)
        pop_next(count,:)=pop(1);
        count=count+1;
    elseif b<=p(2)
        pop_next(count,:)=pop(2);
        count=count+1;
    elseif b<=p(3)
        pop_next(count,:)=pop(3);
        count=count+1;
    elseif b<=p(4)
        pop_next(count,:)=pop(4);
        count=count+1;
    end
end

%交配
c=ceil(unifrnd(0,5));
pop_next(1,c+1:end)=pop_next(2,c+1:end);
pop_next(3,c+1:end)=pop_next(4,c+1:end);

%变异
for m=1:4
    for n=1:5
        d=rand;
        if d<0.005    %变异概率不能取得太大
            pop_next(m,n)=1-pop_next(m,n);
        end
    end
end

pop=pop_next;
end

%显示结果
result=zeros(1,4);
for m=1:4
    fitness(m)=sum(pop(m,:).*temp)
end

% fitness =
% 
%     31    31    31    31
% 
% 
% fitness =
% 
%     31    31    31    31
% 
% 
% fitness =
% 
%     31    31    31    31
% 
% 
% fitness =
% 
%     31    31    31    31

⌨️ 快捷键说明

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