• 大小: 328KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-12
  • 语言: Matlab
  • 标签: matlab  ACOR  

资源简介

将变量为离散型的蚁群算法扩展到连续型变量,根据Socha, Krzysztof 和Dorigo, Marco在2008年发表的文章Ant colony optimization for continuous domains制作,内附原文及代码。

资源截图

代码片段和文件信息

clc;
clear;
close all;

%% Problem Definition

CostFunction=@(x) Sphere(x);        % Cost Function

nVar=10;             % Number of Decision Variables

VarSize=[1 nVar];   % Variables Matrix Size

VarMin=-10;         % Decision Variables Lower Bound
VarMax= 10;         % Decision Variables Upper Bound

%% ACOR Parameters

MaxIt=1000;          % Maximum Number of Iterations

nPop=10;            % Population Size (Archive Size)

nSample=40;         % Sample Size

q=0.5;              % Intensification Factor (Selection Pressure)

zeta=1;             % Deviation-Distance Ratio

%% Initialization

% Create Empty Individual Structure
empty_individual.Position=[];
empty_individual.Cost=[];

% Create Population Matrix
pop=repmat(empty_individualnPop1);

% Initialize Population Members
for i=1:nPop
    
    % Create Random Solution
    pop(i).Position=unifrnd(VarMinVarMaxVarSize);
    
    % Evaluation
    pop(i).Cost=CostFunction(pop(i).Position);
    
end

% Sort Population
[~ SortOrder]=sort([pop.Cost]);
pop=pop(SortOrder);

% Update Best Solution Ever Found
BestSol=pop(1);

% Array to Hold Best Cost Values
BestCost=zeros(MaxIt1);

% Solution Weights
w=1/(sqrt(2*pi)*q*nPop)*exp(-0.5*(((1:nPop)-1)/(q*nPop)).^2);

% Selection Probabilities
p=w/sum(w);


%% ACOR Main Loop

for it=1:MaxIt
    
    % Means
    s=zeros(nPopnVar);
    for l=1:nPop
        s(l:)=pop(l).Position;
    end
    
    % Standard Deviations
    sigma=zeros(nPopnVar);
    for l=1:nPop
        D=0;
        for r=1:nPop
            D=D+abs(s(l:)-s(r:));
        end
        sigma(l:)=zeta*D/(nPop-1);
    end
    
    % Create New Population Array
    newpop=repmat(empty_individualnSample1);
    for t=1:nSample
        
        % Initialize Position Matrix
        newpop(t).Position=zeros(VarSize);
        
        % Solution Construction
        for i=1:nVar
            
            % Select Gaussian Kernel
            l=RouletteWheelSelection(p);
            
            % Generate Gaussian Random Variable
            newpop(t).Position(i)=s(li)+sigma(li)*randn;
            
        end
        
        % Evaluation
        newpop(t).Cost=CostFunction(newpop(t).Position);
        
    end
    
    % Merge Main Population (Archive) and New Population (Samples)
    pop=[pop
         newpop]; %#ok
     
    % Sort Population
    [~ SortOrder]=sort([pop.Cost]);
    pop=pop(SortOrder);
    
    % Delete Extra Members
    pop=pop(1:nPop);
    
    % Update Best Solution Ever Found
    BestSol=pop(1);
    
    % Store Best Cost
    BestCost(it)=BestSol.Cost;
    
    % Show Iteration Information
    disp([‘Iteration ‘ num2str(it) ‘: Best Cost = ‘ num2str(BestCost(it))]);
    
end

%% Results

figure;
%plot(BestCost‘LineWidth‘2);
semilogy(BestCost‘LineWidth‘2);
xlabel(‘Iteration‘);
ylabel(‘Best Cost‘);
grid on;

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件        105  2019-02-02 04:23  RouletteWheelSelection.m

     文件     396529  2018-11-21 17:37  Socha-Ant colony optimization for continuous d.pdf

     文件         51  2015-07-15 18:50  Sphere.m

     文件       2973  2019-01-30 22:25  acor.m

     文件          7  2019-02-02 04:23  main.m

----------- ---------  ---------- -----  ----

               399665                    5


评论

共有 条评论