遗传算法matlab源程序

时间: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字,全部文档内容请下载后查看。喜欢就下载吧 ……
遗传算法matlab源程序.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219