我正在试图用所谓的相关变异(自适应)实现进化策略算法,其中我认为正确的Matlab代码没有优化(球体基准函数)以及我预期的。
%% mutate sigma & alpha
for l = 1:lambda;
tmp = randn(n,n);
OffspringIndividual.sigma = Recombinant.sigma.*exp(tau_prime*randn + tau*(tmp + tmp'));
tmp = rand(n,n);
OffspringIndividual.alpha = Recombinant.alpha + beta*triu((tmp + tmp'),1);
%% Coordinate transformation with respect to axes 'i' and 'j' and angle
R = eye(n);
for m = 1:n-1
for q = m+1:n
T = eye(n);
T([m q], [m q]) = [ cos(OffspringIndividual.alpha(m,m)) -sin(OffspringIndividual.alpha(m,q))
sin(OffspringIndividual.alpha(q,m)) cos(OffspringIndividual.alpha(q,q)) ];
R = R*T;
end
end
% %% mutate object parameter
% OffspringIndividual.y = Recombinant.y + OffspringIndividual.sigma' .* randn(n,1);
OffspringIndividual.y = Recombinant.y + R*sqrt(diag(diag(OffspringIndividual.sigma)))*randn(n,1);
%% check boundaries
for check = 1:n
if OffspringIndividual.y(check) > ub
OffspringIndividual.y(check) = ub;
end
if OffspringIndividual.y(check) < lb
OffspringIndividual.y(check) = lb;
end
end
%% determine fitness
OffspringIndividual.F = fitness(OffspringIndividual.y);
%% offspring complete
OffspringPop{l} = OffspringIndividual;
end;
在选择了最好的后代个体之后,在我看来,尽管它减少了,但没有最大的改善功能。 我的突变有问题吗?