unitesimilarempires.m

来自「Colonial Competitive Algorithm」· M 代码 · 共 38 行

M
38
字号
function Empires=UniteSimilarEmpires(Empires,AlgorithmParams,ProblemParams)
    
    TheresholdDistance = AlgorithmParams.UnitingThreshold * norm(ProblemParams.SearchSpaceSize);
    NumOfEmpires = numel(Empires);

    for ii = 1:NumOfEmpires-1
        for jj = ii+1:NumOfEmpires
            DistanceVector = Empires(ii).ImperialistPosition - Empires(jj).ImperialistPosition;
            Distance = norm(DistanceVector);
            if Distance<=TheresholdDistance
                if Empires(ii).ImperialistCost < Empires(jj).ImperialistCost
                    BetterEmpireInd=ii;
                    WorseEmpireInd=jj;
                else
                    BetterEmpireInd=jj;
                    WorseEmpireInd=ii;
                end
                
                Empires(BetterEmpireInd).ColoniesPosition = [Empires(BetterEmpireInd).ColoniesPosition
                                                             Empires(WorseEmpireInd).ImperialistPosition
                                                             Empires(WorseEmpireInd).ColoniesPosition];
                
                Empires(BetterEmpireInd).ColoniesCost = [Empires(BetterEmpireInd).ColoniesCost
                                                         Empires(WorseEmpireInd).ImperialistCost
                                                         Empires(WorseEmpireInd).ColoniesCost];
                
                % Update TotalCost for new United Empire                                     
                Empires(BetterEmpireInd).TotalCost = Empires(BetterEmpireInd).ImperialistCost + AlgorithmParams.Zeta * mean(Empires(BetterEmpireInd).ColoniesCost);
                                     
                Empires = Empires([1:WorseEmpireInd-1 WorseEmpireInd+1:end]);
                return;
            end
            
        end
    end
    
end

⌨️ 快捷键说明

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