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

📄 mutate.m

📁 matlab遗传算法工具箱
💻 M
字号:
% MUTATE.M       (MUTATion high-level function)%% This function takes a matrix OldChrom containing the % representation of the individuals in the current population,% mutates the individuals and returns the resulting population.%% The function handles multiple populations and calls the low-level% mutation function for the actual mutation process.%% Syntax:  NewChrom = mutate(MUT_F, OldChrom, FieldDR, MutOpt, SUBPOP)%% Input parameter:%    MUT_F     - String containing the name of the mutation function%    OldChrom  - Matrix containing the chromosomes of the old%                population. Each line corresponds to one individual.%    FieldDR   - Matrix describing the boundaries of each variable %                (real-values) or defining the base of the variables of %                each individual (discrete values).%                optional for (binary) discrete values%    MutOpt    - (optional) Vector containing mutation rate and shrink value%                if omitted or NaN, MutOpt = NaN is assumed%                MutOpt(1): MutR - number containing the mutation rate -%                           probability for mutation of a variable%                MutOpt(2): MutShrink - (optional) number for shrinking the%                           mutation range in the range [0, 1], possibility to%                           shrink the range of the mutation depending on,%                           for instance actual generation (only for%                           real-values).%    SUBPOP    - (optional) Number of subpopulations%                if omitted or NaN, 1 subpopulation is assumed%% Output parameter:%    NewChrom  - Matrix containing the chromosomes of the population%                after mutation in the same format as OldChrom.% Author:     Hartmut Pohlheim% History:    19.03.94     file createdfunction NewChrom = mutate(MUT_F, OldChrom, FieldDR, MutOpt, SUBPOP);% Check parameter consistency   if nargin < 2,  error('Not enough input parameter'); end   % Identify the population size (Nind) and the number of variables (Nvar)   [Nind,Nvar] = size(OldChrom);   if nargin < 3, IsDiscret = 1; FieldDR = [];   elseif isempty(FieldDR), IsDiscret = 1; FieldDR = [];   elseif isnan(FieldDR), IsDiscret = 1; FieldDR = [];   else       [mF, nF] = size(FieldDR);      if nF ~= Nvar, error('FieldDR and OldChrom disagree'); end      if mF == 2, IsDiscret = 0;      elseif mF == 1, IsDiscret = 1;      else error('FieldDR must be a matrix with 1 or 2 rows'); end   end   if nargin < 4, MutOpt = NaN; end   if nargin < 5, SUBPOP = 1;   elseif nargin > 4,      if isempty(SUBPOP), SUBPOP = 1;      elseif isnan(SUBPOP), SUBPOP = 1;      elseif length(SUBPOP) ~= 1, error('SUBPOP must be a scalar'); end   end   if (Nind/SUBPOP) ~= fix(Nind/SUBPOP), error('OldChrom and SUBPOP disagree'); end   Nind = Nind/SUBPOP;  % Compute number of individuals per subpopulation% Select individuals of one subpopulation and call low level function   NewChrom = [];   for irun = 1:SUBPOP,      ChromSub = OldChrom((irun-1)*Nind+1:irun*Nind,:);        if IsDiscret == 1, NewChromSub = feval(MUT_F, ChromSub, MutOpt, FieldDR);      elseif IsDiscret == 0, NewChromSub = feval(MUT_F, ChromSub, FieldDR, MutOpt); end      NewChrom=[NewChrom; NewChromSub];   end% End of function

⌨️ 快捷键说明

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