MATLAB遗传算法之 无放回式随机余数选择算子(remainder stochastic sampling with replacement)最新版
2013-12-27 14:28
183 查看
MATLAB遗传算法之 无放回式随机余数选择算子(remainder stochastic sampling with replacement)最新版
MATLAB遗传算法之 无放回式随机余数选择算子(remainder stochastic sampling with replacement)效率不高,以过期!
function pop = SelectionFunction(pop,fitness_value,ObjV) [n,m]=size(pop); num_expectation = zeros(n,1); for i=1:1:n num_expectation(i)=n*fitness_value(i)/sum(fitness_value);%计算群体中每个个体在下一代群体中的生存期望数目。 end fitness_value_new = zeros(n,1);%存放新的适应度举矩阵 num_expectation_int = floor(num_expectation); %取生存期望数目整数部分作为对应个体在下一代群体中的生存数目。sum(num_expectation_int)可以确定出下一代群体的个数 for i=1:1:n fitness_value_new(i)=fitness_value(i) - num_expectation_int(i)*sum(num_expectation_int)/n; %确定下一代中还未确定的的 n - sum(num_expectation_int)个个体的新适应度 end pop_new = zeros(n,m);%用于存放新的个体。 a=zeros(1,m);%用于标识群体中一行,即一个个体。 s=0;%计数,用于标记新的群体中个数。 %以下方法为按照生存期望选择的个体。 for i=1:1:n if num_expectation_int(i)~=0 for j=1:1:num_expectation_int(i) if j==1 a=pop(i,:); else a=[a;pop(i,:)]; end end pop_new(s+1:s+num_expectation_int(i),:)=a; s=s+num_expectation_int(i); end end %按照生成期望选择个体结束 %以下为按照轮盘赌选择剩余的个体。 %Tips:当V为全零向量时,该算法无效,将随机选择个体;否则算法将从重要性指标不为0的个体中选择。 %index 选的m个体的位置索引 m = n - s ;%计算剩下的需要轮盘赌的个数 if m~=0 [pop_size,chromo_size] = size(pop); fitness_table = zeros(pop_size,1); for i=1:pop_size if i==1 fitness_table(i) = fitness_table(i) + fitness_value_new(i); else fitness_table(i) = fitness_table(i-1) + fitness_value_new(i); end end for i=s+1:pop_size r = rand * fitness_table(pop_size); first = 1; last = pop_size; mid = round((last+first)/2); idx = -1; while (first <= last) && (idx == -1) if r > fitness_table(mid) first = mid; elseif r < fitness_table(mid) last = mid; else idx = mid; break; end mid = round((last+first)/2); if (last - first) == 1 idx = last; break; end end pop_new(i,:)=pop(idx,:); end end
MATLAB遗传算法之 无放回式随机余数选择算子(remainder stochastic sampling with replacement)效率不高,以过期!
%选择操作: %无放回式随机余数选择 function selection() global pop; global fitness_value; [n,m]=size(pop); num_expectation = zeros(n,1); for i=1:1:n num_expectation(i)=n*fitness_value(i)/sum(fitness_value);%计算群体中每个个体在下一代群体中的生存期望数目。 end fitness_value_new = zeros(n,1);%存放新的适应度举矩阵 num_expectation_int = floor(num_expectation); %取生存期望数目整数部分作为对应个体在下一代群体中的生存数目。sum(num_expectation_int)可以确定出下一代群体的个数 for i=1:1:n fitness_value_new(i)=fitness_value(i) - num_expectation_int(i)*sum(num_expectation_int)/n; %确定下一代中还未确定的的 n - sum(num_expectation_int)个个体的新适应度 end pop_new = zeros(n,m);%用于存放新的个体。 a=zeros(1,m);%用于标识群体中一行,即一个个体。 s=0;%计数,用于标记新的群体中个数。 %以下方法为按照生存期望选择的个体。 for i=1:1:n if num_expectation_int(i)~=0 for j=1:1:num_expectation_int(i) if j==1 a=pop(i,:); else a=[a;pop(i,:)]; end end pop_new(s+1:s+num_expectation_int(i),:)=a; s=s+num_expectation_int(i); end end %按照生成期望选择个体结束 %以下为按照轮盘赌选择剩余的个体。 %Tips:当V为全零向量时,该算法无效,将随机选择个体;否则算法将从重要性指标不为0的个体中选择。 %index 选的m个体的位置索引 m = n - s ;%计算剩下的需要轮盘赌的个数 if(m ~= 0)%当为0时不进行轮盘赌选择操作 n=size(fitness_value_new);%待挑选的个体数 if max(fitness_value_new)==0&min(fitness_value_new)==0%如果V是全零向量,随机选择 index=ceil(rand(1,m)*n); else %将适应度为0的个体驱逐出待选择范围 temindex=find(fitness_value_new~=0); n=length(temindex);%待挑选的个体数目降低 fitness_value_new=fitness_value_new(temindex); index=zeros(1,m); %[V,I]=sort(V,'descend'); fitness_value_new=cumsum(fitness_value_new)/sum(fitness_value_new); pp=rand(1,m); for i=1:m, for j=1:n, if pp(i)<fitness_value_new(j) index(i)=j; break end end end index=temindex(index);%最终index中的值为原fitness_value_new数组中的位置。 end for i = 1:m pop_new = [pop_new;pop(index(i),:)]; end end for i=1:m for j=1:chromo_size pop(i,j) = pop_new(i,j); end end
相关文章推荐
- 随机采样池化--S3Pool: Pooling with Stochastic Spatial Sampling
- c#写的遗传算法的交叉算子,选择算子和变异算子
- 浅论遗传算法及其优化和算子选择
- 遗传算法中几种不同选择算子及Python实现
- 遗传算法的选择算子
- 浅论遗传算法及其优化和算子选择
- Reservoir sampling 数组随机等概率选择样品
- 遗传算法中的选择算子
- 数组随机选择
- Matlab学术图表色彩选择
- matlab 3个子窗口一个主窗口 选择显示
- Matlab获取用户选择的单个或多个文件代码
- Flex - 带时间选择(可手工输入)的日期组件,去掉了 StringToolkit.formatNumberWithChar
- 课程: Introduction to Programming with MATLAB in coursera
- matlab GUI实例:下拉菜单可选择的四则计算器
- 调用Weka API,在使用分类器(以随机森林Random Forest为例)的同时使用特征选择方法
- CentOS 最新版的下载地址 + 版本选择详解
- what is your choice?man with money or man with love?”(你选择什么?有钱人还是爱你的人?)
- 快速排序-常见中轴(主元pivot)选择方法及实现代码(末位/随机/三数中值/..)
- 【matlab】向量中选择元素插入该向量的位置