📄 sga_selection.m
字号:
% 选择复制
% 选择或复制操作是决定哪些个体可以进入下一代。程序中采用赌轮盘选择法选择,这种方法较易实现。
% 根据方程 pi=fi/∑fi=fi/fsum ,选择步骤:
% 1)在第 t 代,由(1)式计算 fsum 和 pi
% 2)产生 {0,1} 的随机数 rand( .),求 s=rand( .)*fsum
% 3)求 ∑fi≥s 中最小的 k ,则第 k 个个体被选中
% 4)进行 N 次2)、3)操作,得到 N 个个体,成为第 t=t+1 代种群
%遗传算法子程序
%Name: selection.m
%选择复制
function [newpop]=sga_selection(popsize,pop,fitvalue)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%调试用语句
% popsize=10;
% pop=[1023,980,2133,726,1946,657,1702,1224,1522,807;
% 2025,2565,1773,2340,2354,1144,2061,240,1573,825]
% fitvalue=[96.3814,229.8687,20.4580,142.9572,24.9700,2.2584,34.3755,71.0670,9.2961,9.4407]
%
%
% newpop=[1023,1023,1023,980,980,726,726,1702,1702,1224;
% 2025,2025,2025,2565,2565,2340,2340,2061,2061,240];
% dna_best =[980;2565];
% dna_best_value =229.8687;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% row=1;
% dna_best=pop(:,1);
% dna_best_value=fitvalue(1);
% while row<=popsize
% if dna_best_value<=fitvalue(row)
% dna_best=pop(:,row);
% dna_best_value=fitvalue(row);
% end
% row=row+1;
% end
%
% dna_best;
% dna_best_value;
totalfit=sum(fitvalue);%求适应值之和
% totalfit
fitvalue=fitvalue/totalfit;%单个个体被选择的概率
% fitvalue
fitvalue=cumsum(fitvalue); %如 fitvalue=[1 2 3 4],则 cumsum(fitvalue)=[1 3 6 10]
% fitvalue
ms=sort(rand(popsize,1)); %从小到大排列,将"rand(px,1)"产生的一列随机数变成轮盘赌形式的表示方法,由小到大排列
% ms
fitin=1; %fivalue是一向量,fitin代表向量中元素位,即fitvalue(fitin)代表第fitin个个体的单个个体被选择的概率
newin=1; %同理
while newin<=popsize;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if ms(newin)<fitvalue(fitin) %ms(newin)表示的是ms列向量中第"newin"位数值,同理fitvalue(fitin)
newpop(:,newin)=pop(:,fitin); %赋值 ,即将旧种群中 的第fitin个个体保留到下一代(newpop)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% newpop
% newin
newin=newin+1;
else
% fitin
fitin=fitin+1;
end
end
newpop;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -