% MIGRATE.M (MIGRATion of individuals between subpopulations)
%
% This function performs migration of individuals.
%
% Syntax: [Chrom, ObjV] = migrate(Chrom, SUBPOP, MigOpt, ObjV)
%
% Input parameters:
% Chrom - Matrix containing the individuals of the current
% population. Each row corresponds to one individual.
% SUBPOP - Number of subpopulations
% MigOpt - (optional) Vector containing migration parameters
% MigOpt(1): MIGR - Rate of individuals to be migrated per
% subpopulation (% of subpopulation)
% if omitted or NaN, 0.2 (20%) is assumed
% MigOpt(2): Select - number indicating the selection method
% of replacing individuals
% 0 - uniform selection
% 1 - fitness-based selection (replace worst
% individuals)
% if omitted or NaN, 0 is assumed
% MigOpt(3): Structure - number indicating the structure
% of the subpopulations for migration
% 0 - net structure (unconstrained migration)
% 1 - neighbourhood structure
% 2 - ring structure
% if omitted or NaN, 0 is assumed
% ObjV - (optional) Column vector containing the objective values
% of the individuals in the current population, needed for
% fitness-based migration, this saves the
% recalculation of objective values for population.
%
% Output parameters:
% Chrom - Matrix containing the individuals of the current
% population after migration.
% ObjV - if ObjV is input parameter, than column vector containing
% the objective values of the individuals of the current
% generation after migration.
% Author: Hartmut Pohlheim
% History: 16.02.94 file created
% 18.02.94 comments at the beginning added
% exchange of ObjV too
% 25.02.94 clean up
% 26.02.94 ObjV optional input parameter
% Select and Structure added, parameter reordered
% 17.03.94 renamed to migrate.m, more parameter checks
function [Chrom, ObjV] = migrate(Chrom, SUBPOP, MigOpt, ObjV);
% Check parameter consistency
if nargin < 2, error('Input parameter SUBPOP missing'); end
if (nargout == 2 & nargin < 4), error('Input parameter ObjV missing'); end
[Nind, Nvar] = size(Chrom);
if length(SUBPOP) ~= 1, error('SUBPOP must be a scalar'); end
if SUBPOP == 1, return; end
if (Nind/SUBPOP) ~= fix(Nind/SUBPOP), error('Chrom and SUBPOP disagree'); end
NIND = Nind/SUBPOP; % Compute number of individuals per subpopulation
if nargin > 3,
[mO, nO] = size(ObjV);
if nO ~= 1, error('ObjV must be a column vector'); end
if Nind ~= mO, error('Chrom and ObjV disagree'); end
IsObjV = 1;
else IsObjV = 0; ObjV = [];
end
if nargin < 3, MIGR = 0.2; Select = 0; Structure = 0; end
if nargin > 2,
if isempty(MigOpt), MIGR = 0.2; Select = 0; Structure = 0;
elseif isnan(MigOpt), MIGR = 0.2; Select = 0; Structure = 0;
else
MIGR = NaN; Select = NaN; Structure = NaN;
if length(MigOpt) > 3, error('Parameter MigOpt is too long'); end
if length(MigOpt) >= 1, MIGR = MigOpt(1); end
if length(MigOpt) >= 2, Select = MigOpt(2); end
if length(MigOpt) >= 3, Structure = MigOpt(3); end
if isnan(MIGR), MIGR =0.2; end
if isnan(Select), Select = 0; end
if isnan(Structure), Structure = 0; end
end
end
if (MIGR < 0 | MIGR > 1), error('Parameter for migration rate must be a scalar in [0 1]'); end
if (Select ~= 0 & Select ~= 1), error('Parameter for selection method must be 0 or 1'); end
if (Structure < 0 | Structure > 2), error ('Parameter for structure must be 0, 1 or 2'); end
if (Select == 1 & IsObjV == 0), error('ObjV for fitness-based migration needed');end
if MIGR == 0, return; end
MigTeil = max(floor(NIND * MIGR), 1); % Number of individuals to migrate
% Perform migration between subpopulations --> create a matrix for migration
% in every subpopulation from best individuals of the other subpopulations
% Clear storing matrices
ChromMigAll = [];
if IsObjV == 1, ObjVAll = []; end
% Create matrix with best/uniform individuals of all subpopulations
for irun = 1:SUBPOP
% sort ObjV of actual subpopulation
if Select == 1, % fitness-based selection
[Dummy, IndMigSo]=sort(ObjV((irun-1)*NIND+1:irun*NIND));
else % if Select == 0 % uniform selection
[Dummy, IndMigSo]=sort(rand(NIND, 1));
end
% take MigTeil (best) individuals, copy individuals and objective values
IndMigTeil=IndMigSo(1:MigTeil)+(irun-1)*NIND;
ChromMigAll = [ChromMigAll; Chrom(IndMigTeil,:)];
if IsObjV == 1, ObjVAll = [ObjVAll; ObjV(IndMigTeil,:)]; end
end
% perform migration
for irun = 1:SUBPOP
ChromMig = ChromMigAll;
if IsObjV == 1, ObjVMig = ObjVAll; end
if Structure == 1, % neighbourhood
% select individuals of neighbourhood subpopulations for ChromMig and ObjVMig
popnum = [SUBPOP 1:SUBPOP 1];
ins1 = popnum(irun); ins2 = popnum(irun + 2);
InsRows = [(ins1-1)*MigTeil+1:ins1*MigTeil (ins2-1)*MigTeil+1:ins2*MigTeil];
ChromMig = ChromMig(InsRows,:);
if IsObjV == 1, ObjVMig = ObjVMig(InsRows,:); end
elseif Structure == 2, % ring
% select individuals of actual-1 subpopulation for ChromMig and ObjVMig
popnum = [SUBPOP 1:SUBPOP 1];
ins1 = popnum(irun);
InsRows = (ins1-1)*MigTeil+1:ins1*MigTeil;
ChromMig = ChromMig(InsRows,:);
if IsObjV == 1, ObjVMig = ObjVMig(InsRows,:); end
else % if Structure == 0, % complete net
% delete individuals of actual subpopulation from ChromMig and ObjVMig
DelRows = (irun-1)*MigTeil+1:irun*MigTeil;
ChromMig(DelRows,:) = [];
if IsObjV == 1, ObjVMig(DelRows,:) = []; end
end
% Create an index from a sorted vector with random numbers
[Dummy,IndMigRa]=sort(rand(size(ChromMig,1),1));
% Take MigTeil numbers from the random vector
IndMigN=IndMigRa((1:MigTeil)');
% copy MigTeil individuals into Chrom and ObjV
Chrom((1:MigTeil)+(irun-1)*NIND,:) = ChromMig(IndMigN,:);
if IsObjV == 1, ObjV((1:MigTeil)+(irun-1)*NIND,:) = ObjVMig(IndMigN,:); end
end
% End of function
没有合适的资源?快使用搜索试试~ 我知道了~
遗传算法的工具箱 GA工具箱
共47个文件
m:35个
asv:9个
log:3个
5星 · 超过95%的资源 需积分: 28 123 下载量 163 浏览量
2011-09-05
16:36:10
上传
评论 4
收藏 49KB RAR 举报
温馨提示
遗传算法的工具箱function [Chrom, Lind, BaseV] = crtbp(Nind, Lind, Base) nargs = nargin ; % Check parameter consistency if nargs >= 1, [mN, nN] = size(Nind) ; end if nargs >= 2, [mL, nL] = size(Lind) ; end if nargs == 3, [mB, nB] = size(Base) ; end if nN == 2 if (nargs == 1) Lind = Nind(2) ; Nind = Nind(1) ; BaseV = crtbase(Lind) ; elseif (nargs == 2 & nL == 1) BaseV = crtbase(Nind(2),Lind) ; Lind = Nind(2) ; Nind = Nind(1) ; elseif (nargs == 2 & nL > 1) if Lind ~= length(Lind), error('Lind and Base disagree'); end BaseV = Lind ; Lind = Nind(2) ; Nind = Nind(1) ; end
资源推荐
资源详情
资源评论
收起资源包目录
GA工具箱.rar (47个子文件)
GA工具箱
XOVSH.M 1KB
GA2.asv 1KB
REP.M 1KB
RWS.M 1KB
XOVSHRS.M 1KB
RECMUT.M 5KB
CRTRP.M 2KB
GshubertA.asv 3KB
XOVDP.M 1KB
fg5.asv 212B
MUTBGA.M 5KB
SGA.M 2KB
ff.asv 3KB
CRTBASE.M 1KB
RECINT.M 2KB
REINS.M 5KB
GshubertA2.asv 2KB
SUS.M 1KB
RANKING.M 5KB
RECDIS.M 2KB
RECOMBIN.M 2KB
XOVSPRS.M 1KB
MPGA.M 4KB
SELECT.M 2KB
OBJFUN1.M 3KB
GA1.m 1KB
Shubert.asv 626B
CRTBP.M 2KB
RESPLOT.M 2KB
MUT.M 2KB
CONTENTS.M 2KB
XOVMP.M 3KB
BS2RV.M 3KB
MIGRATE.M 7KB
MUTATE.M 3KB
hs_err_pid1772.log 11KB
hs_err_pid2420.log 11KB
RECLIN.M 2KB
GA2.m 1KB
OBJHARV.M 2KB
GshubertA1.asv 1KB
XOVSP.M 1KB
F5.asv 1KB
hs_err_pid2172.log 11KB
SCALING.M 1KB
XOVDPRS.M 1KB
multi.asv 96B
共 47 条
- 1
xyhappiness
- 粉丝: 0
- 资源: 5
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页