一段遗传算法的代码

figure(1);
fplot('variable.*sin(10*pi*variable)+2.0',[-1,2]);   %画出函数曲线
%定义遗传算法参数
NIND=40;        %个体数目(Number of individuals)
MAXGEN=25;      %最大遗传代数(Maximum number of generations)
PRECI=20;       %变量的二进制位数(Precision of variables)
GGAP=0.9;       %代沟(Generation gap)
trace=zeros(2, MAXGEN);                        %寻优结果的初始值
FieldD=[20;-1;2;1;0;1;1];                      %区域描述器(Build field descriptor)
Chrom=crtbp(NIND, PRECI);                      %初始种群
gen=0;                                         %代计数器
variable=bs2rv(Chrom, FieldD);                 %计算初始种群的十进制转换
ObjV=variable.*sin(10*pi*variable)+2.0;        %计算目标函数值
while gen<MAXGEN
   FitnV=ranking(-ObjV);                                  %分配适应度值(Assign fitness values)        
   SelCh=select('sus', Chrom, FitnV, GGAP);               %选择
   SelCh=recombin('xovsp', SelCh, 0.7);                   %重组
   SelCh=mut(SelCh);                                      %变异
   variable=bs2rv(SelCh, FieldD);                         %子代个体的十进制转换
   ObjVSel=variable.*sin(10*pi*variable)+2.0;             %计算子代的目标函数值
   [Chrom ObjV]=reins(Chrom, SelCh, 1, 1, ObjV, ObjVSel); %重插入子代的新种群
   variable=bs2rv(Chrom, FieldD);
   gen=gen+1;                                             %代计数器增加
   %输出最优解及其序号,并在目标函数图像中标出,Y为最优解,I为种群的序号
   [Y, I]=max(ObjV);hold on;
   plot(variable(I), Y, 'bo');
   trace(1, gen)=max(ObjV);                               %遗传算法性能跟踪
   trace(2, gen)=sum(ObjV)/length(ObjV);
end
variable=bs2rv(Chrom, FieldD);                            %最优个体的十进制转换
hold on  grid;
plot(variable,ObjV,'b*');
figure(2);
plot(trace(1,:));
hold on;
plot(trace(2,:),'-.');grid
legend('解的变化','种群均值的变化')

 

 

 

 

