人工蜂群(ABC)算法的群体智能优化问题方法(Python完整实现)

这些算法已被证明在解决实际问题方面非常有效。一些可以使用SI算法解决的任务是聚类,行星映射,控制纳米机器人和数据挖掘中的各种问题,如特征选择和分类。

在数学上讲,要使用计算智能算法解决现实世界中的优化问题,我们需要一个数学表示我们的问题,这种表示称为目标函数,它是描述问题和所有决策变量的数学规则。

简而言之,优化问题由搜索空间定义,搜索空间是我们将寻找解决方案的区域,一组决策变量,其中包含影响我们问题的所有参数,当然还有目标函数,其中的数学规则这个问题也给了我们一个候选解决方案的良好测量。

优化问题的目标是从所有可行的解决方案中找到最佳解决方案。这通常意味着我们想要最小化或最大化目标函数。换句话说,我们希望找到最小化我们的目标函数值(也称为适应值)的输入决策变量集合。

人工蜜蜂群体(ABC)算法是一种模拟蜜蜂群体行为的优化算法,并于2005年首次提出由Karaboga提出进行实参优化。

来自蜜蜂的新兴智能行为可以概括为几个步骤:

尽管我们描述了三种类型的蜜蜂,但在实施层面,我们意识到只有两种类型,即员工和旁观者。侦察蜂实际上是一种可以由员工和旁观者蜜蜂执行的探索行为。

在本文中,我们将使用Python,因为它在数值计算中越来越显示出高效性,并且更容易实现一组客观基准以重用我们的群智能算法。

importnumpyasnp

fromscipyimportoptimize

fromdeap.benchmarksimportschwefel

fromabcimportABCMeta

fromabcimportabstractmethod

fromsiximportadd_metaclass

@add_metaclass(ABCMeta)

classObjectiveFunction(object):

def__init__(self,name,dim,minf,maxf):

self.name=name

self.dim=dim

self.minf=minf

self.maxf=maxf

defsample(self):

returnnp.random.uniform(low=self.minf,high=self.maxf,size=self.dim)

defcustom_sample(self):

returnnp.repeat(self.minf,repeats=self.dim)\

+np.random.uniform(low=0,high=1,size=self.dim)*\

np.repeat(self.maxf-self.minf,repeats=self.dim)

@abstractmethod

defevaluate(self,x):

pass

classSphere(ObjectiveFunction):

def__init__(self,dim):

super(Sphere,self).__init__('Sphere',dim,-100.0,100.0)

returnsum(np.power(x,2))

classRosenbrock(ObjectiveFunction):

super(Rosenbrock,self).__init__('Rosenbrock',dim,-30.0,30.0)

returnoptimize.rosen(x)

classRastrigin(ObjectiveFunction):

super(Rastrigin,self).__init__('Rastrigin',dim,-5.12,5.12)

return10*len(x)\

+np.sum(np.power(x,2)-10*np.cos(2*np.pi*np.array(x)))

classSchwefel(ObjectiveFunction):

super(Schwefel,self).__init__('Schwefel',dim,-500.0,500.0)

returnschwefel(x)[0]

考虑到这一点,我们可以在python中实现类ArtificialBee,如下所示:

fromcopyimportdeepcopy

classArtificialBee(object):

TRIAL_INITIAL_DEFAULT_VALUE=0

INITIAL_DEFAULT_PROBABILITY=0.0

def__init__(self,obj_function):

self.pos=obj_function.custom_sample()

self.obj_function=obj_function

self.minf=obj_function.minf

self.maxf=obj_function.maxf

self.fitness=obj_function.evaluate(self.pos)

self.trial=ArtificialBee.TRIAL_INITIAL_DEFAULT_VALUE

self.prob=ArtificialBee.INITIAL_DEFAULT_PROBABILITY

defevaluate_boundaries(self,pos):

if(posself.maxf).any():

pos[pos>self.maxf]=self.maxf

