【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

相关新闻

最新新闻

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现

SerenityOS 命令行选项解析指南:getopt 与 getopt_long 用法、返回值与底层实现 【免费下载链接】serenity The Serenity Operating System 🐞 项目地址: https://gitcode.com/GitHub_Trending/se/serenity 导读 本文以 getopt(3) 手册 为核心&a…

2026/10/1 19:32:24
轻量服务器还是ECS?大促云服务器选购与避坑实战指南

轻量服务器还是ECS?大促云服务器选购与避坑实战指南

每年大促节点,群里永远有人在问同一个问题:“38元的轻量服务器到底怎么抢?为什么我每次点进去都是已售罄?68元直购和99元的ECS我到底选哪个?”作为一个常年帮团队和自己采购云服务器的老用户,我太清楚这种纠…

2026/9/30 21:32:07
为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南

为 AI 代理的 Review 动作编写 Cedar 审批门控策略:review-agent-governance 策略编写实战指南 【免费下载链接】agents Multi-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity 项目地址:…

2026/9/30 19:41:56
PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署

PaddleOCR 手写数学公式识别算法 CAN 实战指南:Counting-Aware Network 训练、评估与推理部署 【免费下载链接】PaddleOCR Turn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between i…

2026/10/1 19:32:23
Spring源码解析:构造器注入的类型转换与候选匹配机制

Spring源码解析:构造器注入的类型转换与候选匹配机制

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

2026/10/1 19:32:35
openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由

openai-agents-python 多模型接入指南:深入解析 AnyLLMModel 适配层与 any-llm 路由 【免费下载链接】openai-agents-python A lightweight, powerful framework for multi-agent workflows 项目地址: https://gitcode.com/GitHub_Trending/op/openai-agents-pyth…

2026/9/30 21:32:11

日新闻

周新闻

月新闻