📄 my_sga_calfitvalue.asv
字号:
%计算个体的适应值
%遗传算法子程序
%计算个体的适应值
function fitvalue=my_sga_calfitvalue(pop,fun_num,var_num)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 调试用语句
% pop=[1023,980,2133,726,1946,657,1702,1224,1522,807;
% 2025,2565,1773,2340,2354,1144,2061,240,1573,825];
% popsize=10;
%
% fitvalue=[96.3814,229.8687,20.4580,142.9572,24.9700,2.2584,34.3755,71.0670,9.2961,9.4407 ];
% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[px,py]=size(pop);
popsize=py;
fitvalue=zeros(1,popsize);
% var_num = 10;
pop_con = pop;
switch fun_num
case 1
% pop_con=(pop-10000)./100; %pop数据准备 将区间由(0,,3096)划到(--1.048,2.048)
for i=1:popsize
% fitvalue(1,i)=-(pop_con(1,i)^2+pop_con(2,i)^2);
for j = 1:var_num
fitvalue(1,i)=fitvalue(1,i)-(pop_con(j,i)^2);
end
end
case 2
% pop_con=(pop-1000)./100; %pop数据准备 将区间由(0,,3096)划到(--1.048,2.048)
for i=1:popsize
% fitvalue(1,i)=-(abs(pop_con(1,i))+abs(pop_con(2,i))+abs(pop_con(1,i))*abs(pop_con(2,i)));
time = 1;
and_value = 0;
for j = 1:var_num
and_value = and_value + abs(pop_con(j,i));
time = time * abs(pop_con(j,i));
fitvalue(1,i)=fitvalue(1,i)-(and_value + time);
end
end
case 3
pop_con=(pop-10000)./100; %pop数据准备 将区间由(0,,3096)划到(--1.048,2.048)
for i=1:popsize
% fitvalue(1,i)=-(pop_con(1,i)^2+(pop_con(1,i)+pop_con(2,i))^2);
for var_j = 1:var_num
add_value = 0;
for add_j = 1:var_j
add_value = add_value + pop_con(add_j,i);
end
fitvalue(1,i) = fitvalue(1,i) - add_value^2;
end
end
case 4 %better
pop_con=(pop-10000)./100;
for i=1:popsize
% fitvalue(1,i)=-max(abs(pop_con(1,i)),abs(pop_con(2,i)));
fitvalue(1,i) = -max(abs(pop_con(:,i)));
end
case 5
pop_con=(pop-30000)./1000; %pop数据准备 将区间由(0,,3096)划到(--1.048,2.048)
for i=1:popsize
% fitvalue(1,i)=-(100*(pop_con(2,i)-pop_con(1,i)^2)^2+(pop_con(1,i)-1)^2);
for j = 1:var_num-1
fitvalue(1,i) = fitvalue(1,i) - (100 * (pop_con(j+1,i)-pop_con(j,i)^2)^2 + (pop_con(j,i)-1)^2);
end
end
case 6
pop_con=(pop-10000)./100;
for i=1:popsize
% fitvalue(1,i)=-((pop_con(1,i)+0.5)^2+(pop_con(2,i)+0.5)^2);
for j = 1:var_num
fitvalue(1,i) = fitvalue(1,i) - ((pop_con(j,i)+0.5)^2);
end
end
case 7 % worse
pop_con=(pop-12800)./10000; %pop数据准备 将区间由(0,,3096)划到(--1.048,2.048)
for i=1:popsize
% fitvalue(1,i)=-(pop_con(1,i)^4+rand+2*pop_con(2,i)^4+rand);
for j = 1:var_num
fitvalue(1,i) = fitvalue(1,i) - (j * pop_con(j,i)^4 + rand);
end
end
case 8
pop_con=(pop-50000)./100; %pop数据准备 将区间由(0,,3096)划到(--1.048,2.048)
for i=1:popsize
% fitvalue(1,i)=-(-pop_con(1,i)*sin(sqrt(abs(pop_con(1,i))))-pop_con(2,i)*sin(sqrt(abs(pop_con(2,i)))));
for j = 1:var_num
fitvalue(1,i)=fitvalue(1,i)-(-pop_con(j,i)*sin(sqrt(abs(pop_con(j,i)))));
end
end
case 9
pop_con=(pop-51200)./10000;
for i=1:popsize
% fitvalue(1,i)=-(pop_con(1,i)^2-10*cos(2*pi*pop_con(1,i))+10+pop_con(2,i)^2-10*cos(2*pi*pop_con(2,i))+10);
for j = 1:var_num
fitvalue(1,i) = fitvalue(1,i) - (pop_con(j,i)^2-10*cos(2*pi*pop_con(j,i))+10);
end
end
case 10
pop_con=(pop-32000)./1000;
for i=1:popsize
% fitvalue(1,i)=-(-20*exp(-0.2*sqrt(0.5*(pop_con(1,i)^2+pop_con(2,i)^2)))-exp(0.5*(cos(2*pi*pop_con(1,i))+cos(2*pi*pop_con(2,i))))+20+exp(1));
add_value = 0;
add_cos = 0;
for j = 1:var_num
add_value = add_value + (1/var_num) *pop_con(j,i)^2;
add_cos = add_cos + (1/var_num) * cos(2 * pi * pop_con(j,i));
end
fitvalue(1,i) = -(-20 * exp(-0.2 * sqrt(add_value)) - exp(add_cos) + 20 + exp(1));
end
case 11
pop_con=(pop-60000)./100;
for i=1:popsize
% fitvalue(1,i)=-(0.00025*(pop_con(1,i)^2+pop_con(2,i)^2)-cos(pop_con(1,i)/sqrt(1))*cos(pop_con(2,i)/sqrt(2))+1);
add_value = 0;
time = 1;
for j = 1:var_num
add_value = add_value + pop_con(j,i)^2;
time = time * cos(pop_con(j,i)/sqrt(j));
end
fitvalue(1,i) = -(0.00025 * add_value - time + 1);
end
case 12
pop_con=(pop-10000)./100;
for i=1:popsize
% fitvalue(1,i)=[0.5+[((sin(pop_con(1,i)))^2+(sin(pop_con(2,i)))^2)^0.5-0.5]/[1+0.001*(pop_con(1,i)^2+pop_con(2,i)^2)]^2];
add_value = 0;
for j = 1:var_num
add_value = add_value + sin(pop_con(j,i))^2;
end
fitvalue(1,i) = -(0.5 + ((add_value)^0.5 - 0.5)/(1 + 0.001 * add_value^2));
end
case 13
pop_con=(pop-10000)./100;
for i=1:popsize
% fitvalue(1,i)=[0.5+[sin((pop_con(1,i)^2+pop_con(2,i)^2)^0.5)-0.5]/[1+0.001*(pop_con(1,i)^2+pop_con(2,i)^2)]^2];
add_value = 0;
for j = 1:var_num
add_value = add_value + pop_con(j,i)^2;
end
fitvalue(1,i) = -(0.5 + (sin(add_value^0.5) - 0.5)/(1 + 0.001 * add_value^2));
end
otherwise
return;
% fitvalue(1,i)=87000000-(100*(pop_con(2,i)-pop_con(1,i)^2)^2+(pop_con(1,i)-1)^2);
% 1
% fitvalue(1,i)=0.5+sin(pop_con(1,i))^2/(2+sin(pop(1,i))^3);%2
% fitvalue(1,i)=(sin(2*pop_con(1,i))+cos(5*pop_con(1,i)))^3;%3 (Sin2x+cos5x)^3
%
% fitvalue(1,i)=((sin(3*pop_con(1,i)))^3+(cos(4*pop_con(1,i)))^3)^3; %4 (sin(3*x)^3+cos(4*x)^3)^3;
% fitvalue(1,i)=121-(abs(pop_con(1,i))+abs(pop_con(2,i))+abs(pop_con(1,i))*abs(pop_con(2,i)));
% fitvalue(1,i)=-(pop_con(1,i)^2+(pop_con(1,i)+pop_con(2,i))^2);
% fitvalue(1,i)=50000-(pop_con(1,i)^2+(pop_con(1,i)+pop_con(2,i))^2);
% fitvalue(1,i)=30-(pop_con(1,i)^4+rand+2*pop_con(2,i)^4+rand);
% fitvalue(1,i)=25-f(1,i);
% fitvalue(1,i)=120-(pop_con(1,i)^2-10*cos(2*pi*pop_con(1,i))+10+pop_con(2,i)^2-10*cos(2*pi*pop_con(2,i))+10);
% fitvalue(1,i)=1500+pop_con(1,i)*sin(sqrt(abs(pop_con(1,i))))+pop_con(2,i)*sin(sqrt(abs(pop_con(2,i))));
% fitvalue(1,i)=pop_con(1,i)*sin(sqrt(abs(pop_con(1,i))))+pop_con(2,i)*sin(sqrt(abs(pop_con(2,i))));
% fitvalue(1,i)=30-(-20*exp(-0.2*sqrt(0.5*(pop_con(1,i)^2+pop_con(2,i)^2)))-exp(0.5*(cos(2*pi*pop_con(1,i))+cos(2*pi*pop_con(2,i))))+20+exp(1));
% fitvalue(1,i)=200-(0.00025*(pop_con(1,i)^2+pop_con(2,i)^2)-cos(pop_con(1,i)/sqrt(1))*cos(pop_con(2,i)/sqrt(2))+1);
% fitvalue(1,i)=20000-(pop_con(1,i)^2+pop_con(2,i)^2);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -