北极熊优化算法PBO的理论知识以及python代码实现

  • 北极熊优化算法
    • 1.条件假设
    • 2.浮冰漂移 (全局搜索)策略
    • 3.海豹捕捉 (局部搜索)策略
    • 算法步骤
  • Python代码实现
    • 参数设定
    • 寻优函数
    • 浮冰漂移 (全局搜索)策略
    • 海豹捕捉 (局部搜索)策略
    • 寻优结果
  • 下载链接
  • 参考文献

北极熊优化算法

1.条件假设

在北极熊算法 中,假 设 种 群 由kkk kkk个 北 极 熊 组 成,每 个 北极熊代表解空间中的一个具有nnn个维度的点x=(x0,x1,…,xn−1)x= (x_0,x_1, …,x_{n-1})x=(x0​,x1​,…,xn−1​),在第ttt次 迭 代 时 第iii 个 点 的 第jjj 维 度 的 坐 标 用 (xji)t({{x_j}^i})^t(xj​i)t 表示。

2.浮冰漂移 (全局搜索)策略

如果一只饥饿的北极熊在它最近邻范围内找不到任何 东西吃,那么它就站上一个大而稳定的浮冰,浮 冰 在 很 长 一段时间内不会因为北极熊体重太大而破裂。北 极 熊 利 用 浮冰朝远处可能有海豹的聚集地漂移。漂移可能需要几天 时间,在这段时间内北极熊也在周围的冰面和水域中寻找 食物。北极熊的浮冰漂移现象在算法中用公式 (1)来 表示。
(xji)t=(xji)t−1+sign(w)×α+γ(1)({{x_j}^i})^t=({{x_j}^i})^{t-1}+sign(w)×\alpha+\gamma\qquad\qquad\qquad(1) (xj​i)t=(xj​i)t−1+sign(w)×α+γ(1)

ααα是区间 (0,1](0,1](0,1]之间的随机数,γγγ是 [0,w][0,w][0,w]区间内 的随机 数,sign(w)sign(w)sign(w) 函数是分段函数, 根 据 www 的 取 值 (负,0,正)({负,0,正})(负,0,正)sign(w)sign(w)sign(w)函数的结果为{ −1,0,1{-1,0,1}−1,0,1},www 是两个北极熊之间的欧式距离 (公式 (2))。
w=∑k=0n−1(xkbest−xki)2(2)w = \sqrt{\sum_{k=0}^{n-1}({x_k}^{best}-{x_k}^{i})^2}\qquad\qquad\qquad(2) w=k=0∑n−1​(xk​best−xk​i)2​(2)
在北极熊算法的迭代过程中的每个个体都根据公式 (1)进行全局搜 索 探 索,但是只有在某只熊探索到比当前 位置更好的 位 置 时,才更新该只熊的位置。因 为 只 有 在 熊 距离海豹聚集地更近的时候,它才有很大希望捕成功 (如 图2所示)。

3.海豹捕捉 (局部搜索)策略

