展会信息港展会大全

遗传算法中种群大小必须为偶数吗
来源:互联网   发布日期:2011-09-19 13:30:15   浏览:16935次  

导读:遗传算法中种群大小必须为偶数吗...

最佳答案

  • 452722723qqq | 2009-12-27 11:54:04
  • 遗传算法(Genetic Algorithm)是模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法,它最初由美国Michigan大学J.Holland教授于1975年首先提出来的,并出版了颇有影响的专著《Adaptation in Natural and Artificial Systems》,GA这个名称才逐渐为人所知,J.Holland教授所提出的GA通常为简单遗传算法(SGA)。  遗传算法是从代表问题可能潜在的解集的一个种群(population)开始的,而一个种群则由经过基因(gene)编码的一定数目的个体(individual)组成。每个个体实际上是染色体(chromosome)带有特征的实体。染色体作为遗传物质的主要载体,即多个基因的集合,其内部表现(即基因型)是某种基因组合,它决定了个体的形状的外部表现,如黑头发的特征是由染色体中控制这一特征的某种基因组合决定的。因此,在一开始需要实现从表现型到基因型的映射即编码工作。由于仿照基因编码的工作很复杂,我们往往进行简化,如二进制编码,初代种群产生之后,按照适者生存和优胜劣汰的原理,逐代(generation)演化产生出越来越好的近似解,在每一代,根据问题域中个体的适应度(fitness)大小选择(selection)个体,并借助于自然遗传学的遗传算子(genetic operators)进行组合交叉(crossover)和变异(mutation),产生出代表新的解集的种群。这个过程将导致种群像自然进化一样的后生代种群比前代更加适应于环境,末代种群中的最优个体经过解码(decoding),可以作为问题近似最优解。传算法是解决搜索问题的一种通用算法,对于各种通用问题都可以使用。搜索算法的共同特征为:
      ① 首先组成一组候选解;
      ② 依据某些适应性条件测算这些候选解的适应度;
      ③ 根据适应度保留某些候选解,放弃其他候选解;
      ④ 对保留的候选解进行某些操作,生成新的候选解。
      在遗传算法中,上述几个特征以一种特殊的方式组合在一起:基于染色体群的并行搜索,带有猜测性质的选择操作、交换操作和突变操作。这种特殊的组合方式将遗传算法与其它搜索算法区别开来。
      遗传算法还具有以下几方面的特点:
      (1)遗传算法从问题解的串集开始嫂索,而不是从单个解开始。这是遗传算法与传统优化算法的极大区别。传统优化算法是从单个初始值迭代求最优解的;容易误入局部最优解。遗传算法从串集开始搜索,覆盖面大,利于全局择优。
      (2)许多传统搜索算法都是单点搜索算法,容易陷入局部的最优解。遗传算法同时处理群体中的多个个体,即对搜索空间中的多个解进行评估,减少了陷入局部最优解的风险,同时算法本身易于实现并行化。
      (3)遗传算法基本上不用搜索空间的知识或其它辅助信息,而仅用适应度函数值来评估个体,在此基础上进行遗传操作。适应度函数不仅不受连续可微的约束,而且其定义域可以任意设定。这一特点使得遗传算法的应用范围大大扩展。
      (4)遗传算法不是采用确定性规则,而是采用概率的变迁规则来指导他的搜索方向。
      (5)具有自组织、自适应和自学习性。遗传算法利用进化过程获得的信息自行组织搜索时,硬度大的个体具有较高的生存概率,并获得更适应环境的基因结构。由于遗传算法的整体搜索策略和优化搜索方法在计算是不依赖于梯度信息或其它辅助知识,而只需要影响搜索方向的目标函数和相应的适应度函数,所以遗传算法提供了一种求解复杂系统问题的通用框架,它不依赖于问题的具体领域,对问题的种类有很强的鲁棒性,所以广泛应用于许多科学,下面我们将介绍遗传算法的一些主要应用领域:
      1、 函数优化。
      函数优化是遗传算法的经典应用领域,也是遗传算法进行性能评价的常用算例,许多人构造出了各种各样复杂形式的测试函数:连续函数和离散函数、凸函数和凹函数、低维函数和高维函数、单峰函数和多峰函数等。对于一些非线性、多模型、多目标的函数优化问题,用其它优化方法较难求解,而遗传算法可以方便的得到较好的结果。
      2、 组合优化
      随着问题规模的增大,组合优化问题的搜索空间也急剧增大,有时在目前的计算上用枚举法很难求出最优解。对这类复杂的问题,人们已经意识到应把主要精力放在寻求满意解上,而遗传算法是寻求这种满意解的最佳工具之一。实践证明,遗传算法对于组合优化中的NP问题非常有效。例如遗传算法已经在求解旅行商问题、 背包问题、装箱问题、图形划分问题等方面得到成功的应用。
      此外,GA也在生产调度问题、自动控制、机器人学、图象处理、人工生命、遗传编码和机器学习等方面获得了广泛的运用。
  • hjkpal | 2009-12-27 15:28:37
  • function [Zp,Y1p,Y2p,Y3p,Xp,LC1,LC2]=JSPGA(M,N,Pm,T,P)
    %--------------------------------------------------------------------------
    % JSPGA.m
    % 车间作业调度问题遗传算法
    %--------------------------------------------------------------------------
    % 输入参数列表
    % M       遗传进化迭代次数
    % N       种群规模(取偶数)
    % Pm      变异概率
    % T       m×n的矩阵,存储m个工件n个工序的加工时间
    % P       1×n的向量,n个工序中,每一个工序所具有的机床数目
    % 输出参数列表
    % Zp      最优的Makespan值
    % Y1p     最优方案中,各工件各工序的开始时刻,可根据它绘出甘特图
    % Y2p     最优方案中,各工件各工序的结束时刻,可根据它绘出甘特图
    % Y3p     最优方案中,各工件各工序使用的机器编号
    % Xp      最优决策变量的值,决策变量是一个实数编码的m×n矩阵
    % LC1     收敛曲线1,各代最优个体适应值的记录
    % LC2     收敛曲线2,各代群体平均适应值的记录
    % 最后,程序还将绘出三副图片:两条收敛曲线图和甘特图(各工件的调度时序图)

    %第一步:变量初始化
    [m,n]=size(T);%m是总工件数,n是总工序数
    Xp=zeros(m,n);%最优决策变量
    LC1=zeros(1,M);%收敛曲线1
    LC2=zeros(1,N);%收敛曲线2

    %第二步:随机产生初始种群
    farm=cell(1,N);%采用细胞结构存储种群
    for k=1:N
       X=zeros(m,n);
       for j=1:n
           for i=1:m
               X(i,j)=1+(P(j)-eps)*rand;
           end
       end
       farm{k}=X;
    end

    counter=0;%设置迭代计数器
    while counter
     
       %第三步:交叉
       newfarm=cell(1,N);%交叉产生的新种群存在其中
       Ser=randperm(N);
       for i=1:2:(N-1)
           A=farm{Ser(i)};%父代个体
           B=farm{Ser(i+1)};
           Manner=unidrnd(2);%随机选择交叉方式
           if Manner==1
               cp=unidrnd(m-1);%随机选择交叉点
               %双亲双子单点交叉
               a=[A(1:cp,:);B((cp+1):m,:)];%子代个体
               b=[B(1:cp,:);A((cp+1):m,:)];
           else
               cp=unidrnd(n-1);%随机选择交叉点
               a=[A(:,1:cp),B(:,(cp+1):n)];%双亲双子单点交叉
               b=[B(:,1:cp),A(:,(cp+1):n)];
           end
           newfarm{i}=a;%交叉后的子代存入newfarm
           newfarm{i+1}=b;
       end
       %新旧种群合并
       FARM=[farm,newfarm];
     
       %第四步:选择复制
       FITNESS=zeros(1,2*N);
       fitness=zeros(1,N);
       plotif=0;
       for i=1:(2*N)
           X=FARM{i};
           Z=COST(X,T,P,plotif);%调用计算费用的子函数
           FITNESS(i)=Z;
       end
       %选择复制采取两两随机配对竞争的方式,具有保留最优个体的能力
       Ser=randperm(2*N);
       for i=1:N
           f1=FITNESS(Ser(2*i-1));
           f2=FITNESS(Ser(2*i));
           if f1<=f2
               farm{i}=FARM{Ser(2*i-1)};
               fitness(i)=FITNESS(Ser(2*i-1));
           else
               farm{i}=FARM{Ser(2*i)};
               fitness(i)=FITNESS(Ser(2*i));
           end
       end
       %记录最佳个体和收敛曲线
       minfitness=min(fitness)
       meanfitness=mean(fitness)
       LC1(counter+1)=minfitness;%收敛曲线1,各代最优个体适应值的记录
       LC2(counter+1)=meanfitness;%收敛曲线2,各代群体平均适应值的记录
       pos=find(fitness==minfitness);
       Xp=farm{pos(1)};
     
       %第五步:变异
       for i=1:N
           if Pm>rand;%变异概率为Pm
               X=farm{i};
               I=unidrnd(m);
               J=unidrnd(n);
               X(I,J)=1+(P(J)-eps)*rand;
               farm{i}=X;
           end
       end
       farm{pos(1)}=Xp;
     
       counter=counter+1
    end

    %输出结果并绘图
    figure(1);
    plotif=1;
    X=Xp;
    [Zp,Y1p,Y2p,Y3p]=COST(X,T,P,plotif);
    figure(2);
    plot(LC1);
    figure(3);
    plot(LC2);
  • 分享到:

    赞助本站

    人工智能实验室

    相关热词: keywords String

    AiLab云推荐
    展开

    热门栏目HotCates

    Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港