【Python】新鲜出炉的海洋捕食者算法Python版本

2020年发表的海洋捕食者算法《Marine Predators Algorithm: A nature-inspired metaheuristic》。

作者只在原论文中给出了MATLAB代码,网上也没有Python版本,我自己用Python重写了MATLAB代码。

"""2020海洋捕食者算法
"""
import numpy as np
import random
import mathdef initial(pop, dim, ub, lb):X = np.zeros([pop, dim])for i in range(pop):for j in range(dim):X[i, j] = random.random() * (ub[j] - lb[j]) + lb[j]  # 均匀分布随机初始化return X, lb, ub# 将超过边界的直接用边界值赋值
def BorderCheckForOne(x, ub, lb, pop, dim):if x > ub[0]:x = ub[0]elif x < lb[0]:x = lb[0]return xdef levy(n, m, beta):num = math.gamma(1+beta)*math.sin(math.pi*beta/2)den = math.gamma((1+beta)/2) * beta * 2**((beta-1)/2)sigma_u = (num/den)**(1/beta)u = np.random.normal(0,sigma_u,(n,m))v = np.random.normal(0,1,(n,m))return u/(np.abs(v)**(1/beta)) ## ^的用法好像有错def MPA(pop, dim, lb, ub, MaxIter, fun):Top_predator_pos = np.zeros(dim)  #或者np.zeros([1,dim])Top_predator_fit = float("inf")Convergence_curve = np.zeros(MaxIter)stepsize = np.zeros([pop, dim])  # pop×dimfitness = np.inf * np.ones([pop, 1])   # pop×1# 初始化种群X, lb, ub = initial(pop, dim, ub, lb)Xmin = lb[0] * np.ones([pop, dim])Xmax = ub[0] * np.ones([pop, dim])Iter = 0FADs = 0.2P = 0.5while Iter < MaxIter:# =================== 对上一轮的进行复盘 ============for i in range(0, pop):# 1.边界检测for j in range(0, dim):X[i, j] = BorderCheckForOne(X[i, j], ub, lb, pop, dim)# 2.计算每个鲨鱼的适应度值fitness[i, 0] = fun(X[i, :])if fitness[i, 0] < Top_predator_fit:  # 23个基准函数都是越小越好Top_predator_fit = fitness[i, 0].copy()Top_predator_pos = X[i, :].copy()# =================== Memory saving ===============if Iter == 0:fit_old = fitness.copy()X_old = X.copy()for i in range(pop):if fit_old[i, 0] < fitness[i, 0]:fitness[i, 0] = fit_old[i, 0].copy()  # 如果上一轮的位置更好,还是用上一轮的X[i, :] = X_old[i, :].copy()fit_old = fitness.copy()X_old = X.copy()# =================== Levy=======Elite = np.ones([pop, 1]) * Top_predator_posCF = (1-Iter/MaxIter)**(2*Iter/MaxIter)RL=0.05*levy(pop, dim, 1.5)  # levy返回一个pop×dim的矩阵RB = np.random.randn(pop, dim)  # 满足正态分布的pop×dim大小矩阵# ===============遍历每个个体==============for i in range(pop):for j in range(dim):R = random.random()# ================公式12============if Iter < MaxIter/3:stepsize[i, j] = RB[i, j] * ( Elite[i, j]-RB[i, j]*X[i, j] )X[i, j] = X[i, j] + P*R*stepsize[i, j]# ===============公式13 和 14=======elif Iter>MaxIter/3 and Iter < 2*MaxIter/3:if i > pop/2:stepsize[i, j] = RB[i, j] * (RB[i, j]*Elite[i, j]-X[i, j])X[i, j] = Elite[i, j] + P*CF*stepsize[i, j]else:stepsize[i, j] = RL[i, j] * (Elite[i, j]-RL[i, j]*X[i, j])X[i, j] = X[i, j] + P * R *stepsize[i, j]# ==============公式15==============else:stepsize[i, j] = RL[i, j]*( RL[i, j]*Elite[i, j]-X[i, j])X[i, j] = Elite[i, j] + P*CF*stepsize[i, j]# =================== 对上一轮的进行复盘 ============for i in range(0, pop):# 1.边界检测for j in range(0, dim):X[i, j] = BorderCheckForOne(X[i, j], ub, lb, pop, dim)# 2.计算每个鲨鱼的适应度值fitness[i, 0] = fun(X[i, :])if fitness[i, 0] < Top_predator_fit:  # 23个基准函数都是越小越好Top_predator_fit = fitness[i, 0].copy()Top_predator_pos = X[i, :].copy()# =================== Memory saving ===============if Iter == 0:fit_old = fitness.copy()X_old = X.copy()for i in range(pop):if fit_old[i, 0] < fitness[i, 0]:fitness[i, 0] = fit_old[i, 0].copy()  # 如果上一轮的位置更好,还是用上一轮的X[i, :] = X_old[i, :].copy()fit_old = fitness.copy()X_old = X.copy()# =====================对整体进行一个更新(公式16)=====if random.random() < FADs:U = (np.random.rand(pop, dim) < FADs)X = X + CF*np.multiply(Xmin + np.multiply(np.random.rand(pop, dim), (Xmax-Xmin)), U)else:r = random.random()stepsize = (FADs*(1-r)+r) * (X[random.sample(range(0, pop), pop),:] - X[random.sample(range(0, pop), pop),:])X = X + stepsizeIter = Iter+1if Iter!=MaxIter:Convergence_curve[Iter] = Top_predator_fitreturn Top_predator_fit, Top_predator_pos, Convergence_curve

