hello,大家好。各位可点击左下方阅读原文,访问公众号官方店铺。谨防上当受骗,感谢各位支持!

今天为各位更新人工蜂群算法(Artificial Bee Colony,ABC)的Python代码,之前我们在MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)这篇推文讲解了ABC算法的基本思想,忘记ABC算法的小伙伴可以点击上述链接复习一下。

目录

  • 1.ABC算法基本步骤
  • 2.ABC算法Python代码
  • 3.ABC算法实例验证
  • 近期你可能错过了的好文章

1.ABC算法基本步骤

1)初始化各蜜源XiX_iXi​ ; 设定参数NPNPNP、limitlimitlimit 以及最大迭代次数maxItmaxItmaxIt; 计数器初始化it=1it=1it=1;

2)为蜜源XiX_iXi​分配一只引领蜂,按式vid=xid+φ(xid−xjd)v_{i d}=x_{i d}+\varphi\left(x_{i d}-x_{j d}\right)vid​=xid​+φ(xid​−xjd​)进行搜索,产生新蜜源ViV_iVi​ ;

3)依据式fiti={1/(1+fi),fi⩾01+abs⁡(fi),otherwise f i t_{i}= \begin{cases}1 /\left(1+f_{i}\right), & f_{i} \geqslant 0 \\ 1+\operatorname{abs}\left(f_{i}\right), & \text { otherwise }\end{cases}fiti​={1/(1+fi​),1+abs(fi​),​fi​⩾0 otherwise ​评价ViV_iVi​的适应度,根据贪婪选择的方法确定保留的蜜源;

4)由式pi=fiti/∑i=1NPfitip_{i}=f i t_{i} / \sum_{i=1}^{N P} f i t_{i}pi​=fiti​/∑i=1NP​fiti​计算引领蜂找到的蜜源被跟随的概率;

5)跟随峰采用与引领蜂相同的方式进行搜索,根据贪婪选择的方法确定保留的蜜源;

6)判断蜜源 是否满足被放弃的条件。如满足,对应的引领蜂角色变为侦察蜂,否则直接转到8);

