function [xo,fo] = genetic(f,x0,l,u,Np,Nb,Pc,Pm,eta,kmax) % 基因算法求f(x)最小值 s.t. l <= x <= u %f为待求函数,x0初值,l,u上下限,Np群体大小,Nb每一个变量的基因值(二进制数) %Pc交叉概率,Pm变异概率,eta学习率,kmax最大迭代次数
kmax = 100; %最大迭代次数缺省为100
if nargin < 9|eta > 1|eta <= 0
eta = 1;
%学习率eta,(0 < eta < 1)
Nb = 8*ones(1,N);%每一变量的基因值(二进制数)
xo = x0(:)'; l = l(:)'; u = u(:)';
X(n,:) = l + rand(size(x0)).*(u - l); %初始群体随机数组
P = gen_encode(X,Nb,l,u);
%编码为2进制字串
X = gen_decode(P,Nb,l,u);
%解码为10进制数
[fxb,nb] = min(fX);
%选择最适合的,函数值最小的
fX1 = max(fxb) - fX; %将函数值转化为非负的适合度值
if fXm < eps
%如果所有的染色体值相同,终止程序
X(n,:) = X(n,:) + eta*(fXm - fX1(n))/fXm*(X(nb,:) - X(n,:));%复制准则
P = gen_encode(X,Nb,l,u); %对下一代染色体编码
P(is(n:n + 1),:) = crossover(P(is(n:n + 1),:),Nb);
|