getleader.m

来自「硕士论文三个点中的一个」· M 代码 · 共 29 行

M
29
字号
function [leaderInd] = getLeader(particle, gBestFun);
% particle: 要选指导元的粒子,只包含两个函数值
% gBest:    当前的全局最优解集,只包含两个函数值
% fInd:     函数值存储的位置
% 只适用于2个目标函数
s = size(gBestFun);
gBestSize = s(1, 1); % 全局最优解的个数
funNum = s(1, 2);    % 目标的个数

minInd = 1;         % 最近的全局最优个体在gBest中的位置,初始为第一个
minf1dij = abs(particle(1, 1) - gBestFun(minInd, 1));
minf2dij = abs(gBestFun(1, 2) - gBestFun(minInd, 2));
minDis = (minf1dij^2 + minf2dij^2)^0.5; % 最近的距离

for (gbInd = 2 : gBestSize)
	newf1dij = abs(particle(1, 1) - gBestFun(gbInd, 1));
	newf2dij = abs(gBestFun(1, 2) - gBestFun(gbInd, 2));
	newDis = (newf1dij^2 + newf2dij^2)^0.5; % 新的距离    
    
    if (newDis < minDis) ...
        || ( (newDis == minDis) && (newf1dij < minf1dij)) % 相同距离下取在同一垂直线上的。
        minInd = gbInd;
        minf1dij = newf1dij;
        minf2dij = newf2dij;
    end
end

leaderInd = minInd;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?