遗传算法matlab源程序
时间:2026-01-21
时间:2026-01-21
遗传算法matlab源程序外加习题。
问题:求f(x) |x|^(1/2)*sin(4 x)在[-2,2]之间的最小值。 Pc=0.7 Pm=0.3 L=20.
原始程序:
function
[Bestvalue,Bestmember]=Genetic(gen,min,max,fitnessfunction,crossrate,mutationrate,membernumber,memberlength) gen=input('Please input the value of gen:');
min=input('Please input the value of min:');
max=input('Please input the value of max:');
crossrate=input('Please input the value of crossrate:');
mutationrate=input('Please input the value of mutationrate:'); membernumber=input('Please
membernumber:');
memberlength=input('Please input the value of memberlength:'); population=populationinitialize1(membernumber,memberlength);
mmm=population;
global count;
count=1;
populationcode=population;
%populationdata=populationdata1(populationcode,min,max); populationdata=zeros(size(populationcode,1),1); input the value of
遗传算法matlab源程序外加习题。
for i=1:size(populationcode,1)
for j=1:size(populationcode,2)
populationdata(i)=populationdata(i)+populationcode(i,j).*(2.^(size(populationcode,2)-j));
end
populationdata(i)=min+populationdata(i).*(max-min)./(2.^(size(populationcode,2))-1);
l=0;
end
fitness=fitness1(populationdata);
while count<gen
fitnessp=fitnessp1(fitness,population);
newpopulation=select(population,fitnessp);
population=newpopulation;
newpopulation=crossing(population,crossrate);
population=newpopulation;
newpopulation=mutation(population,mutationrate); population=newpopulation;
%populationdata=populationdata1(population,min,max); populationdata=zeros(size(population,1),1);
遗传算法matlab源程序外加习题。
for i=1:size(population,1)
for j=1:size(population,2)
populationdata(i)=populationdata(i)+population(i,j).*(2.^(size(population,2)-j));
end
populationdata(i)=min+populationdata(i).*(max-min)./(2.^(size(population,2))-1);
l=0;
end
fitness=fitness1(populationdata);
[fitness,B]=sort(fitness);%根据实际问题调整排序方式 Bestvalue=log(fitness(1));
Bestmember=populationdata(B(1));
for i=1:membernumber
fitness(i)=fitness(i);
end
count=count+1;
end
disp(fitness);
function newpopulation=select(population,fitnessp)
遗传算法matlab源程序外加习题。
rate(1)=fitnessp(1);
for i=2:size(population,1)
rate(i)=rate(i-1)+fitnessp(i);
end
for i=1:(size(population,1)+1)
r=rand(1);
o=1;
while r>rate(o)
o=o+1;
end
newpopulation(i,:)=population(o,:);
end
function
populationdata=populationdata1(populationcode,min,max) populatondata=zeros(size(populationcode,1),1); for i=1:size(populationcode,1)
for j=1:size(populationcode,2)
populationdata(i)=populationdata(i)+populationcode(i,j).*(2.^(size(populationcode,2)-j));
end
遗传算法matlab源程序外加习题。
populationdata(i)=min+populationdata(i).*(max-min)./(2.^(size(populationcode,2))-1);
l=0;
end
function fitnessp=fitnessp1(fitness,population)
a=sum(fitness);
for i=1:size(population,1)
fitnessp(i)=fitness(i)/a;
end
function fitness=fitness1(populationdata)
a=size(populationdata);
for i=1:a(1)
fitness(i)=fitnessfunction(populationdata(i));
end
disp(fitness)
function y=fitnessfunction(x)
h=x^(0.5).*sin(4*pi*x);% 可以根据需要修改适应函数 y=exp(h);
end
遗传算法matlab源程序外加习题。
function newpopulation=mutation(population,mutationrate) a=size(population);
for i=1:a(1)
cc=randperm(a(2));
b=cc(1);
c=rand(1);
if c<mutationrate
population(i,b)=1-population(i,b);
end
end
newpopulation=population;
运行结果:
Genetic
Please input the value of gen:50
Please input the value of min:-2
Please input the value of max:2
Please input the value of crossrate:0.7
Please input the value of mutationrate:0.3
Please input the value of membernumber:5
Please input the value of memberlength:20
ans =
遗传算法matlab源程序外加习题。
-0.9034
改变遗传代数:
Genetic
Please input the value of gen:80
Please input the value of min:-2
Please input the value of max:2
Please input the value of crossrate:0.7
Please input the value of mutationrate:0.3
Please input the value of membernumber:5
Please input the value of memberlength:20
ans =
-1.3617
我们又用matlab中的min函数求了这个表达式的确切值,-1.3109.
这说明我们的程序还有一定的问题,需要进一步的提高。希望程老师能多加指点,谢谢!
…… 此处隐藏:1865字,全部文档内容请下载后查看。喜欢就下载吧 ……
上一篇:数字对讲机 DMR数字协议初探