白鲸优化算法Python实现

  • Python实现BWO

Python实现BWO

import numpy as np
import math
from copy import deepcopy
import matplotlib.pyplot as plt'''
白鲸优化算法python实现
参数
n:白鲸种群大小
tmax:最大迭代次数
lb:变量下限
ub:变量上限
nd:变量维数
fobj:目标函数
'''# 白鲸优化算法
def bwo(n, tmax, lb, ub, nd, fobj):# 记录每轮更新最优解变化best_fval = []# 位置矩阵# x = (np.random.random((n, nd)) - 0.5) * 2 * ubx = lb + np.random.random((n, nd)) * (ub - lb)# 适应值矩阵fobj_list = [fobj(x[i, ...]) for i in range(n)]fx = [f() for f in fobj_list]# 适应值拷贝矩阵temp_fx = deepcopy(fx)# 最优解和最优解值xposbest = x[np.argmin(fx)]fvalbest = min(fx)best_fval.append(fvalbest)for t in range(1, tmax + 1):# 位置拷贝矩阵temp_x = deepcopy(x)# 鲸落概率wf = 0.1 - 0.05 * (t / tmax)# 计算每只白鲸的平衡因子bfb0 = np.random.random(n)for b0_index in range(len(b0)):while b0[b0_index] == 0:b0[b0_index] = np.random.random()bf = b0 * (1 - t / (2 * tmax))#  更新每一只白鲸位置for i in range(n):# 探索阶段if bf[i] > 0.5:r1 = np.random.random()r2 = np.random.random()while r1 == 0:r1 = np.random.random()while r2 == 0:r2 = np.random.random()# 选择随机白鲸r = np.random.randint(0, n)while r == i:r = np.random.randint(0, n)pj = np.arange(nd)np.random.shuffle(pj)if nd <= n / 5:temp_x[i, pj[0]] = x[i, pj[0]] + (x[r, pj[0]] - x[i, pj[0]]) * (1 + r1) * np.sin(2 * np.pi * r2)temp_x[i, pj[1]] = x[i, pj[1]] + (x[r, pj[1]] - x[i, pj[1]]) * (1 + r1) * np.cos(2 * np.pi * r2)else:for j in range(int(nd / 2)):temp_x[i, 2 * j] = x[i, 2 * j] + (x[r, pj[1]] - x[i, 2 * j]) * (1 + r1) * np.sin(2 * np.pi * r2)temp_x[i, 2 * j + 1] = x[i, 2 * j + 1] + (x[r, pj[1]] - x[i, 2 * j + 1]) * (1 + r1) * np.cos(2 * np.pi * r2)# 开发阶段else:r3 = np.random.random()r4 = np.random.random()while r3 == 0:r3 = np.random.random()while r4 == 0:r4 = np.random.random()c1 = 2 * r4 * (1 - (t / tmax))# 随机白鲸r = np.random.randint(0, n)while r == i:r = np.random.randint(0, n)beta = 3 / 2delta = ((math.gamma(1 + beta) * np.sin((np.pi * beta) / 2))/ (math.gamma((1 + beta) / 2) * beta * (2 ** ((beta - 1) / 2)))) ** (1 / beta)u = np.random.randn(nd)v = np.random.randn(nd)lf = 0.05 * ((u * delta) / (abs(v) ** (1 / beta)))temp_x[i, ...] = r3 * xposbest - r4 * x[i, ...] + c1 * lf * (x[r, ...] - x[i, ...])# 处理超出边界值flaglb = np.asarray(temp_x[i, ...] < lb).astype(np.int8)flagub = np.asarray(temp_x[i, ...] > ub).astype(np.int8)flag = flaglb + flagubfor k in range(nd):if flag[k] == 0:flag[k] = 1else:flag[k] = 0temp_x[i, ...] = temp_x[i, ...] * flag + ub * flagub + lb * flaglbresult = fobj(temp_x[i, ...])temp_fx[i] = result()if temp_fx[i] < fx[i]:x[i, ...] = temp_x[i, ...]fx[i] = temp_fx[i]# 鲸落for i in range(n):if bf[i] <= wf:r5 = np.random.random()r6 = np.random.random()r7 = np.random.random()while r5 == 0:r5 = np.random.random()while r6 == 0:r6 = np.random.random()while r7 == 0:r7 = np.random.random()c2 = 2 * wf * n# 随机白鲸r = np.random.randint(0, n)xstep = (ub - lb) * (np.exp((-c2 * t) / tmax))temp_x[i, ...] = r5 * x[i, ...] - r6 * x[r, ...] + r7 * xstep# 处理超出边界值flaglb = np.asarray(temp_x[i, ...] < lb).astype(np.int8)flagub = np.asarray(temp_x[i, ...] > ub).astype(np.int8)flag = flaglb + flagubfor m in range(nd):if flag[m] == 0:flag[m] = 1else:flag[m] = 0temp_x[i, ...] = temp_x[i, ...] * flag + ub * flagub + lb * flaglbresult = fobj(temp_x[i, ...])temp_fx[i] = result()if temp_fx[i] < fx[i]:x[i, ...] = temp_x[i, ...]fx[i] = temp_fx[i]# 更改最优值temp_xposbest = x[np.argmin(fx)]temp_fvalbest = min(fx)if temp_fvalbest < fvalbest:fvalbest = temp_fvalbestxposbest = temp_xposbestbest_fval.append(fvalbest)return xposbest, fvalbest, best_fval# 求解适应值
def get_function_result(fname, *args):result = -1if fname == "f1":def f1():return sum(args[0] ** 2)result = f1if fname == "f2":def f2():sum1 = 0sum2 = 0for  i in range(len(args[0])):sum1 += abs(args[0][i])for j in range(len(args[0])):sum2 *= abs(args[0][j])return sum1 + sum2result = f2elif fname == "f3":def f3():number = 0for i in range(len(args[0])):number += abs(args[0][i]) ** (i + 1)return numberresult = f3elif fname == "f4":def f4():sum1 = 0sum2 = 0for i in range(len(args[0])):sum1 += args[0][i]for j in range(len(args[0])):sum2 += sum1 ** 2return sum2result = f4elif fname == "f5":def f5():return np.max(abs(args[0]))result = f5elif fname == "f6":def f6():number = 0for i in range(len(args[0]) - 1):number += (100 * ((args[0][i + 1] - (args[0][i] ** 2)) ** 2) + ((args[0][i] - 1) ** 2))return numberresult = f6elif fname == "f7":def f7():number = 0for i in range(len(args[0])):number += ((args[0][i] + 0.5) ** 2)return numberresult = f7elif fname == "f8":def f8():sum = 0for i in range(len(args[0])):sum += (i + 1) * (args[0][i] ** 4)return sum + np.random.random()result = f8elif fname == "f10":def f10():sum = 0for i in range(len(args[0])):sum += args[0][i] * np.sin(np.sqrt(abs(args[0][i])))return -sumresult = f10elif fname == "f12":def f12():sum = 0for i in range(len(args[0])):sum += (args[0][i] ** 4)  - 16 * (args[0][i] ** 2) + 5 * args[0][i]return 0.5 * sumresult = f12elif fname == "f13":def f13():sum = 0for i in range(len(args[0])):sum += (args[0][i] ** 2) - 10 * np.cos(2 * np.pi * args[0][i]) + 10return sumresult = f13elif fname == "f16":def f16():a = 0b = 0c = 0for i in range(len(args[0])):a += np.sin(args[0][i]) ** 2b += args[0][i] ** 2c += np.sin(np.sqrt(abs(args[0][i]))) ** 2number = (a - np.exp(-b)) * np.exp(-c)return numberresult = f16elif fname == "f21":def f21():number = 4 * (args[0][0] ** 2) - 2.1 * (args[0][0] ** 4) + (args[0][0] ** 6) / 3 \+ args[0][0] * args[0][1] - 4 * (args[0][1] ** 2) + 4 * (args[0][1] ** 4)return numberresult = f21return result# 获取目标函数相关参数
def get_functions_details(fname):if fname == "f1":lb = -100ub = 100nd = 30fobj = lambda x: get_function_result("f1", x)return lb, ub, nd, fobjelif fname == "f2":lb = -10ub = 10nd = 30fobj = lambda x: get_function_result("f2", x)return lb, ub, nd, fobjelif fname == "f3":lb = -1ub = 1nd = 30fobj = lambda x: get_function_result("f3", x)return lb, ub, nd, fobjelif fname == "f4":lb = -100ub = 100nd = 30fobj = lambda x: get_function_result("f4", x)return lb, ub, nd, fobjelif fname == "f5":lb = -100ub = 100nd = 30fobj = lambda x: get_function_result("f5", x)return lb, ub, nd, fobjelif fname == "f6":lb = -30ub = 30nd = 30fobj = lambda x: get_function_result("f6", x)return lb, ub, nd, fobjelif fname == "f7":lb = -100ub = 100nd = 30fobj = lambda x: get_function_result("f7", x)return lb, ub, nd, fobjelif fname == "f8":lb = -1.28ub = 1.28nd = 30fobj = lambda x: get_function_result("f8", x)return lb, ub, nd, fobjelif fname == "f10":lb = -500ub = 500nd = 30fobj = lambda x: get_function_result("f10", x)return lb, ub, nd, fobjelif fname == "f12":lb = -5ub = 5nd = 30fobj = lambda x: get_function_result("f12", x)return lb, ub, nd, fobjelif fname == "f13":lb = -5.12ub = 5.12nd = 30fobj = lambda x: get_function_result("f13", x)return lb, ub, nd, fobjelif fname == "f16":lb = -10ub = 10nd = 30fobj = lambda x: get_function_result("f16", x)return lb, ub, nd, fobjelif fname == "f21":lb = -5ub = 5nd = 2fobj = lambda x: get_function_result("f21", x)return lb, ub, nd, fobjif __name__ == '__main__':np.set_printoptions(suppress = False)# 白鲸种群数out_n = 50# 最大迭代次数out_tmax = 1000# 目标函数out_fobj = "f16"# 获取函数参数out_lb, out_ub, out_nd, out_fobj = get_functions_details(out_fobj)out_xposbest, out_fvalbest, out_best_fval = bwo(out_n, out_tmax, out_lb, out_ub, out_nd, out_fobj)plt.plot(range(len(out_best_fval)), out_best_fval)plt.xlabel("t")plt.ylabel("best_value")plt.show()print("xposbest = ", out_xposbest)print("fvalbest = ", f"{out_fvalbest: .10f}")