CRTBP.m - Create an initial population
 
  This function creates a binary population of given size and structure.
 
  Syntax: [Chrom Lind BaseV] = crtbp(Nind, Lind, Base)
 
  Input Parameters:
 
   Nind - Either a scalar containing the number of individuals
          in the new population or a row vector of length two
          containing the number of individuals and their length.
 
   Lind - A scalar containing the length of the individual
         chromosomes.
 
   Base - A scalar containing the base of the chromosome
          elements or a row vector containing the base(s)
         of the loci of the chromosomes.
 
  Output Parameters:
 
   Chrom - A matrix containing the random valued chromosomes
          row wise.
 
   Lind - A scalar containing the length of the chromosome.
 
   BaseV - A row vector containing the base of the
         chromosome loci.
 
  Author: Andrew Chipperfield
  Date: 19-Jan-94
 
  Tested under MATLAB v6 by Alex Shenfield (20-Jan-03)

 
 
 
 
 
  BS2RV.m - Binary string to real vector
 
  This function decodes binary chromosomes into vectors of reals. The
  chromosomes are seen as the concatenation of binary strings of given
  length, and decoded into real numbers in a specified interval using
  either standard binary or Gray decoding.
 
  Syntax:       Phen = bs2rv(Chrom,FieldD)
 
  Input parameters:
 
                Chrom    - Matrix containing the chromosomes of the current
                           population. Each line corresponds to one
                           individual's concatenated binary string
                  representation. Leftmost bits are MSb and
                   rightmost are LSb.
 
                FieldD   - Matrix describing the length and how to decode
                  each substring in the chromosome. It has the
                  following structure:
 
     [len;  (num)
      lb;  (num)
      ub;  (num)
      code;  (0=binary     | 1=gray)
      scale;  (0=arithmetic | 1=logarithmic)
      lbin;  (0=excluded   | 1=included)
      ubin];  (0=excluded   | 1=included)
 
       where
     len   - row vector containing the length of
         each substring in Chrom. sum(len)
          should equal the individual length.
     lb,
     ub    - Lower and upper bounds for each
          variable.
     code  - binary row vector indicating how each
          substring is to be decoded.
     scale - binary row vector indicating where to
          use arithmetic and/or logarithmic
          scaling.
     lbin,
     ubin  - binary row vectors indicating whether
          or not to include each bound in the
          representation range
 
  Output parameter:
 
                Phen     - Real matrix containing the population phenotypes.
 
  Author: Carlos Fonseca,  Updated: Andrew Chipperfield,  
  Date: 08/06/93,      Date: 26-Jan-94,
 
  Tested under MATLAB v6 by Alex Shenfield (17-Jan-03)
 
 
 
 
 
  RANKING.M      (RANK-based fitness assignment)
 
  This function performs ranking of individuals.
 
  Syntax:  FitnV = ranking(ObjV, RFun, SUBPOP)
 
  This function ranks individuals represented by their associated
  cost, to be * minimized*, and returns a column vector FitnV
  containing the corresponding individual fitnesses. For multiple
  subpopulations the ranking is performed separately for each
  subpopulation.
 
  Input parameters:
     ObjV      - Column vector containing the objective values of the
                 individuals in the current population (cost values).
     RFun      - (optional) If RFun is a scalar in [1, 2] linear ranking is
                 assumed and the scalar indicates the selective pressure.
                 If RFun is a 2 element vector:
                 RFun(1): SP - scalar indicating the selective pressure
                 RFun(2): RM - ranking method
                          RM = 0: linear ranking
                          RM = 1: non-linear ranking
                 If RFun is a vector with length(Rfun) > 2 it contains
                 the fitness to be assigned to each rank. It should have
                 the same length as ObjV. Usually RFun is monotonously
                 increasing.
                 If RFun is omitted or NaN, linear ranking
                 and a selective pressure of 2 are assumed.
     SUBPOP    - (optional) Number of subpopulations
                 if omitted or NaN, 1 subpopulation is assumed
 
  Output parameters:
     FitnV     - Column vector containing the fitness values of the
                 individuals in the current population.
                
 
  Author:     Hartmut Pohlheim (Carlos Fonseca)
  History:    01.03.94     non-linear ranking
              10.03.94     multiple populations
              21.01.03     updated for MATLAB v6 by Alex Shenfield
 
 
 
 
 
  SELECT.M          (universal SELECTion)
 
  This function performs universal selection. The function handles
  multiple populations and calls the low level selection function
  for the actual selection process.
 
  Syntax:  SelCh = select(SEL_F, Chrom, FitnV, GGAP, SUBPOP)
 
  Input parameters:
     SEL_F     - Name of the selection function
     Chrom     - Matrix containing the individuals (parents) of the current
                 population. Each row corresponds to one individual.
     FitnV     - Column vector containing the fitness values of the
                 individuals in the population.
     GGAP      - (optional) Rate of individuals to be selected
                 if omitted 1.0 is assumed
     SUBPOP    - (optional) Number of subpopulations
                 if omitted 1 subpopulation is assumed
 
  Output parameters:
     SelCh     - Matrix containing the selected individuals.
 
  Author:     Hartmut Pohlheim
  History:    10.03.94     file created
              22.01.03     tested under MATLAB v6 by Alex Shenfield
 
 
 
 
 
  RECOMBIN.M       (RECOMBINation high-level function)
 
  This function performs recombination between pairs of individuals
  and returns the new individuals after mating. The function handles
  multiple populations and calls the low-level recombination function
  for the actual recombination process.
 
  Syntax:  NewChrom = recombin(REC_F, OldChrom, RecOpt, SUBPOP)
 
  Input parameters:
     REC_F     - String containing the name of the recombination or
                 crossover function
     Chrom     - Matrix containing the chromosomes of the old
                 population. Each line corresponds to one individual
     RecOpt    - (optional) Scalar containing the probability of
                 recombination/crossover occurring between pairs
                 of individuals.
                 if omitted or NaN, 1 is assumed
     SUBPOP    - (optional) Number of subpopulations
                 if omitted or NaN, 1 subpopulation is assumed
 
  Output parameter:
     NewChrom  - Matrix containing the chromosomes of the population
                 after recombination in the same format as OldChrom.
 
   Author:    Hartmut Pohlheim
   History:   18.03.94     file created
              22.01.03     tested under MATLAB v6 by Alex Shenfield
                           (NOTE : doesn't work with low level recmut.m)
 
 
 
 
 
  MUT.m
 
  This function takes the representation of the current population,
  mutates each element with given probability and returns the resulting
  population.
 
  Syntax: NewChrom = mut(OldChrom,Pm,BaseV)
 
  Input parameters:
 
   OldChrom - A matrix containing the chromosomes of the
       current population. Each row corresponds to
       an individuals string representation.
 
   Pm  - Mutation probability (scalar). Default value
       of Pm = 0.7/Lind, where Lind is the chromosome
       length is assumed if omitted.
 
   BaseV  - Optional row vector of the same length as the
       chromosome structure defining the base of the
       individual elements of the chromosome. Binary
       representation is assumed if omitted.
 
  Output parameter:
 
   NewChrom - A Matrix containing a mutated version of
       OldChrom.
 
  Author: Andrew Chipperfield
  Date: 25-Jan-94
 
  Tested under MATLAB v6 by Alex Shenfield (21-Jan-03)
 
 
 
 
 
  REINS.M        (RE-INSertion of offspring in population replacing parents)
 
  This function reinserts offspring in the population.
 
  Syntax: [Chrom, ObjVCh] = reins(Chrom, SelCh, SUBPOP, InsOpt, ObjVCh, ObjVSel)
 
  Input parameters:
     Chrom     - Matrix containing the individuals (parents) of the current
                 population. Each row corresponds to one individual.
     SelCh     - Matrix containing the offspring of the current
                 population. Each row corresponds to one individual.
     SUBPOP    - (optional) Number of subpopulations
                 if omitted or NaN, 1 subpopulation is assumed
     InsOpt    - (optional) Vector containing the insertion method parameters
                 ExOpt(1): Select - number indicating kind of insertion
                           0 - uniform insertion
                           1 - fitness-based insertion
                           if omitted or NaN, 0 is assumed
                 ExOpt(2): INSR - Rate of offspring to be inserted per
                           subpopulation (% of subpopulation)
                           if omitted or NaN, 1.0 (100%) is assumed
     ObjVCh    - (optional) Column vector containing the objective values
                 of the individuals (parents - Chrom) in the current
                 population, needed for fitness-based insertion
                 saves recalculation of objective values for population
     ObjVSel   - (optional) Column vector containing the objective values
                 of the offspring (SelCh) in the current population, needed for
                 partial insertion of offspring,
                 saves recalculation of objective values for population
 
  Output parameters:
     Chrom     - Matrix containing the individuals of the current
                 population after reinsertion.
     ObjVCh    - if ObjVCh and ObjVSel are input parameters, then column
                 vector containing the objective values of the individuals
                 of the current generation after reinsertion.
           
  Author:     Hartmut Pohlheim
  History:    10.03.94     file created
              19.03.94     parameter checking improved
              26.01.03     tested under MATLAB v6 by Alex Shenfield

你可能感兴趣的:(一段遗传算法的代码)