📄 emigrant.m
字号:
function [emigx,fxk]=emigrant(us,ux,xk,emig_pop,emig_ratio,n,pop,res_flg,gk,hk,cmax,tpop,tmax,flag_x,dis_date,float_date)
%馄饨移民算子,emig_pop为移民规模,emig_ratio为移民率,xk(1,n)为馄饨变量初始值。
%us,ux分别为设计变量上下限数组,采用Logistic馄饨模型。
%+++++++++++++++++++++++++++++++++++++++++
if xk==zeros(1,n)
ht=zeros(1,n);
for i=1:n
ht(1,i)=unifrnd(0,1); %随机生成初始馄饨变量行向量。
end
else
ht(1,:)=xk;
end
%+++++++++++++++++++++++++++++++++++++++++
for j=1:n %生成馄饨变量矩阵femigx的第一行。
femigx(1,j)=4*ht(1,j)*(1-ht(1,j));
end
for i=2:emig_pop %完成混沌变量矩阵。
for k=1:n
femigx(i,k)=4*femigx(i-1,k)*(1-femigx(i-1,k));
end
end
femigx=2/pi*asin(femigx.^0.5);%均匀概率转换
fxk(1,:)=femigx(emig_pop,:); %初始混沌变量数组更新。
%+++++++++++++++++++++++++++++++++++++++++
for i=1:emig_pop %把混沌变量矩阵变成设计变量矩阵semigx。
for k=1:n
semigx(i,k)=ux(k)+(us(k)-ux(1,k))*femigx(i,k);
end
semigx(i,:)=discrete(semigx(i,:),n,flag_x,dis_date,float_date); %离散化处理
end
%++++++++++++++++++++++++++++++++++++++++++
for j=1:emig_pop
fitFx(j)=fitfunction(semigx(j,:),res_flg,gk,hk,cmax,tpop,tmax);
% 计算混沌设计变量的适应值,fitfunction为求染色体适应值的m函数。
end
kemig=floor(pop*emig_ratio); %计算从移民规模中向GA输出的移民数kemig。
changex=zeros(1,n);
for i=1:kemig+1 %冒泡法按升序对移民群体排序。
nnk=emig_pop-i;
for j=1:nnk
if fitFx(j)>fitFx(j+1)
changex(1,:)=semigx(j,:);
semigx(j,:)=semigx(j+1,:);
semigx(j+1,:)=changex(1,:);
end
end
end
%+++++++++++++++++++++++++++++++++++++++++++
kky=emig_pop-kemig+1;
for i=emig_pop:-1:kky
% 从移民群体中选择kemig个适应值较大的染色体,输送给GA进入下一轮进化。
emigx((emig_pop-i+1),:)=semigx(i,:);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -