您当前的位置: 首页 >  ar

Better Bench

暂无认证

  • 6浏览

    0关注

    695博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

人工蜂群算法(Artificial Bee Colony, ABC)MATALAB代码详细解析

Better Bench 发布时间:2020-07-10 15:34:57 ,浏览量:6

目录
    • 一、人工蜂群算法理论
    • 二、算法流程图
    • 二、代码讲解
      • 1、 ABC.m文件
      • 2、Sephere.m文件
      • 3、RouletteWheelSelection.m文件
    • 二、源码下载

该代码是Matlab官网的代码,非常适合学习模拟退火算法的原理和实现。

一、人工蜂群算法理论

模拟退火算法(SA)、遗传算法(GA)、布谷鸟算法(CS)、人工蜂群算法(ABC)学习笔记—附MATLAB注释代码

二、算法流程图

在这里插入图片描述

二、代码讲解 1、 ABC.m文件
% Copyright (c) 2015, Yarpiz (www.yarpiz.com)
% All rights reserved. Please read the "license.txt" for license terms.
%
% Project Code: YPEA114
% Project Title: Implementation of Artificial Bee Colony in MATLAB
% Publisher: Yarpiz (www.yarpiz.com)
% 
% Developer: S. Mostapha Kalami Heris (Member of Yarpiz Team)
% 
% Contact Info: sm.kalami@gmail.com, info@yarpiz.com
%

clc;
clear;
close all;

%% Problem Definition

CostFunction=@(x) Sphere(x);        % Cost Function函数句柄,未知数是x,相当于建立了一个函数文件,类似在C语言中的函数定义。该方法在Sphere.m中定义

nVar=5;             % Number of Decision Variables问题的维度

VarSize=[1 nVar];   % Decision Variables Matrix Size定义一个问题维度大小的矩阵

VarMin=-10;         % Decision Variables Lower Bound函数的下限
VarMax= 10;         % Decision Variables Upper Bound上限

%% ABC Settings

MaxIt=1000;              % Maximum Number of Iterations迭代次数上限

nPop=100;               % Population Size (Colony Size)初始雇佣蜂数量

nOnlooker=nPop;         % Number of Onlooker Bees初始观察蜂数量

L=round(0.6*nVar*nPop); % Abandonment Limit Parameter (Trial Limit)  round():四舍五入取整,表示蜜源试验次数上限,如果达到此上限,舍弃该蜜源,侦查蜂来做的这一步
a=1;                    % Acceleration Coefficient Upper Bound蜜源变换的加速系数的最大值

%% Initialization

% Empty Bee Structure
empty_bee.Position=[];%%蜜源
empty_bee.Cost=[];%%蜜源适应度

% Initialize Population Array
pop=repmat(empty_bee,nPop,1);%把矩阵empty_bee作为pop的nPop×1矩阵的元素(矩阵中的矩阵),表示有100个雇佣蜂干活

% Initialize Best Solution Ever Found因为是求函数的最小值,所以预定义最坏适应度是无穷大
BestSol.Cost=inf;

% Create Initial Population在定义域范围内,随机初始化蜜源位置
for i=1:nPop
    pop(i).Position=unifrnd(VarMin,VarMax,VarSize);%%unifrnd(-10,10,[1 5]):表示产生均匀分布的随机数,产生一个1*5的随机数矩阵,其值在-10到10之间均匀分布
    pop(i).Cost=CostFunction(pop(i).Position);
    if pop(i).Cost            
关注
打赏
1665674626
查看更多评论
0.0390s