在捕猎过程 中,北极熊在北极冰面上漫步着探寻潜在 的猎物,此时它不仅观察冰面上的情况,水下的情况也在 它的视野监 视 之 下。为 了 发 现 猎 物,北极熊悄悄地向最佳 地点移动。一旦北极熊基本到达攻击位置或者它被海豹发 现,他就以最大速度攻击猎物。海豹通常最有可能待在冰 上,然而当有 危 险 的 时 候,它们也会跳入水 中。北 极 熊 也 会立刻跳入 水 中,利用潜水和游泳的优势,北 极 熊 可 以 在 水下迅速追上猎物并把它的牙齿刺入海豹体内,随 后 北 极 熊把海豹拖上浮 冰 享 用 美 味。北极熊的这种捕捉海豹的策 略,在算法中作为局部搜索策略。每只熊的移动方式按照 修改的三叶草方程公式 (3)(3)(3)进行,北极熊的视野半径用两 个参数表示:θ∈[0,0,3]θ{\in} [0,0,3]θ∈[0,0,3]限定了北极熊的能见距离,φ0∈[0,0,3]φ_0{\in}[0,0,3]φ0​∈[0,0,3]表示围绕猎物行进的斜角度。
r=4acos(φ0)sin(φ0)(3)r=4acos(φ_0)sin(φ_0)\qquad\qquad\qquad\qquad(3) r=4acos(φ0​)sin(φ0​)(3)
r作用于每只熊自身移动过程中每一维度上的坐标的更 新过程中,如公式 (4)所示。
x0new=x0dd±rcos(φ1)x1new=x1dd±r[sin(φ1)+cos(φ1)]x2new=x1dd±r[sin(φ1)+sin(φ2)+cos(φ3)](4)xn−2new=xn−2dd±r[∑sin(φk)+cos(φn−1)]xnnew=xndd±r[∑sin(φk)+cos(φn)]{x_0}^{new}={x_0}^{dd}±rcos(φ_1) \qquad\qquad\qquad\\ {x_1}^{new}={x_1}^{dd}±r[sin(φ_1)+cos(φ_1)]\qquad\qquad\qquad\\ {x_2}^{new}={x_1}^{dd}±r[sin(φ_1)+sin(φ_2)+cos(φ_3)]\qquad\qquad\qquad(4) \\ {x_{n-2}}^{new}={x_{n-2}}^{dd}±r[\sum{sin(φ_k)}+cos(φ_{n-1})]\qquad\qquad\qquad\\ {x_{n}}^{new}={x_{n}}^{dd}±r[\sum{sin(φ_k)}+cos(φ_{n})]\qquad\qquad\qquad\\ x0​new=x0​dd±rcos(φ1​)x1​new=x1​dd±r[sin(φ1​)+cos(φ1​)]x2​new=x1​dd±r[sin(φ1​)+sin(φ2​)+cos(φ3​)](4)xn−2​new=xn−2​dd±r[∑sin(φk​)+cos(φn−1​)]xn​new=xn​dd±r[∑sin(φk​)+cos(φn​)]
 每个φφφ的取值为 [0,2π][0,2π][0,2π],公式中的 “+”号表示北极熊向 前 探 寻,如果位置不理想,北 极 熊 就 向 “-”号 方 向探寻,两个方向都不理想,北 极 熊 就 原 地 不 动。如 果 北 极熊是在二维平面上进行捕猎,则它的行进路径与三叶草某片叶子的形状极其相似 (图3)。  
饥饿引发熊群繁衍与灭绝策略 (动态种群规模调整策略) 在算法执行初期,熊群规模只是最大容量的75%,剩 余的25%为后期的熊群增长、最好个体繁殖后代和最差解 的消亡作准备。在算法的每一次迭代中,个体会因饥饿而死亡或者在成功捕猎后繁殖后代。这个机制代表了北极的 严酷条件,算法引入kkk作为[0,1][0,1][0,1]区间上的随机数,采用 公式 (5)确定熊的死亡或生存决策。
Deathifk<0.5Reproductionifk>0.75(5)Death\qquad\qquad\qquad if\,k<0.5\\ \qquad Reproduction\qquad if\,k>0.75\qquad\qquad(5) Deathifk<0.5Reproductionifk>0.75(5)
死亡策略是针对最虚弱的一只熊,熊 死 亡 的 条 件 是: 种群数量要保证多于种群容(6)(6)(6)进行。
(xjReproduction)t=(xjbest)t+(xji)t/2(6)({x_j}^{Reproduction})^t={({{x_j}^{best}})^t+({{x_j}^{i}})^t}/2\qquad(6) (xj​Reproduction)t=(xj​best)t+(xj​i)t/2(6)

算法步骤

1)定义参数:适应值fff、解维度、迭代次 数 TTT、种 群 最大容量nnn和视野最大距离等;

2)随机生成初始种群75%n75%n75%n并记录最好解;

3)对种群中的每个北极熊,随机设置每个维度的斜角度值φφφ;

4)利用公式 (3)计算搜索半径rrr;

5)在 “+”号作用下采用公式 (4)计算北极熊新位 置,如果新位置更好,更新当前位置;

6)在 “-”号作用下采用公式 (4)计算北极熊新位 置,如果新位置更好,更新当前位置;

7)根据公式 (1)和www,决策北极熊的位置;

8)对种群进行排序,选出排序第一位的北极熊判断是 否更新全局最好解;

9)随机从当前种群1010%10个最好解中,选择111个与全局 最好解不同的解;

10)随机产生kkk值,如 果k<0.25k<0.25k<0.25且 熊 数 量 大 于50%50%50%,则移除种群中排序在最后一名的解;

11)如果熊的数量小于n−1n-1n−1,则根据公式 (6)繁衍1 只新熊加入种群;

12)判断是否达到最大迭代次数,是则转13),否则跳 转到3);

13)输出全局最好解和适应值,退出算法。

Python代码实现

参数设定