在23个基准函数上跑了一遍,验证得代码正确

fun 1 ---- 4 轮的平均值: 1.590879014464718e-22
fun 2 ---- 4 轮的平均值: 3.1015801972813803e-13
fun 3 ---- 4 轮的平均值: 2.1687101928786233e-05
fun 4 ---- 4 轮的平均值: 2.738516688049143e-09
fun 5 ---- 4 轮的平均值: 24.3651022631242
fun 6 ---- 4 轮的平均值: 1.5518969799868655e-08
fun 7 ---- 4 轮的平均值: 0.0007603777498045276
fun 8 ---- 4 轮的平均值: -9759.428902632117
fun 9 ---- 4 轮的平均值: 0.0
fun 10 ---- 4 轮的平均值: 1.1923795284474181e-12
fun 11 ---- 4 轮的平均值: 0.0
fun 12 ---- 4 轮的平均值: 9.427489581332269e-10
fun 13 ---- 4 轮的平均值: 2.018121184109257e-08
fun 14 ---- 4 轮的平均值: 0.9980038377944498
fun 15 ---- 4 轮的平均值: 0.00030748598780886593
fun 16 ---- 4 轮的平均值: -1.0316284534898776
fun 17 ---- 4 轮的平均值: 0.39788735772973816
fun 18 ---- 4 轮的平均值: 2.999999999999924
fun 19 ---- 4 轮的平均值: -3.862782147820756
fun 20 ---- 4 轮的平均值: -3.3219951715813822
fun 21 ---- 4 轮的平均值: -10.153199679022137
fun 22 ---- 4 轮的平均值: -10.40294056677283
fun 23 ---- 4 轮的平均值: -10.53640981666291
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/617705.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spaceship

通过数字平台启动您的网站、想法和未来&#xff0c;该平台旨在提供和连接您所需的域、托管、电子邮件和 Web 工具&#xff0c;并让您完全掌控 如果需要购买可以开5347的卡&#xff0c;点击获取

python 多线程 简介

python多线程简介 多线程的概念是相对单线程而言的。所谓单线程是指CPU在处理完成一项任务之前是不会开始处理第二件任务的。简单来说&#xff0c;单线程在执行任务时是有一定的顺序的。而随着科技的进步&#xff0c;CPU等计算机组件的升级换代日新月异&#xff0c;CPU处理速度…

小学信息科技Python课程第2课:坐标与画笔

一、turtle画布与坐标系 在同一平面互相垂直且有公共原点的两条数轴构成平面直角坐标系。在坐标系中&#xff0c;水平方向的轴都称为x轴&#xff0c;垂直方向的轴都称为y轴 它们相交于O点&#xff0c;在这一个点里&#xff0c;x轴的值为0&#xff0c;y轴的值也为0&#xff0c;所…

掌握 Vue 响应式系统,让数据驱动视图(下)

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…

SpringBoot全局配置Long转String丢失精度的问题解决

第一种方式 简单粗暴&#xff0c;将所有的Long类型&#xff0c;改为String&#xff0c;数据库改成varchar类型&#xff1b; 第二种方式 自己建个配置类 extends WebMvcConfigurerAdapter 已经被弃用&#xff0c;直接实现WebMvcConfigurer该接口就行了 EnableWebMvc Config…

什么是网络数据抓取?有什么好用的数据抓取工具?

一、什么是网络数据抓取 网络数据抓取&#xff08;Web Scraping&#xff09;是指采用技术手段从大量网页中提取结构化和非结构化信息&#xff0c;按照一定规则和筛选标准进行数据处理&#xff0c;并保存到结构化数据库中的过程。目前网络数据抓取采用的技术主要是对垂直搜索引…

DNS解析和它的三个实验

一、DNS介绍 DNS&#xff1a;domain name server 7层协议 名称解析协议 tcp /53 主从之间的同步 udp/53 名字解析 DNS作用&#xff1a;将域名转换成IP地址的协议 1.1DNS的两种实现方式 1.通过hosts文件&#xff08;优先级最高&#xff09; 分散的管理 linux /etc/hos…

