Ylisar 发表于 2022-7-31 12:09

优化算法_遗传算法

遗传算法定义可以参考百度百科资料遗传算法_百度百科,具体步骤如图所示:


此案例主要是使用matlab进行遗传算法简单案例编写,其中选择操作使用“锦标赛选择法”,交叉操作使用“单点交叉法”,变异操作使用“单点变异法”。
源码下载路径:链接:https://pan.baidu.com/s/1ITu5imiXSLg2YJLc5-6fvA?pwd=1234 提取码:1234
具体代码如下:

计算适应度fun()函数:

function y=fun(x)
    y=sum(x);
end
锦标赛选择法selectPop()函数:

function p=selectPop(Parent)
   
    %锦标赛选择法
    n=numel(Parent);
    index=randperm(n);
    p1=Parent(index(1));
    p2=Parent(index(2));
    if p1.y<=p2.y
      p=p1;
    else
      p=p2;
    end
end
单点交叉法crossPop()函数:

function =crossPop(x1,x2)

    %单点交叉
    n=numel(x1);
    s=randi();   %交换点位置

    y1=;
    y2=;

end
单点变异法mutatePop()函数:

function p=mutatePop(x,mu)

    %单点变异
    if rand<=mu
      n=numel(x);
      s=randi();   %变异点
      %将0变为1,将1变为0
      if x(s)==0
            x(s)=1;
      else
            x(s)=0;
      end
    end

    p=x;

end
运行文件main.m:

clc;clear

nVar=100;

%初始化种群
nPop=30;
maxIt=2000;%最大迭代次数
nPc=0.8;    %交叉比例
nC=round(nPop*nPc/2)*2; %子代规模大小
nMu=0.01;    %变异概率


template.x=[];
template.y=[];

Parent=repmat(template,nPop,1);


for i=1:nPop

    Parent(i).x=randi(,1,nVar);
    Parent(i).y=fun(Parent(i).x);   %计算适应度值y

end

for It=1:maxIt
    %定义子代数据存放模板
    Offspring=repmat(template,nC/2,2);
    %生成子代种群
    for j=1:nC/2
      p1=selectPop(Parent);
      p2=selectPop(Parent);

      =crossPop(p1.x,p2.x);
    end
    Offspring=Offspring(:); %转置
   
    for k=1:nC

      Offspring(k).x=mutatePop(Offspring(k).x,nMu);
      Offspring(k).y=fun(Offspring(k).x);
    end

    %种群筛选
    newPop=;
    [~,so]=sort(,'ascend');
    newPop=newPop(so);
    Parent=newPop(1:nPop);

    disp(['迭代次数:',num2str(It),',最小值为:',num2str(Parent(1).y)]);

end
页: [1]
查看完整版本: 优化算法_遗传算法