白鲸优化算法(Beluga whale optimization,BWO)Python实现相关推荐

  1. 白鲸优化算法(Beluga whale optimization,BWO)

    白鲸优化算法(Beluga whale optimization,BWO) 一.算法灵感 二.算法介绍 2.1 初始化 2.2 探索阶段 2.3 开发阶段 2.4 鲸落阶段 2.5 算法伪代码 三.实 ...

  2. 智能优化算法:白鲸优化算法-附代码

    智能优化算法:白鲸优化算法 摘要:白鲸优化算法([Beluga whale optimization,BWO)是由是由 Changting Zhong 等于2022 年提出的一种群体智能优化算法.其灵 ...

  3. 白鲸优化算法学习笔记

    白鲸优化算法学习笔记 1. 引言 白鲸优化算法(Whale Optimization Algorithm,简称WOA)是一种基于自然界中的白鲸行为而发展起来的启发式优化算法.该算法模拟了白鲸群体的寻食 ...

  4. 单目标应用:白鲸优化算法(Beluga whale optimization,BWO)优化双向长短时记忆BiLSTM的权值和阈值(提供MATLAB代码)

    一.算法简介 白鲸优化算法(Beluga whale optimization,BWO)由Changting Zhong等人于2022年提出,该算法模拟了白鲸游泳,觅食和"鲸鱼坠落" ...

  5. 基于白鲸优化算法的函数寻优算法

    文章目录 一.理论基础 1.白鲸优化算法 (1)探索阶段 (2)开发阶段 (3)鲸落 2.BWO算法流程图 二.仿真实验与结果分析 三.参考文献 一.理论基础 1.白鲸优化算法 文献[1]从白鲸的行为 ...

  6. 【智能优化算法-白鲸优化算法】基于白鲸优化算法求解单目标优化问题附matlab代码

    1 内容介绍 白鲸优化算法(Beluga whale optimization,BWO)由Changting Zhong等人于2022年提出,该算法模拟了白鲸游泳,觅食和"鲸鱼坠落" ...

  7. 鲸鱼优化算法(Whale Optimization Algorithm,WOA)

    鲸鱼优化算法(Whale Optimization Algorithm,WOA) 一.算法灵感 二.算法介绍 2.1 初始化 2.2 包围猎物阶段 2.3 气泡网捕食法 2.3.1 收缩包围 2.3. ...

  8. 群体智能优化算法之鲸鱼优化算法(Whale Optimization Algorithm,WOA)

    获取更多资讯,赶快关注上面的公众号吧! 文章目录 鲸鱼优化算法(Whale Optimization Algorithm,WOA) 1.1 灵感 1.2 数学建模和优化算法 1.2.1 包围捕食(En ...

  9. 白骨顶鸡优化算法(Coot Optimization Algorithm,COOT)

    白骨顶鸡优化算法(Coot Optimization Algorithm,COOT) 一.算法灵感 二.算法介绍 2.1 初始化 2.2 跟随者位置更新(探索阶段) 2.2.1 主动更新 2.2.1. ...

最新文章

  1. 线程退出【Linux学习】pthread_create主线程与创建的新线程之间退出关系
  2. 擷取Registry內的螢幕EDID資訊(沒解決問題不過可以學下)
  3. 如何写出正确的二分查找?——利用循环不变式理解二分查找及其变体的正确性以及构造方式...
  4. elasticsearch5.4.3、kibana分布式安装
  5. 利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值...
  6. LeetCode 518. 零钱兑换 II(动态规划)
  7. html5 下拉框 美化,纯js超酷select下拉框美化插件
  8. 为什么中小企业选择 SAP Business One?
  9. Intellij Idea15开发Web网站
  10. latex 箭头_Pandoc上手以及如何使得latex文件转换为Docx文件(MAC)
  11. LoRa无线技术介绍
  12. mysql hyperloglog_Redis HyperLogLog
  13. 【车牌识别】基于matlab车辆出入库计时系统【含Matlab源码 469期】
  14. 聚焦智能制造 香洲区产学研资对接合作活动 盈致科技成功牵手北理珠
  15. #define c# 报错_天轰穿C#教程之#define和#undef【原创】
  16. Unity 编辑器开发实战【Scene View】- UI Selector
  17. react中引入百度地图时,去掉百度地图的logo和信息
  18. 教你电脑休眠如何取消
  19. 优秀前端工程师必备: checkbox radio--单钩 多钩 大比较:你是♂||♀ , 还是 ♂♀...
  20. java集合系列——java集合概述(一)

热门文章

  1. MAC删除开机自启动程序
  2. 近端策略优化(proximal policy optimization)算法简述
  3. 开源免费的C/C++网络库(c/c++ sockets library) 七剑下天山
  4. 互联网最值得加入的 173 家国企汇总!!
  5. 三极管原理及贴片封装注意
  6. sklearn代码9 7-KNN-salay
  7. vbs 合并 excel 表格
  8. 微信防撤回(.dll补丁形式)
  9. 生命的活力-负熵-秩序-结构
  10. 颠覆虚拟机的神器——WSL来了