ga算法是模拟生物进化过程中,适者生存,优胜劣汰规则的一种算法,ga算子有选择,交叉,变异,个体对环境的适应度用适应度函数来衡量,每个个体对应一个适应度值,选择算子淘汰劣质个体,交叉和变异产生新个体,个体组成的种群不断进化,直到产生最优个体。
与普通智能算法不同的是ga算法从多个解开始搜索,对多个值同时进行评估,很少会陷入局部最优解,普通智能算法的缺点就是容易陷入局部最优解,例如粒子群算法,每次都只迭代更新一个个体,一旦陷入局部最小值,很难跳出
下面是matlab实现的ga算法
function testga()size=20;chromelen=8;lr=0.8;mr=0.1;pop=init(size,chromelen);pop2=binary2int(pop);gim=ones(500,8);for i=1:50 fitvalue=calfitvalue(pop); newpop=selection(pop,fitvalue); renewpop=crossover(newpop,lr); uppop=mutation(renewpop,mr); [bestindividual,bestfit]=best(uppop,fitvalue); gim(i,:)=bestindividual; y(i)=bestfit; pop=uppop;endymax=find(y==max(y));ymax=max(ymax);tt=gim(ymax,:);xmax=binary2int(tt)*2*pi/1023;plot(xmax,ymax,'r*');hold on;fplot('11*sin(6*x)+7*cos(5*x)',[-pi,pi]);endfunction pop=init(size,chromelen)pop=round(rand(size,chromelen));endfunction pop2=binary2int(pop)[px,py]=size(pop);for i=1:py pop1(:,i)=2.^(py-i).*pop(:,i);endpop2=sum(pop1,2);endfunction fitvalue=calfitvalue(pop)temp=binary2int(pop);x=temp*2*pi/1023;fitvalue=11*sin(6*x)+7*cos(5*x);endfunction newpop=selection(pop,fitvalue)sumfit=sum(fitvalue);profit=fitvalue/sumfit;cumpro=cumsum(profit);[px,py]=size(pop);randval=sort(rand(px,1));newin=1;fitin=1;while newin<=px if randval(newin)