1qaz 发表于 2020-12-22 19:55:37

多目标鱼群算法--追尾行为解析

function = FSA_scatter( Xi, Yi, pop,pro, popminmax, sizepop, visual, step, try_number, delta, BestPop)
% 追尾行为
popmin = popminmax(1);popmax = popminmax(2);
V = length(Xi);M = length(Yi);   %%返回向量长度
for k=1:sizepop   %%sizeopp种群数
    d(k) = norm( Xi-pop(k,1:V),2);%%二范数计算,计算当前位置到其他种群位置的距离。
end
= find( d>0 & d<visual );%%a没用,可用~忽略;主要计算b的值
if(~isempty(b))                %%判断~isempty(b),b为空数组,输出为0,执行觅食行为;否则输出逻辑1,转到下一条指令。
    Xc = zeros( size(pop(1,1:V)) );%%赋值为0数组
    for k=1:length(b)            %%返回向量长度,%%%既符合要求的个体(猜)
      XcQ(k,:) = pop(b(k),1:V);   %%对应x值
      YcQ(k,:) = evaluate_objective( XcQ(k,:),pro);   %%得到符合条件个体的Y值
    end
   
    %找到所有支配解
    Cnew = ;V = size(XcQ,2);M = size(YcQ,2);   
    = JudgePopDominationQs(Cnew,M,V);            
    XcQ=Cnew(:,1:V);YcQ=Cnew(:,V+1:end);               %%肉眼可见。。
   
    %计算拥挤度 并将拥挤度最大的作为最优的
    Dis = FishDis(,M,V);%%可以看到Xi,Yi在最后一行,对应序号为end
    [~,ind]=max(Dis(1:end-1));            %%   ind对应的序号为拥挤度最大的,对应判断语句
    Xmax = XcQ(ind,:);                     %%赋值
    %%Xmax = (Xmax-Xi+BestPop(1:V)-Xi)+Xi;   %%%新点的一种求取方法,看个人喜好增减或改变
    Ymax = evaluate_objective(Xmax,pro);   %%求y值
   
   
    %if Domination2(Ymax,Yi) && Dis(ind)>Dis(end)%%追尾行为的判断条件
   if Domination2(Ymax,Yi) && Dis(ind)>Dis(end) && Dis(ind)<delta%%看行23,24
    Xt = Xi + ( Xmax - Xi )./norm(Xmax-Xi,2) .* step .*rand(1);
      Xt=PopWs(Xt,pro);
      Yt = evaluate_objective(Xt,pro);   % 适应度值   %%新点求值过程
    else
      % 觅食行为
       = FSA_find( Xi, Yi, pro, popminmax, visual, step, try_number,BestPop(1:V));
    end
else
    % 觅食行为
    = FSA_find( Xi, Yi, pro, popminmax, visual, step, try_number ,BestPop(1:V));
end

%%%%%%%%以上为个人理解,有错万望指出,一起学习,进步%%%%%%%%%%%

NSGA3 发表于 2020-12-23 19:57:00

感谢楼主,写的这么详细,棒棒的。
:)
页: [1]
查看完整版本: 多目标鱼群算法--追尾行为解析