遗传算法中选择算子的问题clear all;close all;%ParametersSize=80; G=100; CodeL=10;umax=2.048;umin=-2.048;E=round(rand(Size,2*CodeL)); %Initial CodeGG1=zeros(1,G);%用来保存适应值;Y=zeros(2,G);%用来保存x值%Main Programfor k=1:1:
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/20 14:45:50
遗传算法中选择算子的问题clear all;close all;%ParametersSize=80; G=100; CodeL=10;umax=2.048;umin=-2.048;E=round(rand(Size,2*CodeL)); %Initial CodeGG1=zeros(1,G);%用来保存适应值;Y=zeros(2,G);%用来保存x值%Main Programfor k=1:1:
遗传算法中选择算子的问题
clear all;
close all;
%Parameters
Size=80;
G=100;
CodeL=10;
umax=2.048;
umin=-2.048;
E=round(rand(Size,2*CodeL)); %Initial Code
GG1=zeros(1,G);%用来保存适应值;
Y=zeros(2,G);%用来保存x值
%Main Program
for k=1:1:G
time(k)=k;
for s=1:1:Size
m=E(s,:);
y1=0;y2=0;
%Uncoding
m1=m(1:1:CodeL);
for i=1:1:CodeL
y1=y1+m1(i)*2^(i-1);
end
x1=(umax-umin)*y1/1023+umin;
Y(1,k)=x1;
m2=m(CodeL+1:1:2*CodeL);
for i=1:1:CodeL
y2=y2+m2(i)*2^(i-1);
end
x2=(umax-umin)*y2/1023+umin;
Y(2,k)=x2;
%F(s)=100*(x1^2-x2)^2+(1-x1)^2;%这个就是所对应的适应值函数
F(s)=10*sin(sqrt(x1.^2+x2.^2))./sqrt(1+x1.^2+x2.^2);
end
Ji=1./F;
%
fi_sum=sum(fi)
fi_Size=(Oderfi/fi_sum)*Size
fi_S=floor(fi_Size) %Selecting Bigger fi value
kk=1;
for i=1:1:Size
for j=1:1:fi_S(i) %Select and Reproduce
TempE(kk,:)=E(Indexfi(i),:);
kk=kk+1; %kk is used to reproduce
end
end
就是选择这里不懂,
遗传算法中选择算子的问题clear all;close all;%ParametersSize=80; G=100; CodeL=10;umax=2.048;umin=-2.048;E=round(rand(Size,2*CodeL)); %Initial CodeGG1=zeros(1,G);%用来保存适应值;Y=zeros(2,G);%用来保存x值%Main Programfor k=1:1:
首先介绍sort函数用法:
[B,I]=sort(A,.),I为返回的排序后元素在原数组中的行位置或列位置.B一般为排序后的数组.举例:
A = 3 4 2
1 5 3
4 7 1
[B,I]=sort(A)
B = 1 4 1
3 5 2
4 7 3
I = 2 1 3
1 2 1
3 3 2
[Oderfi,Indexfi]=sort(fi),因此这句话中的Oderfi保存了从小到大排列的结果,而Indexfi保存了Oderfi中对应原始数组(fi)的的原始位置.
fi_Size=(Oderfi/fi_sum)*Size 这句话挺难理解的,不过我运行了这个程序后,还是被我发现了
其中Oderf为 适应值 由小到大排列,fi_sum为适应值的总和,Size为总的个数,而fi_sum/size就是平均值,因此.fi_size中所存放的数据是Oderf中数值除以其平均值后的结果.其中必有大于1的,小于1的.我们这里的淘汰规则是淘汰掉 种群中小于平均值的数据,下边的代码是对这个规则的具体化
fi_S只包含0和1,其中0是小于平均值的个体,1是大于平均值的个体.
for j=1:1:fi_S(i) %Select and Reproduce
TempE(kk,:)=E(Indexfi(i),:);
kk=kk+1; %kk is used to reproduce
end
E中保存的是初始种群,我们每一代种群中都会有80个个体(每一行是一个个体,列数决定了个体范围和精度),当fi_S中某个个体(记为个体A)不是0的时候,就执行了TempE(kk,:)=E(Indexfi(i),:);
这句代码,Indexfi保存了个体A在E中的行数(也就是fi的列数),我们认定这一行(这个个体A)具有优良基因,因此保存在TempE中,进化到下一代.
好久没看遗传算法了,上边的有些术语是我自己编的,看懂就好
还有,你的程序不完全,你能把这个完整的遗传算法代码给我吗,我感觉这个程序写的很简洁,非常好.我的邮箱[email protected]
另外你用这个程序算做什么?一般智能算法解决解决问题具有随机性,因此很难对误差做出评价,这也是应用受到阻碍的主要原因,如果在解决具体问题的时候,还是优先考虑定量算法的.
希望我的回答对你有所帮助.