引入基于峰值的种群替换策略
D = obj.hub.D;
index = obj.SortWithContraint(obj.pop);
obj.pop = obj.pop(index);
xPeakNeighbor = [];
for i = 1:length(obj.pop)
xPeakNeighbor = [xPeakNeighbor;obj.pop(i).dec];
end
NeighborDistance = ones(1,D);
for i = 1:D
matdist = pdist2(xPeakNeighbor(:,i),xPeakNeighbor(:,i));
matdist(logical(eye(size(xPeakNeighbor,1)))) = inf;
minmatdist = min(matdist, [], 2);
NeighborDistance(i) = mean(minmatdist);
end
xPop = rand_indi(obj.algRand, 5, D, xPeakNeighbor(1,:)-NeighborDistance, xPeakNeighbor(1,:)+NeighborDistance);
xPop = boundary_check(xPop, obj.hub.lower, obj.hub.upper);
size(xPop)
PeakNeighborpop = obj.hub.GetIndis(xPop);
if ~isempty(PeakNeighborpop) && length(PeakNeighborpop)==5
endpop = obj.pop(end-4:end);
endindex = size(obj.pop)-4:size(obj.pop);
endindex = endindex';
selectPeakNeighbor = obj.CompareWithConstraint(endpop,PeakNeighborpop);
obj.pop(endindex(selectPeakNeighbor)) = PeakNeighborpop(selectPeakNeighbor);
end
自适应应用峰值策略:判断当前的前某几个个体均值是否发生了变化,如果发生了变化则执行策略,防止陷入局部最优的情况。