深度生成模型(Deep Generative Models)

什么是机器学习 深度生成模型&#xff08;Deep Generative Models&#xff09;是一类利用深度学习方法生成新样本的模型。这些模型通常被用于生成与训练数据集相似的新数据&#xff0c;例如图像、文本或音频。深度生成模型的两个主要类型是生成对抗网络&#xff08;GANs&#…

QA面试题

1、质量保证(QA)是什么&#xff1f; QA代表质量保证。QA 是一组活动&#xff0c;旨在确保开发的软件满足 SRS 文档中提到的所有规范或要求。QA 遵循 PDCA 循环&#xff1a; 计划/Plan - 计划是质量保证的一个阶段&#xff0c;组织在此阶段确定构建高质量软件产品所需的过程。做…

日志审计系统Agent项目创建——读取日志文件(Linux版本)

紧接着上一篇的分享&#xff0c;继续做日志文件的读取&#xff0c;点击连接即可日志文件初始化https://blog.csdn.net/wjl990316fddwjl/article/details/135553238 1、将指针移动到文件末尾 //文件移动到结尾fseek(fp, 0, SEEK_END); 2、定义当前指针的位置 lastPosition ft…

搭建算法日志自检小系统

&#x1f952; 前言 目前演示的是一个工具&#xff0c;但如此&#xff0c;未来完成有潜力可以演变为一整套系统。 &#x1f451;现场人员自检失败表计点位教程V2.0 NOTE: 如果没有“logfiles-meter-tool“目录的请联系我们进行提供&#xff01; &#x1f447; 进入<dist>…

WEB 3D技术 three.js 阴影属性

上文 WEB 3D技术 three.js 光照与阴影 我们说了阴影 那么 我们继续将阴影的属性 目前 我们的代码 import ./style.css import * as THREE from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls.js";//创建相机 cons…

【Git】的工作流程简介

目录 Git的工作区域Git的基本流程 1.将工作区的代码添加到暂存区2.将暂存区的文件提交到本地仓库3.将暂存区的文件提交到远程仓库 Git的工作区域 Git的基本流程 图形化方式操作 命令行模式&#xff08;Linux系统常用&#xff09;操作 1.将工作区的代码添加到暂存区 查看文件状…

蓝桥杯基础知识4 swap()、reverse()

蓝桥杯基础知识4 swap()、reverse() #include <bits/stdc.h> using namespace std;int main(){int a 10,b 20;cout << a << << b <<\n; //10 20swap(a,b);cout << a << << b <<\n; //20 10return 0; } C 在线工具 |…

CES 2024上的AI亮点

以下是CES 2024前两天AI方面亮点&#xff1a; 一个AI助手&#xff0c;取代你的智能手机应用程序的rabbit.tech人工智能驱动的捆绑式鞋子被称为“Moonwalkers”&#xff0c;可以让你走得更快 FitXR Slam的VR和健身创新WeHead的人工智能能给ChatGPT一张脸世界上第一个高清触觉游…

OpenCV-19图像的仿射变换

放射变换是图像旋转&#xff0c;缩放&#xff0c;平移的总称&#xff0c;具体的做法是通过一个矩阵和原图片坐标进行计算&#xff0c;得到新的坐标&#xff0c;完成变换&#xff0c;所以关键就是这个矩阵。 一、仿射变换之图像平移 使用API------warpAffine&#xff08;src &…

OpenAI推出GPT商店,以充分利用ChatGPT在消费者市场上的成功

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【数据库系统概论】期末复习4

系列文章 期末复习1 期末复习2 期末复习3 系列文章什么是数据库的安全性&#xff1f;什么是数据库的完整性&#xff1f;数据库的完整性概念与数据库的安全性概念有什么区别和联系&#xff1f;什么是数据库的完整性约束条件&#xff1f;DBMS 的完整性控制机制应具有哪三个方面的…

高压消防泵:科技与安全性的完美结合

在现代社会&#xff0c;随着科技的不断发展&#xff0c;各种高科技设备层出不穷&#xff0c;为我们的生活带来了极大的便利。在森林火灾扑救领域&#xff0c;恒峰智慧科技研发的高压消防泵作为一种高效、节能、绿色、环保的优质设备&#xff0c;将科技与安全性完美地结合在一起…

C语言ctype.h头文件字符测试函数

C/C语言ctype.h头文件字符测试函数 C有一系列专门处理字符的函数&#xff0c;在ctype.h中包含了这些函数的原型&#xff0c;当然在C中&#xff0c;这些函数被放在了cctype中。 作用 这些函数接收一个字符作为参数&#xff0c;如果该字符属于某个特殊的类别&#xff0c;就返回…