• sugar97
    了解作者
  • matlab
    开发工具
  • 4KB
    文件大小
  • rar
    文件格式
  • 0
    收藏次数
  • 1 积分
    下载积分
  • 1
    下载次数
  • 2021-04-19 11:42
    上传日期
人工蜂群算法是模仿蜜蜂行为提出的一种优化方法,是集群智能思想的一个具体应用,它的主要特点是不需要了解问题的特殊信息,只需要对问题进行优劣的比较,通过各人工蜂个体的局部寻优行为,最终在群体中使全局最优值突现出来,有着较快的收敛速度。为了解决多变量函数优化问题,Karaboga提出了人工蜂群算法ABC模型。
ABC.rar
  • ABC
  • schwefel.m
    447B
  • rastrigin.m
    578B
  • Sphere.m
    73B
  • rosenbrock.m
    602B
  • runABC.m
    8.7KB
  • calculateFitness.m
    182B
  • griewank.m
    202B
  • ackley.m
    365B
内容介绍
%/* ABC algorithm coded using MATLAB language */ %/* Artificial Bee Colony (ABC) is one of the most recently defined algorithms by Dervis Karaboga in 2005, motivated by the intelligent behavior of honey bees. */ %/* Reference Papers*/ %/*D. Karaboga, AN IDEA BASED ON HONEY BEE SWARM FOR NUMERICAL OPTIMIZATION,TECHNICAL REPORT-TR06, Erciyes University, Engineering Faculty, Computer Engineering Department 2005.*/ %/*D. Karaboga, B. Basturk, A powerful and Efficient Algorithm for Numerical Function Optimization: Artificial Bee Colony (ABC) Algorithm, Journal of Global Optimization, Volume:39, Issue:3,pp:459-171, November 2007,ISSN:0925-5001 , doi: 10.1007/s10898-007-9149-x */ %/*D. Karaboga, B. Basturk, On The Performance Of Artificial Bee Colony (ABC) Algorithm, Applied Soft Computing,Volume 8, Issue 1, January 2008, Pages 687-697. */ %/*D. Karaboga, B. Akay, A Comparative Study of Artificial Bee Colony Algorithm, Applied Mathematics and Computation, 214, 108-132, 2009. */ %/*Copyright � 2009 Erciyes University, Intelligent Systems Research Group, The Dept. of Computer Engineering*/ %/*Contact: %Dervis Karaboga (karaboga@erciyes.edu.tr ) %Bahriye Basturk Akay (bahriye@erciyes.edu.tr) %*/ clear all close all clc %/* Control Parameters of ABC algorithm*/ NP=20; %/* The number of colony size (employed bees+onlooker bees)*/ FoodNumber=NP/2; %/*The number of food sources equals the half of the colony size*/ limit=100; %/*A food source which could not be improved through "limit" trials is abandoned by its employed bee*/ maxCycle=2500; %/*The number of cycles for foraging {a stopping criteria}*/ %/* Problem specific variables*/ objfun='Sphere'; %cost function to be optimized D=100; %/*The number of parameters of the problem to be optimized*/ ub=ones(1,D)*100; %/*lower bounds of the parameters. */ lb=ones(1,D)*(-100);%/*upper bound of the parameters.*/ runtime=1;%/*Algorithm can be run many times in order to see its robustness*/ %Foods [FoodNumber][D]; /*Foods is the population of food sources. Each row of Foods matrix is a vector holding D parameters to be optimized. The number of rows of Foods matrix equals to the FoodNumber*/ %ObjVal[FoodNumber]; /*f is a vector holding objective function values associated with food sources */ %Fitness[FoodNumber]; /*fitness is a vector holding fitness (quality) values associated with food sources*/ %trial[FoodNumber]; /*trial is a vector holding trial numbers through which solutions can not be improved*/ %prob[FoodNumber]; /*prob is a vector holding probabilities of food sources (solutions) to be chosen*/ %solution [D]; /*New solution (neighbour) produced by v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) j is a randomly chosen parameter and k is a randomly chosen solution different from i*/ %ObjValSol; /*Objective function value of new solution*/ %FitnessSol; /*Fitness value of new solution*/ %neighbour, param2change; /*param2change corresponds to j, neighbour corresponds to k in equation v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij})*/ %GlobalMin; /*Optimum solution obtained by ABC algorithm*/ %GlobalParams[D]; /*Parameters of the optimum solution*/ %GlobalMins[runtime]; /*GlobalMins holds the GlobalMin of each run in multiple runs*/ GlobalMins=zeros(1,runtime); for r=1:runtime % /*All food sources are initialized */ %/*Variables are initialized in the range [lb,ub]. If each parameter has different range, use arrays lb[j], ub[j] instead of lb and ub */ Range = repmat((ub-lb),[FoodNumber 1]); Lower = repmat(lb, [FoodNumber 1]); Foods = rand(FoodNumber,D) .* Range + Lower; ObjVal=feval(objfun,Foods); Fitness=calculateFitness(ObjVal); %reset trial counters trial=zeros(1,FoodNumber); %/*The best food source is memorized*/ BestInd=find(ObjVal==min(ObjVal)); BestInd=BestInd(end); GlobalMin=ObjVal(BestInd); GlobalParams=Foods(BestInd,:); iter=1; while ((iter <= maxCycle)), %%%%%%%%% EMPLOYED BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%% for i=1:(FoodNumber) %/*The parameter to be changed is determined randomly*/ Param2Change=fix(rand*D)+1; %/*A randomly chosen solution is used in producing a mutant solution of the solution i*/ neighbour=fix(rand*(FoodNumber))+1; %/*Randomly selected solution must be different from the solution i*/ while(neighbour==i) neighbour=fix(rand*(FoodNumber))+1; end; sol=Foods(i,:); % /*v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) */ sol(Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-Foods(neighbour,Param2Change))*(rand-0.5)*2; % /*if generated parameter value is out of boundaries, it is shifted onto the boundaries*/ ind=find(sol<lb); sol(ind)=lb(ind); ind=find(sol>ub); sol(ind)=ub(ind); %evaluate new solution ObjValSol=feval(objfun,sol); FitnessSol=calculateFitness(ObjValSol); % /*a greedy selection is applied between the current solution i and its mutant*/ if (FitnessSol>Fitness(i)) %/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/ Foods(i,:)=sol; Fitness(i)=FitnessSol; ObjVal(i)=ObjValSol; trial(i)=0; else trial(i)=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/ end; end; %%%%%%%%%%%%%%%%%%%%%%%% CalculateProbabilities %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %/* A food source is chosen with the probability which is proportioal to its quality*/ %/*Different schemes can be used to calculate the probability values*/ %/*For example prob(i)=fitness(i)/sum(fitness)*/ %/*or in a way used in the method below prob(i)=a*fitness(i)/max(fitness)+b*/ %/*probability values are calculated by using fitness values and normalized by dividing maximum fitness value*/ prob=(0.9.*Fitness./max(Fitness))+0.1; %%%%%%%%%%%%%%%%%%%%%%%% ONLOOKER BEE PHASE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% i=1; t=0; while(t<FoodNumber) if(rand<prob(i)) t=t+1; %/*The parameter to be changed is determined randomly*/ Param2Change=fix(rand*D)+1; %/*A randomly chosen solution is used in producing a mutant solution of the solution i*/ neighbour=fix(rand*(FoodNumber))+1; %/*Randomly selected solution must be different from the solution i*/ while(neighbour==i) neighbour=fix(rand*(FoodNumber))+1; end; sol=Foods(i,:); % /*v_{ij}=x_{ij}+\phi_{ij}*(x_{kj}-x_{ij}) */ sol(Param2Change)=Foods(i,Param2Change)+(Foods(i,Param2Change)-Foods(neighbour,Param2Change))*(rand-0.5)*2; % /*if generated parameter value is out of boundaries, it is shifted onto the boundaries*/ ind=find(sol<lb); sol(ind)=lb(ind); ind=find(sol>ub); sol(ind)=ub(ind); %evaluate new solution ObjValSol=feval(objfun,sol); FitnessSol=calculateFitness(ObjValSol); % /*a greedy selection is applied between the current solution i and its mutant*/ if (FitnessSol>Fitness(i)) %/*If the mutant solution is better than the current solution i, replace the solution with the mutant and reset the trial counter of solution i*/ Foods(i,:)=sol; Fitness(i)=FitnessSol; ObjVal(i)=ObjValSol; trial(i)=0; else trial(i)=trial(i)+1; %/*if the solution i can not be improved, increase its trial counter*/ end; end; i=i+1; if (i==(FoodNumber)+1) i=1; end; end; %/*T
评论
    相关推荐