pos[pos

returnpos

defupdate_bee(self,pos,fitness):

iffitness<=>

self.pos=pos

self.fitness=fitness

self.trial=0

else:

self.trial+=1

defreset_bee(self,max_trials):

ifself.trial>=max_trials:

self.__reset_bee()

def__reset_bee(self):

self.pos=self.obj_function.custom_sample()

self.fitness=self.obj_function.evaluate(self.pos)

该EmployeeBee类可以实现如下:

classEmployeeBee(ArtificialBee):

defexplore(self,max_trials):

ifself.trial<=>

component=np.random.choice(self.pos)

phi=np.random.uniform(low=-1,high=1,size=len(self.pos))

n_pos=self.pos+(self.pos-component)*phi

n_pos=self.evaluate_boundaries(n_pos)

n_fitness=self.obj_function.evaluate(n_pos)

self.update_bee(n_pos,n_fitness)

defget_fitness(self):

return1/(1+self.fitness)ifself.fitness>=0else1+np.abs(self.fitness)

defcompute_prob(self,max_fitness):

self.prob=self.get_fitness()/max_fitness

旁观者蜜蜂将巡视员工蜜蜂的工作。会飞过蜂房,检查他们工作的进展情况,并评估哪些员工在收集食物方面更加成功。

旁观者的蜜蜂总是以最优秀的员工为目标,采用概率方法作为“交汇点”,其他蜜蜂应该来到这个成功的位置,希望能提取更多的食物。

该OnlookerBee类可以实现如下:

classOnLookerBee(ArtificialBee):

defonlook(self,best_food_sources,max_trials):

candidate=np.random.choice(best_food_sources)

self.__exploit(candidate.pos,candidate.fitness,max_trials)

def__exploit(self,candidate,fitness,max_trials):

component=np.random.choice(candidate)

phi=np.random.uniform(low=-1,high=1,size=len(candidate))

n_pos=candidate+(candidate-component)*phi

ifn_fitness<=>

self.pos=n_pos

self.fitness=n_fitness

注意我们已经在分离的方法中实现了我们算法的每一步。首先我们重置我们的ABC算法的内部参数,并将我们的员工蜜蜂和旁观者蜜蜂初始化为随机位置。一个在现实世界问题中取得成功的默认策略是将整个蜂房的一半初始化为员工蜜蜂,而将另一半初始化为旁观者蜜蜂。

完整的ABC算法可以实现如下:

classABC(object):

def__init__(self,obj_function,colony_size=30,n_iter=5000,max_trials=100):

self.colony_size=colony_size

self.n_iter=n_iter

self.max_trials=max_trials

self.optimal_solution=None

self.optimality_tracking=[]

def__reset_algorithm(self):

def__update_optimality_tracking(self):

self.optimality_tracking.append(self.optimal_solution.fitness)

def__update_optimal_solution(self):

n_optimal_solution=\

min(self.onlokeer_bees+self.employee_bees,

key=lambdabee:bee.fitness)

ifnotself.optimal_solution:

self.optimal_solution=deepcopy(n_optimal_solution)

ifn_optimal_solution.fitness<>

def__initialize_employees(self):

self.employee_bees=[]

foritrinrange(self.colony_size//2):

self.employee_bees.append(EmployeeBee(self.obj_function))

def__initialize_onlookers(self):

self.onlokeer_bees=[]

self.onlokeer_bees.append(OnLookerBee(self.obj_function))

def__employee_bees_phase(self):

map(lambdabee:bee.explore(self.max_trials),self.employee_bees)

def__calculate_probabilities(self):

sum_fitness=sum(map(lambdabee:bee.get_fitness(),self.employee_bees))

map(lambdabee:bee.compute_prob(sum_fitness),self.employee_bees)

def__select_best_food_sources(self):

self.best_food_sources=\

filter(lambdabee:bee.prob>np.random.uniform(low=0,high=1),

self.employee_bees)

whilenotself.best_food_sources:

def__onlooker_bees_phase(self):

map(lambdabee:bee.onlook(self.best_food_sources,self.max_trials),

self.onlokeer_bees)

def__scout_bees_phase(self):

map(lambdabee:bee.reset_bee(self.max_trials),

self.onlokeer_bees+self.employee_bees)

defoptimize(self):

self.__reset_algorithm()

self.__initialize_employees()

self.__initialize_onlookers()

foritrinrange(self.n_iter):

self.__employee_bees_phase()

self.__update_optimal_solution()

self.__calculate_probabilities()

self.__select_best_food_sources()

self.__onlooker_bees_phase()

self.__scout_bees_phase()

self.__update_optimality_tracking()

print('iter:{}=cost:{}'

.format(itr,'%04.03e'%self.optimal_solution.fitness))

SI算法优于经典和基于梯度的方法的优点是能够在非可微函数和多模函数上表现得非常好。

就优化问题而言,有几个众所周知的基准函数用于评估优化算法的性能。其中一些函数在我们的objective_function.py上实现,其公式如下所示。

用于测量优化算法性能的一些对象函数列表

为了测试我们的框架并检查我们的ABC算法是否按预期行事,我们可以实现以下测试代码并绘制迭代中的适应值,并评估最小化过程对每个函数的执行情况。

importmatplotlib.pyplotasplt

fromalgorithm.abcimportABC

frommatplotlib.styleimportuse

fromobjection_functionimportRastrigin

fromobjection_functionimportRosenbrock

fromobjection_functionimportSphere

fromobjection_functionimportSchwefel

use('classic')

defget_objective(objective,dimension=30):

objectives={'Sphere':Sphere(dimension),

'Rastrigin':Rastrigin(dimension),

'Rosenbrock':Rosenbrock(dimension),

'Schwefel':Schwefel(dimension)}

returnobjectives[objective]

defsimulate(obj_function,colony_size=30,n_iter=5000,

max_trials=100,simulations=30):

itr=range(n_iter)

values=np.zeros(n_iter)

box_optimal=[]

for_inrange(simulations):

optimizer=ABC(obj_function=get_objective(obj_function),

colony_size=colony_size,n_iter=n_iter,

max_trials=max_trials)

optimizer.optimize()

values+=np.array(optimizer.optimality_tracking)

box_optimal.append(optimizer.optimal_solution.fitness)

print(optimizer.optimal_solution.pos)

values/=simulations

plt.plot(itr,values,lw=0.5,label=obj_function)

plt.legend(loc='upperright')

defmain():

plt.figure(figsize=(10,7))

simulate('Rastrigin')

plt.ticklabel_format(axis='y',style='sci',scilimits=(-2,2))

plt.xticks(rotation=45)

plt.show()

if__name__=='__main__':

main()

我们可以通过分析每个基准函数的适应度图和迭代次数来检查结果,还可以检查optimizer.optimal_solution.pos的输出结果,并检查ABC是否具有非常好的近似值我们的基准功能的最佳点。

THE END
1.优化覆盖基于matlab人工蜂群算法求解无线网络传感覆盖优化问题人工蜂群算法 (Artificial Bee Colony Algorithm, ABC) 属于一种元启发式智能算法, 是一种非数值计算的组合优化算法。人工蜂群算法虽然算法简单, 但易陷入局部极值点, 优化的后期收敛速率慢。由于混沌运动具有遍历性、对初始条件的敏感性、随机性等特点, 为了提高蜂群搜索的遍历性和种群的多样性, 本文将混沌思想加入https://blog.csdn.net/TIQCmatlab/article/details/124577738
2.abc换成数字是什么在数字世界里,123这样的数字序列有着广泛的应用。比如在密码设置、编号标识等领域,123可以作为特定信息的标识或编码。123作为数字序列,也可以通过不同的方式被解读。例如,在某些情境下,123可能代表一个特定的含义,如电话区号、日期格式等。此外,123还可能与一些特定的文化符号相关联。在一些文化中,https://zhidao.baidu.com/question/931885571828786899.html
3.基于ABCLS的传感器节点定位算法【摘要】:为了减少无线传感器网络节点的定位误差,提出一种人工蜂群算法(ABC)修正最小二乘(LS)定位误差的传感器节点定位算法(ABC-LS)。首先估计未知传感器节点与信标节点间距离,然后采用LS算法初步确定未知传感器节点位置,最后采用ABC算法对LS算法的节点定位误差进行修正,并采用仿真实验测试ABC-LS与其他节点定位算法的优劣https://www.cnki.com.cn/Article/CJFDTotal-JYRJ201505064.htm
4.离散人工蜂群算法求解资源时变的项目调度问题AETABC算法中候选食物源的生成方式是优化效果和效率好坏的关键。本文基于任务排列的食物源位置编码对应了项目调度方案,生成候选食物源时既要保持食物源编码的离散性又要保持食物源编码对应的调度方案的可行性,为此本文采用了一种新的候选食物源生成方法。 仍以图1所示项目为例来说明候选食物源的生成方法,设食物源xi=(1,http://www.chinaaet.com/article/181261
5.基于自适应邻域搜索和高斯扰动的人工蜂群算法(ABCNG)然而,ABC也存在一些局限性,如开发能力弱、收敛速度慢等。为了克服这些缺点,本文提出了一种新的基于自适应邻域搜索和高斯扰动的ABC算法。首先,采用自适应方法动态调整邻域大小。然后,基于邻域结构构造了一种改进的全局最优解引导搜索策略。最后,设计了一种新的具有进化速率的高斯扰动来进化每次迭代中不变的解。在两个https://www.cnblogs.com/ycy1273984518/p/15201124.html
6.优化求解基于人工蜂群算法ABC求解最优目标matlab源码人工蜂群算法(Artificial Bee Colony Algorithm, 简称ABC算法)是一个由蜂群行为启发的算法,在2005年由Karaboga小组为优化代数问题而提出。 2 部分代码 clc; 1. clear; 1. close all; 1. %% Problem Definition 1. CostFunction=@(x) Sphere(x); % Cost Function https://blog.51cto.com/u_15287693/4315555
7.人工蜂群(ABC)算法伪代码Artificial Bee Colony(ABC) Algorithm伪代码: 初始化人工蜂群和问题参数 初始化食物源记忆 cycle=1 重复 雇佣蜂(employed https://www.jianshu.com/p/243bdf4567ec
8.ABCCBA从1到9不同数字组成算法php教程也就是能算出用 (0-9组成) 的所有 ABCCBA 不重复的 6位数。 可能会比较麻烦!希望高手能帮我解决一下。非常感谢。 本人不懂程序。能直接给出数字也行。当然最好能付上代码。 回复讨论(解决方案) $a = Combination(range(0, 9), 3);foreach($a as $v) $r[] = join('', array_merge($v, https://m.php.cn/faq/232447.html
9.均值方差模型范文7篇(全文)如,B.S.Jason 用启发式算法研究了三种具有非凸交易成本的均值-方差投资组合模型[3]。H.Konno运用线性规划的分枝定界法求解具有分段线性交易成本的不允许卖空情况下均值-绝对偏差投资组合模型的最优解[4]。李仲飞和汪寿阳运用交互式方法研究了具有线性交易成本的不允许卖空情况下的投资组合模型的最优解[5]。张忠桢https://www.99xueshu.com/w/ikeysr02n5wh.html
10.数据结构和算法字符串的最大公因子gcd 算法:const gcd = (a, b) => (0 === b ? a : gcd(b, a % b)) 如果它们有公因子 abc,那么 str1 就是 m 个 abc 的重复,str2 是 n 个 abc 的重复,连起来就是 m+n个 abc,好像 m+n 个 abc 跟 n+m 个 abc 是一样的。 https://open.alipay.com/portal/forum/post/158701039
11.Python实现人工蜂群算法的示例代码pythonABC,即人工蜂群算法(Artificial Bee Colony Algorithm),由Karaboga等人提出,这篇文章主要介绍了人工蜂群算法的概念与Python实现,感兴趣的可以了解一下+ 目录 算法简介 ABC,即人工蜂群算法(Artificial Bee Colony Algorithm),由Karaboga等人提出。 在ABC中,有三种不同的蜜蜂,即雇佣蜂、跟随蜂和侦察蜂,这三种蜜蜂的https://www.jb51.net/python/2938461r5.htm
12.基于合成似然的近似贝叶斯计算方法近似贝叶斯计算(Approximate Bayesian Computation,ABC)方法是近年来发展起来的一种基于数据模拟的贝叶斯推断方法。基于经验似然的近似贝叶斯计算方法(Bayesian Computation with empirical likelihood,BCel)可以克服 ABC 方法难以校准等问题,是一类改良的ABC算法。稳定分布(stable distribution)是一类可以刻画"尖峰厚尾"的金融数据https://wap.cnki.net/lunwen-1017151355.html
13.求解TSP的离散人工蜂群算法1 人工蜂群算法及其离散化定义 ABC算法的寻优过程模拟蜜蜂寻找优质花蜜源的行为,按分工将人工蜂群分为引领蜂、跟随蜂和侦查蜂三种角色,角色之间基于一定条件进行转变.每个蜜源对应问题的一个可能解,蜜源的收益度代表问题解的质量,每个引领蜂对应一个确定的蜜源,并在迭代中对其邻域进行搜索.引领蜂完成搜索后将所搜索到https://xuebao.neu.edu.cn/natural/article/html/2015-8-1074.htm
14.abc,通过算法运算,得到licensekeyxxxxxxxxx实现一套app授权license的算法,license交互可以参照windows序列号,输入用户账号 abc,通过算法运算,得到license key xxx-xxx-xxx-xxx,其中key的长度建议在20位左右,构成为全大写字符+数字,生成的算法要求必须使用 哈希算法(SHA1/256/512任选), RSA(KeySize 2048), 编码技术(HEX编码、字母表编码、BASE64编码任选),生https://github.com/YeYanhui/LicenseApp
15.一类基于蜜蜂采集模型智能算法.pdf一类基于蜜蜂采集模型智能算法.pdf,绑珊琉按娜元兆忠国丑跳怜驻笆洪奎翰畜肛怎籍俗槛软堕寅侈屁挛黄阎昼兵宴唯驾北浦吼薛莱煌邮盂孺铃幌茬辐排瞅报露增场匈啥宗晃沿钡担守皆挫靠妓滓洞班琵内灶肠https://max.book118.com/html/2017/0630/119155680.shtm
16.A*算法求解15数码问题算法简介 人工蜂群算法(Artificial Bee Colony Algorithm, 简称ABC算法)是一个由蜂群行为启发【每日安全资讯】卡巴斯基发现软件漏洞 可在线访问全球1000多个加油站控制器 据外媒Cnet报道,卡巴斯基实验室的研究人员上个月发布了关于加油站漏洞的研究报告,指出从美国到印度的1000多个加油站可能面临网络攻击。这些问题来自https://www.pianshen.com/article/1936924994/
17.一种基于蜂群遗传混合算法的AUV系统任务分配方法6.步骤1:初始化iabc算法参数与nga算法参数,设定任务集合;7.步骤2:利用iabc算法得到每只蜜蜂满足约束条件的任务分配矩阵;8.步骤2-1:为每只蜜蜂从任务集合中随机选择一个任务,然后依据iabc算法的概率公式选择执行任务的auv;9.定义任务约束为:[0010][0011][0012][0013][0014]式中,n表示auv数量,m表示任务总数;https://www.xjishu.com/zhuanli/55/202210273979.html/