7)侦察蜂根据式Xit+1={Ld+rand⁡(0,1)(Ud−Ld),trial⁡i⩾limit Xit,trial⁡i<limit X_{i}^{t+1}=\left\{\begin{array}{l} L_{d}+\operatorname{rand}(0,1)\left(U_{d}-L_{d}\right), \operatorname{trial}_{i} \geqslant \text { limit } \\ X_{i}^{t}, \operatorname{trial}_{i}<\text { limit } \end{array}\right.Xit+1​={Ld​+rand(0,1)(Ud​−Ld​),triali​⩾ limit Xit​,triali​< limit ​随机产生新蜜源;

8)it=it+1it=it+1it=it+1; 判断算法是否满足终止条件,若满足则终止,输出最优解,否则转到2)。

更多关于ABC算法详细内容详见MATLAB数学建模(十一) | 人工蜂群算法(附MATLAB代码)。


2.ABC算法Python代码

整个ABC算法Python代码共包含两个.py文件,即artificial_bee_colony.py和app.py。这里需要注意的是,需要各位自行安装ypstruct库,安装方法可以参考https://pypi.org/project/ypstruct/

artificial_bee_colony.py文件如下所示:

import numpy as np
from ypstruct import structuredef run(problem, params):# 函数信息costfunc = problem.costfuncnvar = problem.nvarvarmin = problem.varminvarmax = problem.varmax# 参数信息maxit = params.maxitnpop = params.npopnonlooker = params.nonlookerlimit = int(np.round(0.6*nvar*npop))a = params.a# 空的蜂群结构empty_bee = structure()empty_bee.position = Noneempty_bee.cost = None# 临时蜂群结构newbee = structure()newbee.position = Nonenewbee.cost = None# 初始化全局最优解bestsol = empty_bee.deepcopy()bestsol.cost = np.inf# 种群初始化pop = empty_bee.repeat(npop)for i in range(npop):pop[i].position = np.random.uniform(varmin, varmax, nvar)pop[i].cost = costfunc(pop[i].position)if pop[i].cost < bestsol.cost:bestsol = pop[i].deepcopy()# 初始化每个个体的抛弃次数count = np.empty(npop)# 记录每一代中全局最优个体目标函数值bestcost = np.empty(maxit)# 人工蜂群算法主循环for it in range(maxit):# 引领蜂for i in range(npop):# 随机选择k,不等于iK = np.append(np.arange(0,i),np.arange(i+1,npop))k = K[np.random.randint(K.size)]# 定义加速系数phi = a * np.random.uniform(-1, 1, nvar)# 新的蜜蜂位置newbee.position = pop[i].position + phi * (pop[i].position - pop[k].position)# 计算新蜜蜂目标函数值newbee.cost = costfunc(newbee.position)# 通过比较目标函数值,更新第i个蜜蜂的位置if newbee.cost < pop[i].cost:pop[i] = newbee.deepcopy()else:count[i] += 1# 计算适应度值和选择概率fit = np.empty(npop)meancost = np.mean([pop[i].cost for i in range(npop)])for i in range(npop):fit[i] = np.exp(-pop[i].cost/meancost)     #将目标函数值转换为适应度值probs = fit / np.sum(fit)# 跟随蜂for m in range(nonlooker):# 通过轮盘赌的方式选择蜜源i = roulette_wheel_selection(probs)# 随机选择k,不等于iK = np.append(np.arange(0, i), np.arange(i + 1, npop))k = K[np.random.randint(K.size)]# 定义加速系数phi = a * np.random.uniform(-1, 1, nvar)# 新的蜜蜂位置newbee.position = pop[i].position + phi * (pop[i].position - pop[k].position)# 计算新蜜蜂目标函数值newbee.cost = costfunc(newbee.position)# 通过比较目标函数值,更新第i个蜜蜂的位置if newbee.cost < pop[i].cost:pop[i] = newbee.deepcopy()else:count[i] += 1# 侦察蜂for i in range(npop):if count[i] > limit:pop[i].position = np.random.uniform(varmin, varmax, nvar)pop[i].cost = costfunc(pop[i].position)count[i] = 0# 更新全局最优解for i in range(npop):if pop[i].cost < bestsol.cost:bestsol = pop[i].deepcopy()# 存储每一代全局最优解的目标函数值bestcost[it] = bestsol.cost# 展示迭代信息print("Iteration {}: Best Cost = {}".format(it, bestcost[it]))# 返回值out = structure()out.pop = popout.bestsol = bestsolout.bestcost = bestcostreturn outdef roulette_wheel_selection(p):c = np.cumsum(p)r = sum(p) * np.random.rand()ind = np.argwhere(r <= c)return ind[0][0]

app.py文件如下所示:

import matplotlib.pyplot as plt
import numpy as np
from ypstruct import structure
import time
import artificial_bee_colonystart = time.time()         #运行开始时刻
# 测试函数
def sphere(x):return sum(x**2)# 问题定义
problem = structure()
problem.costfunc = sphere
problem.nvar = 10
problem.varmin = -100 * np.ones(10)
problem.varmax = 100 * np.ones(10)# ABC参数
params = structure()
params.maxit = 500
params.npop = 100
params.nonlooker = 100
params.a = 1# 运行ABC
out = artificial_bee_colony.run(problem, params)
# 运行结果
plt.rcParams['font.sans-serif'] = ['KaiTi']  #设置字体为楷体
plt.plot(out.bestcost)
print("最优解:{}".format(out.bestsol))
end = time.time()              # 运行结束时刻
print('运行时间:{}s'.format(end-start))plt.xlim(0, params.maxit)
plt.xlabel('迭代次数')
plt.ylabel('全局最优目标函数值')
plt.title('人工蜂群算法')
plt.grid(True)
plt.show()

3.ABC算法实例验证

测试函数如下:
min⁡f(x)=∑i=110xi2−100≤xi≤100\min f\left ( x \right ) =\sum_{i=1}^{10} x_{i}^2 \quad -100\le x_{i} \le 100 minf(x)=i=1∑10​xi2​−100≤xi​≤100
运行app.py文件,运行结果如下:


参考文献

[1] 秦全德, 程适, 李丽, 等. 人工蜂群算法研究综述[J]. 2014


OK,今天就到这里啦,各位可点击下方图片留言。

我们已经推出粉丝QQ交流群,各位小伙伴赶快加入吧!!!


咱们下期再见

近期你可能错过了的好文章

新书上架 | 《MATLAB智能优化算法:从写代码到算法思想》

优化算法 | 灰狼优化算法(文末有福利)

优化算法 | 鲸鱼优化算法

遗传算法(GA)求解带时间窗的车辆路径(VRPTW)问题MATLAB代码

粒子群优化算法(PSO)求解带时间窗的车辆路径问题(VRPTW)MATLAB代码

知乎 | bilibili | CSDN:随心390

优化算法 | 人工蜂群算法(附Python代码)相关推荐

  1. 优化算法—人工蜂群算法(ABC)

    一.人工蜂群算法的介绍     人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜 ...

  2. 优化算法——人工蜂群算法(ABC)

    一.人工蜂群算法的介绍     人工蜂群算法(Artificial Bee Colony, ABC)是由Karaboga于2005年提出的一种新颖的基于群智能的全局优化算法,其直观背景来源于蜂群的采蜜 ...

  3. 手把手教你深度学习强大算法进行序列学习(附Python代码)

    作者:NSS 翻译:陈之炎 校对:丁楠雅 本文共3200字,建议阅读10分钟. 本文将教你使用做紧致预测树的算法来进行序列学习. 概述 序列学习是近年来深度学习的热点之一.从推荐系统到语音识别再到自然 ...

  4. 投资组合优化的人工蜂群算法(Matlab代码实现)

     

  5. TSP问题解析篇之自适应大邻域搜索(ALNS)算法深度通读(附python代码)

    01 概念科普篇 关于neighborhood serach,这里有好多种衍生和变种出来的胡里花俏的算法.大家在上网搜索的过程中可能看到什么Large Neighborhood Serach,也可能看 ...

  6. 基于人工蜂群算法改进的DELM预测-附代码

    人工蜂群算法改进的深度极限学习机DELM的回归预测 文章目录 人工蜂群算法改进的深度极限学习机DELM的回归预测 1.ELM原理 2.深度极限学习机(DELM)原理 3.人工蜂群算法 4.人工蜂群算法 ...

  7. 【优化覆盖】基于matlab人工蜂群算法求解无线网络传感覆盖优化问题【含Matlab源码 1097期】

    ⛄一.人工蜂群算法求解无线网络传感覆盖优化问题简介 1 WSN覆盖模型 1.1 问题描述 在WSN中, 要实现较高的无线网络传感器节点覆盖率从而减少监测盲点的出现, 就必须加大无线网络传感器节点的分布 ...

  8. 论文阅读三:基于改进人工蜂群算法的SDN负载均衡策略研究

    名词解释: Artificial Bee Colony Algorithm, ABC:人工蜂群算法 Load balancing algorithm based on improved artific ...

  9. 人工蜂群算法(ABC)

    Karaboga在2005年提出的人工蜂群算法(Artificial Bee Colony, ABC)模型是为了 解决多变量函数优化,全局优化问题 完整过程: 两种不同的表述方式,但实际的关系是: 观 ...

最新文章

  1. SELECT语句小结
  2. 2017.5.23 -- 学习记录
  3. Auto packing the repository in background for optimum performance.
  4. ipython使用 python3,2019-04-29 python/ipython设置默认python3
  5. [转载]TopCoder兼职赚钱入门(Part. 1)
  6. 论文浅尝 | 通过学习中间步骤的监督信号改进多跳知识库问答
  7. 夺命连环问:一个 TCP 连接可以发多少个 HTTP 请求?|文末送书
  8. 模电:集成运算放大器
  9. 基于node.js的网页聊天系统设计与实现
  10. A good article :csi cameras on the TX2 (the easy Way)
  11. phpStorm2018安装与破解(免安装打包版)
  12. 文件上传(WebUploader)成功之前自定义裁剪(vue-img-cutter),上传裁剪的图片,并兼容ie
  13. 隔空开车,华为云EI圆我“武侠梦”
  14. 遇险哪里还有空报警?求救app告诉你,有的
  15. Office 365 共享链接直接进入编辑
  16. 获取每日一句,每天发给女朋友。
  17. 微信开源C++Libco介绍与应用(二)
  18. 在Linux下编译VLC-Qt
  19. Linux下的Backlight子系统(一)
  20. 计算机科学引论2013中文版,(完整版)计算机科学引论(2013影印版)考试重点

热门文章

  1. 碎片化学前端,推荐这几位大前端巨佬~
  2. C# DLL异常System.IO.FileNotFoundException:Could not load file orassembly BouncyCastle.Crypto系统找不到指定的文件
  3. get 请求参数是对象怎么办
  4. mldonkey——Linux下的电驴
  5. linux最大时间,Linux 时间设置
  6. 以下关于python二维数据的描述中错误的是_python第二章1
  7. 前端入门篇(四十一)JS基础8动态修改网页内容(DOM操作)
  8. php正则判断是否包特殊符号,正则表达式(RegExp)判断文本框中是否包含特殊符号...
  9. python画圆形螺旋线_用Python写一首中秋Rap
  10. 技术人修炼之道阅读笔记(一)让自己更值钱的5个能力