【正文】
%產(chǎn)生初始種群 fitfit=[]。 fittimer=[]。 best_f1=[]。 best_x1=[]。 for i=1:M my_f=cal_my_f(new_scale)。 %計(jì)算函數(shù)值 my_fit=cal_my_fit(my_f)。 %計(jì)算適應(yīng)度值 next_scale=my_sellect(new_scale,my_fit)。 %采用賭輪盤(pán)法選擇 cross_scale=my_cross(next_scale,pc)。 %按概率交叉 mut_scale=my_mutat(cross_scale,pm)。 %按概率變異 %尋找每一代中的最優(yōu)適應(yīng)度值所對(duì)應(yīng)的個(gè)體 best_fit=my_fit(1)。 [sx,sy]=size(new_scale)。 for j=2:length(my_fit) if best_fitmy_fit(j) best_fit=my_fit(j)。 best_f=my_f(j)。 best_x=my2to10(new_scale(j,:))。 best_x=2+best_x.*4./(2^sy1)。 end end new_scale=mut_scale。 fitfit=[fitfit,best_fit]。 best_f1=[best_f1,best_f]。 best_x1=[best_x1,best_x]。 fittimer=[fittimer,i]。 end [best_fit,loca]=max(fitfit)。 best_f=best_f1(loca)。 best_x=best_x1(loca)。 disp(39。[best_fit,best_f,best_x]=39。) disp([best_fit,best_f,best_x]) subplot(2,2,1) plot(fittimer,fitfit) xlabel(39。迭代次數(shù) (1)wxb39。)。 ylabel(39。適應(yīng)度函數(shù) 39。) grid on %子函數(shù):產(chǎn)生初始種群 function initscale=produscale(my_scale,gen_len) initscale=round(rand(my_scale,gen_len))。 end %子函數(shù):計(jì)算函數(shù)值 function my_f=cal_my_f(new_scale) mychange=my2to10(new_scale)。 [sx,sy]=size(new_scale)。 change_x=1+mychange.*3./(2^sy1)。 my_f=change_x*sin(10π *change_x)+2。 end %子函數(shù):計(jì)算適應(yīng)度值 function my_fit=cal_my_fit(my_f) f_min=5。 for i=1:length(my_f) if my_f(i)+f_min=0 my_fit(i)=0。 else my_fit(i)=my_f(i)+f_min。 end end my_fit=my_fit39。 end %子函數(shù):采用賭輪盤(pán)法 選擇 function next_scale=my_sellect(new_scale,my_fit) sum_of_f=sum(my_fit)。 accum=my_fit/sum_of_f。 accum=cumsum(accum)。 [sx,sy]=size(new_scale)。 j=1。 while j=sx a=rand。 for i=1:sx1 if accum(1)=a next_scale(j,:)=new_scale(1,:)。 else if accum(i)aamp。amp。accum(i+1)=a next_scale(j,:)=new_scale(i+1,:)。 j=j+1。 end end end end end %子函數(shù):按概率交叉 function cross_scale=my_cross(new_scale,pc) [sx,sy]=size(new_scale)。 cross_scale=new_scale。 for i=1:2:sx1 if randpc a=round(rand*sy)。 cross_scale(i,:)=[new_scale(i,1:a),new_scale(i+1,a+1:end)]。 cross_scale(i+1,:)=[new_scale(i+1,1:a),new_scale(i,a+1:end)]。 end end %子函數(shù):按概率變異 function mut_scale=my_mutat(new_scale,pm) [sx,sy]=size(new_scale)。 mut_scale=new_scale。 for i=1:sx