x1 = binary2decimal(newpop);
[y1] = cal_objvalue(newpop);
if mod(i,10)==0
figure;
fplot('(x-3).^2',[0 5]);
hold on;
title(['迭代次数为 n=' num2str(i)]);
plot(x1,y1,'*');
end
end
fprintf('the best X is --->>%5.2f\n',x2);
fprintf('the best Y is --->>%5.2f\n',bestfit);
function pop = initpop(popsize,chromlength)
pop = round(rand(popsize,chromlength));
function pop2 = binary2decimal(pop)
[px,py]=size(pop);
for i=1:py
pop1(:,i) = 2.^(py-i).*pop(:,i);
end
%sum(.,2)对行求和,得到列的向量
temp = sum(pop1,2);
pop2 = temp*5/1023;
function [objvalue]=cal_objvalue(pop)
x = binary2decimal(pop);
objvalue =(x-3).^2;
function [newpop] = selection(pop,fitvalue)
%构造轮盘
[px,py]=size(pop);
totalfit = sum(fitvalue);
p_fitvalue = fitvalue/totalfit;
p_fitvalue = cumsum(p_fitvalue);%概率求和排序
%-------
ms = sort(rand(px,1));
fitin = 1;
newin = 1;
while newin<=px
if (ms(newin))<p_fitvalue(fitin)
newpop(newin,=pop(fitin,;
newin=newin+1;
else fitin=fitin+1;
end
end;
function [newpop]=crossover(pop,pc)
[px,py]=size(pop);
newpop = ones(size(pop));
for i=1:2:px-1
if(rand<pc)
cpoint = round(rand*py);
newpop(i, = [pop(i,1:cpoint),pop(i+1,cpoint+1:py)];
newpop(i+1, = [pop(i+1,1:cpoint),pop(i,cpoint+1:py)];
else
newpop(i,=pop(i,;
newpop(i+1,=pop(i+1,;
end
end
function [newpop] = mutation(pop,pm)
[px,py] = size(pop);
newpop = ones(size(pop));
for i=1:px
if(rand<pm)
mpoint = round(rand*py);
if mpoint<=0
mpoint=1;
end
newpop(i, = pop(i,;
if newpop(i,mpoint)==0
newpop(i,mpoint)=1;
else newpop(i,mpoint)=0;
end
else
newpop(i,=pop(i,;
end
end
function [bestindividual,bestfit]=best(pop,fitvalue)
[px,py]=size(pop);
bestindividual = pop(1,;
bestfit = fitvalue(1);
for i=2:px
if fitvalue(i)<bestfit
bestindividual = pop(i,;
bestfit = fitvalue(i);
end
end