【Python】新鲜出炉的海洋捕食者算法Python版本
2020年发表的海洋捕食者算法《Marine Predators Algorithm: A nature-inspired metaheuristic》。作者只在原论文中给出了MATLAB代码网上也没有Python版本我自己用Python重写了MATLAB代码。 2020海洋捕食者算法 import numpy as np import random import math def 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 x def levy(n, m, beta): num math.gamma(1beta)*math.sin(math.pi*beta/2) den math.gamma((1beta)/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×dim fitness 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 0 FADs 0.2 P 0.5 while 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_pos CF (1-Iter/MaxIter)**(2*Iter/MaxIter) RL0.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 IterMaxIter/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 stepsize Iter Iter1 if Iter!MaxIter: Convergence_curve[Iter] Top_predator_fit return Top_predator_fit, Top_predator_pos, Convergence_curve在23个基准函数上跑了一遍验证得代码正确fun 1 ---- 4 轮的平均值: 1.590879014464718e-22fun 2 ---- 4 轮的平均值: 3.1015801972813803e-13fun 3 ---- 4 轮的平均值: 2.1687101928786233e-05fun 4 ---- 4 轮的平均值: 2.738516688049143e-09fun 5 ---- 4 轮的平均值: 24.3651022631242fun 6 ---- 4 轮的平均值: 1.5518969799868655e-08fun 7 ---- 4 轮的平均值: 0.0007603777498045276fun 8 ---- 4 轮的平均值: -9759.428902632117fun 9 ---- 4 轮的平均值: 0.0fun 10 ---- 4 轮的平均值: 1.1923795284474181e-12fun 11 ---- 4 轮的平均值: 0.0fun 12 ---- 4 轮的平均值: 9.427489581332269e-10fun 13 ---- 4 轮的平均值: 2.018121184109257e-08fun 14 ---- 4 轮的平均值: 0.9980038377944498fun 15 ---- 4 轮的平均值: 0.00030748598780886593fun 16 ---- 4 轮的平均值: -1.0316284534898776fun 17 ---- 4 轮的平均值: 0.39788735772973816fun 18 ---- 4 轮的平均值: 2.999999999999924fun 19 ---- 4 轮的平均值: -3.862782147820756fun 20 ---- 4 轮的平均值: -3.3219951715813822fun 21 ---- 4 轮的平均值: -10.153199679022137fun 22 ---- 4 轮的平均值: -10.40294056677283fun 23 ---- 4 轮的平均值: -10.53640981666291

相关新闻

ARM Cortex-M GPIO寄存器配置详解:从原理到Tiva™ TM4C1292实战

ARM Cortex-M GPIO寄存器配置详解:从原理到Tiva™ TM4C1292实战

1. GPIO寄存器配置的核心逻辑与设计思路在嵌入式开发领域,尤其是基于ARM Cortex-M内核的微控制器(MCU)如Tiva™ TM4C1292NCZAD,通用输入输出(GPIO)接口是与外部世界交互的基石。很多开发者,尤其…

2026/10/13 4:58:21 阅读更多 →
一套系统服务多组织怎么选:集团、连锁、SaaS 创业的多租户方案对比(2026)

一套系统服务多组织怎么选:集团、连锁、SaaS 创业的多租户方案对比(2026)

一套系统服务多组织怎么选:集团、连锁、SaaS 创业的多租户方案对比(2026) 🌐 演示地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi…

2026/10/5 13:06:45 阅读更多 →
自建商城还差支付?RuoYi Office 商城支付产品介绍:商品·订单·聚合支付一站打通

自建商城还差支付?RuoYi Office 商城支付产品介绍:商品·订单·聚合支付一站打通

自建商城还差支付?RuoYi Office 商城支付产品介绍:商品订单聚合支付一站打通 🌐 文档地址:http://ruoyioffice.com | 📦 源码1GitHub:ruoyi-office | 📦 源码2GitCode:ruoyi-office …

2026/10/2 10:05:00 阅读更多 →

最新新闻

实习考勤不内耗:习讯云打卡全流程避坑指南

实习考勤不内耗:习讯云打卡全流程避坑指南

实习第一个月,我差点被习讯云实习考勤打卡逼到内耗。每天到公司第一件事不是换工牌,而是掏出手机打开习讯云,看定位转圈、看按钮变灰、看页面弹“不在考勤范围”,一套流程下来,本来就不多的精气神先耗掉三分之一。后来…

2026/10/13 4:58:19 阅读更多 →
长连接与短连接:高并发系统中的TCP连接治理实战

长连接与短连接:高并发系统中的TCP连接治理实战

1. 从一次“连接超时”告警说起:为什么我们总在长连接和短连接之间反复横跳?上周五下午三点,某公司后台监控系统突然弹出一连串红色告警:“订单服务TCP连接数突增300%”“网关节点CPU持续92%”“下游支付接口响应延迟突破800ms”。…

2026/10/13 4:58:19 阅读更多 →
微电网风光柴储经济调度:Matlab建模与求解实战

微电网风光柴储经济调度:Matlab建模与求解实战

微电网经济调度,很多刚入门的同学一看“风光柴储”四个字就有点发怵,觉得光是理解拓扑就够复杂了,还要在Matlab里做优化,更是一头雾水。但实际做下来你会发现,它本质就是一个带约束的数学优化问题:把风机、…

2026/10/13 4:58:19 阅读更多 →
Llama 3 架构精读与 FP8 量化实战:长上下文部署全记录

Llama 3 架构精读与 FP8 量化实战:长上下文部署全记录

Llama 3 出来之后,圈子里聊得最多的其实就两件事:一是架构上到底改了些什么,二是它到底能不能被普通人跑起来。官方博客里的参数表人人都能搜到,但真正上手就会发现,一张表和你实际推理时的显存、吞吐、质量完全是两码…

2026/10/13 4:58:19 阅读更多 →
B端体验设计缓解视觉疲劳:色彩降噪、信息密度与深色模式实战

B端体验设计缓解视觉疲劳:色彩降噪、信息密度与深色模式实战

最近在复盘一个后台管理系统项目时,客户方的运营主管跟我说了一句特别真实的话:“连续录入三小时单据,眼睛胀得不行,下班后看什么都带重影。”这句话我一直记到现在。B端体验设计与C端最大的分野就在这里:C端用户是“看…

2026/10/13 4:58:19 阅读更多 →
UCINET数据导入实战:格式规范、Excel整理与高频排错

UCINET数据导入实战:格式规范、Excel整理与高频排错

1. 先搞清楚UCINET到底在等什么数据很多人在UCINET上栽的第一个跟头,不是不会跑算法,而是数据根本喂不进去。明明Excel里填得工工整整,一点Import却报错,或者导进去之后变成一团乱麻,节点对不上、值全错位。这些问题的…

2026/10/13 4:57:19 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →