gusucode.com > 十大算法matlab程序说明 > 十大算法matlab程序说明/遗传算法/用MATLAB实现遗传算法程序/myga.m
function [f,x]=myga(num,bounds,N,CP,P) %[f,x]=ga(num,bounds,fun,N,CP,P) %[f,x]=myga([],bounds,[],[],[]) %该遗传算法适用于: % 目标函数为求最大值,且解非负整数解 %bounds 边界约束 %Myfun 为目标函数 %num 初始种群数 %N 最大迭代次数 %CP 交叉概率 %P 突变概率 %f 目标最优解 %x 最优解向量 % 作者:机自01-2班曾新海 % zxh21st@163.com m=nargin; if m<5 disp('-_- 错误!') disp('>> 输入变量太少') disp('>> 按回车键查看帮助') pause help ga f='-_- '; x='没有规矩不成方圆'; break; end if isempty(CP) CP=0.25; end if isempty(P) P=0.01; end if isempty(N) N=1000; end if any(bounds(:,1))<0 disp('-_- 错误!') disp('>> 按回车键查看帮助') pause help ga f='-_- '; x='没有规矩不成方圆'; break; end if isempty(num) num=100; end pop=INTinti(num,bounds); fmax=pop(:,end); endpop=pop; n=size(endpop,2); count=0;x=[];f=zeros(1,num); while(count<N) pop=mutation(endpop); [cpop ,len,v]=cross(pop,bounds,CP); [pops]=changes(cpop,bounds,len,P); for i=1:num sol=pops(i,:); [f(i)]=Myfun(sol); %惩罚策略 for jj=1:length(sol) if sol(jj)<bounds(jj,1) f(i)=-inf; end if sol(jj)>bounds(jj,2) f(i)=-inf; end end if fmax(i)<f(i) fmax(i)=f(i); endpop(i,1:end-1)=pops(i,:); end end endpop(:,end)=fmax(:); count=count+1; % [f,ii]=max(fmax); % x=endpop(ii,1:end-1); end [f,ii]=max(fmax); x=endpop(ii,1:end-1);