'''
# 全局参数设定
'''
M:种群最大容量
m:种群当前规模大小
N:目标函数解的维度
T:迭代次数
V:最大视野距离
X:解集合
P:初始化种群数量百分比
K:动态调整规模参数
B:变量限制范围
'''
# 问题1:迭代陷于局部最优
M, N, T, V, P, K, B = 30, 20, 201, 0.3, 0.75, 0.25, [-32, 32]
m = int(np.floor(M * P))

寻优函数

def function(X):y1 = 0for i in X:y1 += i*iy2 = 0for i in X:y2 += np.cos(2*np.pi*i)y = -20 * np.exp(-0.2 * np.sqrt(1 / 30 * y1))-np.exp(1/30*y2)+20+np.exp(1)return y

浮冰漂移 (全局搜索)策略

fits = np.zeros(M)def move(index, angle, radius, action):# print('index, angle, radius, action, N', index, angle, radius, action, N)temp = np.zeros(N)for j in range(N):# print("j:", j)result = 0# 计算sin部分的累加值for k in range(j):result += np.sin(angle[k])if 'add'.__eq__(action):temp[j] = X[index][j] + radius * (result + np.cos(angle[j]))else:temp[j] = X[index][j] - radius * (result + np.cos(angle[j]))return temp

海豹捕捉 (局部搜索)策略

res = np.zeros(50)
# main loop
fitness = np.zeros(T)
for _ in range(1):# 初始化m = int(np.floor(M * P))# X = np.zeros((M, N))## # 随机初始化# X[:m] = np.random.random((m, N)) * (B[1] - B[0]) + B[0]X = np.loadtxt(open("./pop_Ackley.csv", "rb"), delimiter=",", skiprows=0)f_best = np.infx_best = 0for i in range(m):fits[i] = function(X[i])arg = np.argsort(fits[:m])if fits[arg[0]] < f_best:f_best = fits[arg[0]]x_best = X[arg[0]]# 测试一次 迭代T次t = 0while t < T:# area search# 视野半径后期变大 跳出局部最优# 对种群每一只北极熊for i in range(m):# 局部搜索angles = np.random.random(N) * 2 * np.pista = np.random.random() * Vangle0 = np.random.random() * np.pi / 2r = 4 * sta * np.cos(angle0) * np.sin(angle0)# using the sign of addtmp = move(i, angles, r, 'add')if function(tmp) < function(X[i]):X[i] = tmpelse:tmp = move(i, angles, r, 'minus')if function(tmp) < function(X[i]):X[i] = tmp# 全局搜索# 决策北极熊的位置w = np.sqrt(np.sum((x_best - X[i]) ** 2))alpha = np.random.random()gamma = np.random.random() * wtmp = X[i] + np.sign(w) * alpha + gammaif function(tmp) < function(X[i]):X[i] = tmp# 统计当前适应度值for i in range(m):fits[i] = function(X[i])arg = np.argsort(fits[:m])if fits[arg[0]] < f_best:f_best = fits[arg[0]]x_best = X[arg[0]]# 种群的动态变化k = np.random.random()# 种群繁衍if m < M - 1 and k > (1 - K):# 从前10%中随机抽取一个 个体与最好个体交配 生成新的个体idx = random.randint(1, np.floor(m * 0.1) + 1)X[m] = (x_best + X[arg[idx]]) / 2m += 1# 最弱个体死亡if m > M * 0.5 and k < K:# arg中排序最后的为最弱个体# 死亡之后 后面的所有个体往前移动一个位置X[arg[-1]:m] = X[arg[-1] + 1:m + 1]m -= 1print(t, " 当前最小适应度值:", f_best, '个体为:', x_best, '种群数量:', m)fitness[t] = f_bestt += 1print("第", _, '次测试', "最小适应度值:", f_best, '个体为:', x_best)res[_] = f_best

寻优结果

下载链接

北极熊优化算法无差错下载链接

参考文献

[1]张亮, 韩毅, 邓丽丽. 国外新型智能优化算法——北极熊算法[J]. 计算机测量与控制, 2020, 28(3):7.

北极熊优化算法PBO的理论知识以及python代码实现相关推荐

  1. 灰狼优化算法GWO的理论知识以及python代码实现

    灰狼优化算法GWO的理论知识以及python代码实现 GWO 算法的等级结构 GWO 算法的数学模型 灰狼算法的python实现 寻优结果 下载链接 GWO 算法的等级结构 灰狼优化算法是模拟食物链顶 ...

  2. LightGBM——提升机器算法(图解+理论+安装方法+python代码)

    原文地址:https://blog.csdn.net/huacha__/article/details/81057150 前言 LightGBM是个快速的,分布式的,高性能的基于决策树算法的梯度提升框 ...

  3. python 分类 投票_LightGBM——提升机器算法(图解+理论+安装方法+python代码)

    前言 LightGBM是个快速的,分布式的,高性能的基于决策树算法的梯度提升框架.可用于排序,分类,回归以及很多其他的机器学习任务中. 在竞赛题中,我们知道XGBoost算法非常热门,它是一种优秀的拉 ...

  4. 基于蜻蜓优化算法的配电网重构求解(Python代码实现)【IEEE123节点算例】

  5. 【VMD-DBO-LSTM】变分模态分解-蜣螂优化算法-长短时记忆神经网络研究(Python代码实现)

  6. MATLAB灰狼优化算法求解超市物流配送中心选址问题代码实例

    MATLAB灰狼算法求解超市物流配送选址问题实例 作者:麦哥 MATLAB灰狼优化算法求解超市物流配送中心选址问题代码实例 灰狼算法编程问题实例: 在范围为(0,0)到(100,100)的矩形区域内, ...

  7. 基于基于粒子群优化算法的微电网调度(Matlab代码实现)

    目录 ⛳️1 写在前面 ⛳️2 基于基于粒子群优化算法的微电网调度(Matlab代码实现)

  8. 模拟退火算法详细讲解(含实例python代码)

    模拟退火算法详细讲解(含实例python代码) (一)模拟退火算法简介 (二)模拟退火算法原理 (三)退火过程中参数控制 (四)算法步骤 (五)实例分析 最近老师要求做模拟退火算法实验,看了很多博客之 ...

  9. 数学建模——智能优化之粒子群模型详解Python代码

    数学建模--智能优化之粒子群模型详解Python代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplo ...

最新文章

  1. VR社交应用程序vTime支持Oculus Touch
  2. arcgis js 移除某一个点_GIS Experience (二):ArcGIS实践操作问题集
  3. oracle取本月最后一天是星期几_Oracle 获取本周、本月、本季、现年的第一天和最后一天...
  4. 5、HIVE DML操作、load数据、update、Delete、Merge、where语句、基于分区的查询、HAVING子句、LIMIT子句、Group By语法、Hive 的Join操作等
  5. Java学习之约瑟夫环的两中处理方法
  6. grafana 创建仪表盘_创建仪表盘前要问的三个问题
  7. python变量区变量保存与加载_python – Flask:使用全局变量将数据文件加载到内存中...
  8. 小白学HarmonyOS,HarmonyOS 2.0正式发布 分布式能力获得全面升级
  9. mysql存储过程和自定义函数_MySQL存储过程/存储过程与自定义函数的区别
  10. oracle初始化化表空间用户权限
  11. 567.字符串的排列
  12. Android程序对不同手机屏幕分辨率自适应的总结
  13. 支持kubernetes原生Spark 与其他应用的结合(mysql,postgresql,oracle,hdfs,hbase)
  14. 阿里云轻量级服务器上JDK及tomcat部署配置
  15. 鸿蒙系统适配机型_华为官宣鸿蒙系统,麒麟960等五十多款旗舰机型可以直接升级...
  16. Pandas 读取 csv 得 DataFrame 转换成 List
  17. access mysql odbc驱动程序_access odbc驱动下载|
  18. 计算机怎么禁止远程桌面,win7怎样禁用远程桌面共享_win7系统禁用远程桌面共享的步骤-系统城...
  19. gpu内存大小 android,Android性能测试(内存、cpu、fps、流量、GPU、电量)——adb篇...
  20. python诗歌文件格式处理_Python诗歌的依赖版本语法

热门文章

  1. 什么是wifi霸屏神器?用WiFi霸屏广告机打广告是什么体验?
  2. Spring Boot配置加载顺序
  3. SpeedReader for Mac(快速阅读器)
  4. 【斩获7枚offer,入职阿里平台事业部】横扫阿里、美团、京东、之后,我写下了这篇面经!
  5. CPUFriend.kext 黑苹果 CPU睿频日志
  6. ESP32_驱动TFT彩屏_Arduino
  7. 四国军棋引擎开发(3)寻找到军旗的最短路径
  8. 编译原理——求短语、直接短语(简单短语)、素短语、句柄
  9. 天线下倾角示意图_天线的下倾角调整方法和基站与流程
  10. Juniper入门之简单命令