📄 frist.m
字号:
function [fristx,fcmax,objopt,xpop]=frist(xpop,tpop,res_flg,pop,gk,hk,cmax,n,tmax)
% 确定群体xpop(pop,n)中的最优染色体fristx。
% 求最优染色体的目标函数值或罚函数值fitopt(tpop)。
% 求最差染色体的目标函数值或罚函数值fcmax。
%++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++%
if res_flg>0
%---------------------------------%
fenFx=zeros(1,pop);
chxyy=zeros(1,n);
for i=1:pop % 计算xpop的罚函数值。
fenFx(1,i)=fenelize(xpop(i,:),gk,hk,tpop+1,tmax);
end
for i=1:pop-1 % 冒泡法把染色体按罚函数值排升序。
nm=pop-i;
for j=1:nm
if fenFx(1,j)>fenFx(1,j+1)
chxyy(1,:)=xpop(j,:);
xpop(j,:)=xpop(j+1,:);
xpop(j+1,:)=chxyy(1,:);
changefen=fenFx(1,j);
fenFx(1,j)=fenFx(1,j+1);
fenFx(1,j+1)=changefen;
end
end
end
%---------------------------------%
for i=pop:-1:1
if fenFx(1,i)~=inf
%fenFx(1,i)=inf时说明该染色体超过目标函数定义域
fcmax=fenFx(1,i);
break
end
end
fristx=xpop(1,:);
objopt=fenFx(1,1); % 输出最优染色体的惩罚函数值
% objopt=objfunction(fristx); % 用于程序调试,输出最优染色体的目标函数值
else
%---------------------------------%
chxyy=zeros(1,n);
for i=1:pop % 计算xpop的目标函数。
objFx(1,i)=objfunction(xpop(i,:));
end
for i=1:pop-1 % 冒泡法把染色体按目标函数排升序。
nm=pop-i;
for j=1:nm
if objFx(1,j)>objFx(1,j+1)
chxyy(1,:)=xpop(j,:);
xpop(j,:)=xpop(j+1,:);
xpop(j+1,:)=chxyy(1,:);
changeobj=objFx(1,j);
objFx(1,j)=objFx(1,j+1);
objFx(1,j+1)=changeobj;
end
end
end
%---------------------------------%
fcmax=objFx(1,pop);
objopt=objFx(1,1);
fristx(1,:)=xpop(1,:);
end
% fitfunction为求染色体适应值的函数
% objfuncction为求目标函数值的函数。
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -