% 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 parameter, than 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
function [Chrom, ObjVCh] = reins(Chrom, SelCh, SUBPOP, InsOpt, ObjVCh, ObjVSel);
% Check parameter consistency
if nargin < 2, error('Not enough input parameter'); end
if (nargout == 2 & nargin < 6), error('Input parameter missing: ObjVCh and/or ObjVSel'); end
[NindP, NvarP] = size(Chrom);
[NindO, NvarO] = size(SelCh);
if nargin == 2, SUBPOP = 1; end
if nargin > 2,
if isempty(SUBPOP), SUBPOP = 1;
elseif isnan(SUBPOP), SUBPOP = 1;
elseif length(SUBPOP) ~= 1, error('SUBPOP must be a scalar'); end
end
if (NindP/SUBPOP) ~= fix(NindP/SUBPOP), error('Chrom and SUBPOP disagree'); end
if (NindO/SUBPOP) ~= fix(NindO/SUBPOP), error('SelCh and SUBPOP disagree'); end
NIND = NindP/SUBPOP; % Compute number of individuals per subpopulation
NSEL = NindO/SUBPOP; % Compute number of offspring per subpopulation
IsObjVCh = 0; IsObjVSel = 0;
if nargin > 4,
[mO, nO] = size(ObjVCh);
if nO ~= 1, error('ObjVCh must be a column vector'); end
if NindP ~= mO, error('Chrom and ObjVCh disagree'); end
IsObjVCh = 1;
end
if nargin > 5,
[mO, nO] = size(ObjVSel);
if nO ~= 1, error('ObjVSel must be a column vector'); end
if NindO ~= mO, error('SelCh and ObjVSel disagree'); end
IsObjVSel = 1;
end
if nargin < 4, INSR = 1.0; Select = 0; end
if nargin >= 4,
if isempty(InsOpt), INSR = 1.0; Select = 0;
elseif isnan(InsOpt), INSR = 1.0; Select = 0;
else
INSR = NaN; Select = NaN;
if (length(InsOpt) > 2), error('Parameter InsOpt too long'); end
if (length(InsOpt) >= 1), Select = InsOpt(1); end
if (length(InsOpt) >= 2), INSR = InsOpt(2); end
if isnan(Select), Select = 0; end
if isnan(INSR), INSR =1.0; end
end
end
if (INSR < 0 | INSR > 1), error('Parameter for insertion rate must be a scalar in [0, 1]'); end
if (INSR < 1 & IsObjVSel ~= 1), error('For selection of offspring ObjVSel is needed'); end
if (Select ~= 0 & Select ~= 1), error('Parameter for selection method must be 0 or 1'); end
if (Select == 1 & IsObjVCh == 0), error('ObjVCh for fitness-based exchange needed'); end
if INSR == 0, return; end
NIns = min(max(floor(INSR*NSEL+.5),1),NIND); % Number of offspring to insert
% perform insertion for each subpopulation
for irun = 1:SUBPOP,
% Calculate positions in old subpopulation, where offspring are inserted
if Select == 1, % fitness-based reinsertion
[Dummy, ChIx] = sort(-ObjVCh((irun-1)*NIND+1:irun*NIND));
else % uniform reinsertion
[Dummy, ChIx] = sort(rand(NIND,1));
end
PopIx = ChIx((1:NIns)')+ (irun-1)*NIND;
% Calculate position of Nins-% best offspring
if (NIns < NSEL), % select best offspring
[Dummy,OffIx] = sort(ObjVSel((irun-1)*NSEL+1:irun*NSEL));
else
OffIx = (1:NIns)';
end
SelIx = OffIx((1:NIns)')+(irun-1)*NSEL;
% Insert offspring in subpopulation -> new subpopulation
Chrom(PopIx,:) = SelCh(SelIx,:);
if (IsObjVCh == 1 & IsObjVSel == 1), ObjVCh(PopIx) = ObjVSel(SelIx); end
end
% End of function
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于matlab的多层编码遗传算法的车间调度算法-内含数据集和源码.zip (14个子文件)
基于matlab的多层编码遗传算法的车间调度算法
SELECT.M 2KB
across.m 2KB
cal.m 1KB
Find.m 164B
caltime.m 1KB
selectJm.m 363B
main.m 3KB
REINS.M 5KB
ranking.M 4KB
RWS.M 1KB
scheduleData.mat 527B
calP.m 524B
aberranceJm.m 1020B
plotRec.m 469B
共 14 条
- 1
资源评论
AI拉呱
- 粉丝: 2835
- 资源: 5448
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功