📄 genetic.m
字号:
function [xo,fo] = genetic(f,x0,l,u,Np,Nb,Pc,Pm,eta,kmax)%遗传算法主程序N=length(x0)if nargin < 10,kmax=100;endif nargin < 9|eta > 1|eta <=0,eta=1;endif nargin < 8,Pm=0.01;endif nargin < 7,Pc=0.5;endif nargin < 6,Nb=8*ones(1,N);endif nargin < 5,Np=10;endNNb=sum(Nb);xo=x0(:)';l=l(:)';u=u(:)';fo=feval(f,xo);x(1,:)=xo;for n=2:Np,x(n,:)=l+rand(size(x0)).*(u-l);endP=gen_encode(x,Nb,l,u);for k=1:kmax x=gen_decode(P,Nb,l,u); for n=1:Np,fx(n)=feval(f,x(n,:));end [fxb,nb]=min(fx) if fxb < fo,fo=fxb;xo=x(nb,:);end fx1=max(fxb)-fx; fxm=fx1(nb); if fxm<eps, return;end for n=1:Np x(n,:)=x(n,:)+eta*(fxm-fx1(n))/fxm*(x(nb,:)-x(n,:)); end P=gen_encode(x,Nb,l,u); is=shuffle([1:Np]); for n=1:2:Np-1 if rand < Pc P(is(n:n+1),:)=crossover(P(is(n:n+1),:),Nb); end end P=mutation(P,Nb,Pm);end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -