遗传算法中mut变异算子函数说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
% 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)
%语法:新种群=mut(当前种群,变异概率,染色体个体元素的变异的基本字符)
%注意:变异概率省略时为0.7/Lind(Lind为染色体长度),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.
%变异概率-变异概率(标量)。假定如果省略时,其默认值为0.7/Lind(Lind是染色体长度)%
% 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)
%举例说明该函数,利用OldChrom=crtbp(5,5)得到OldChrom=
1 1 0 0 1
0 0 0 0 0
0 1 0 1 1
0 1 0 0 0
0 0 1 1 0
function NewChrom = mut(OldChrom,Pm,BaseV)
%新种群=mut(当前种群,变异概率,染色体个体元素的变异的基本字符).
% get population size (Nind) and chromosome length (Lind)
%得到个体数(Nind)和染色体长度(Lind)。
[Nind, Lind] = size(OldChrom) ; %返回值为Nind=5,Lind=5
% check input parameters
%检查输入参数
if nargin < 2, Pm = 0.7/Lind ; end
if isnan(Pm), Pm = 0.7/Lind; end
%上面2个if条件用来确定Pm的值。
%第一个if:如果输入参数个数小于2,返回Pm为0.7/Lind。
%第二个if:如果输入的Pm不是数,返回Pm为0.7/Lind。
%注:nargin是用来判断输入变量个数的函数。Isnan的函数功能:判断函数组的元素是否是%NaN(Not a Number)。例如输入isnan(NaN),返回值为1;输入isnan(3),返回值为0.
if (nargin < 3), BaseV = crtbase(Lind); end
if (isnan(BaseV)), BaseV = crtbase(Lind); end
if (isempty(BaseV)), BaseV = crtbase(Lind); end
%上面的3个if条件用来确定BaseV的值。
%第一个if:如果输入参数个数小于3,则执行BaseV= crtbase(Lind)的命令,并返回BaseV %的值。
%第二个if:如果输入的BaseV不是数(如:NaN),则也执行BaseV = crtbase(Lind)的命令,%并返回BaseV的值。
%第三个if:如果输入的BaseV为空(如:[]),则也执行BaseV = crtbase(Lind)的命令,并返%回BaseV的值。
%注:isempty的函数功能:判断一个数组是否为空。如果为空,返回值为1;如果非空,返%回值为0.例如输入isempty([]),返回值为1,;输入isempty(1),返回值为0。
if (nargin == 3) & (Lind ~= length(BaseV))
error('OldChrom and BaseV are incompatible'), end
%如果输入参数个数为3,而且矩阵列数不等于BaseV的长度,则会出现‘当前种群和基本%字符不匹配’的错误
% create mutation mask matrix
%创建突变掩模矩阵
BaseM = BaseV(ones(Nind,1),:) ;
%ones(5,1)=
1
1
1
1
1