实用指南:Python实现手榴弹爆炸算法(Grenade Explosion Method, GEM)(附完整代码)

news/2025/9/25 22:12:01/文章来源:https://www.cnblogs.com/wzzkaifa/p/19112166

Python实现手榴弹爆炸算法(Grenade Explosion Method, GEM)(附完整代码)

1.手榴弹爆炸算法介绍

手榴弹爆炸算法(Grenade Explosion Method, GEM)是一种受手榴弹爆炸产生大量高速破片这一物理现象启发的元启发式优化算法。该算法模拟了爆炸后破片在空间中的飞散、对目标的冲击以及最终确定最佳命中点的过程,旨在通过这种强有力的机制跳出局部最优,高效地寻找全局最优解。

(1)核心原理与隐喻

GEM的优化过程主导围绕以下几个核心概念展开:

手榴弹与爆炸 (Grenade and Explosion):算法将每一个待评估的候选解视为一枚“手榴弹”。手榴弹的“引爆”过程相当于对该解进行一次深入的局部搜索。爆炸的威力(或搜索范围)通常与该解的质量(适应度)相关,优质的解可能被赋予更大的“爆炸半径”,以期在其周围发现更优的解。

破片生成 (Fragmentation):一枚手榴弹爆炸后,会产生大量“破片”,这些破片在算法中代表由原候选解(手榴弹)生成的一系列新解。新解通过在原解的邻域内进行随机扰动产生,其分布模拟了破片向四周飞散的效果。

目标区域与最佳破片 (Target Area and Best Fragment):爆炸后,算法会评估所有“破片”(新解)的适应度。其中性能最佳的那种“破片”被视为此次爆炸对“目标”的最有效命中点。这个最佳破片将取代原来的手榴弹,成为下一代迭代中的新“手榴弹”。

迭代爆炸 (Iterative Explosion):算法通过多轮迭代进行。在每一代中,种群中的每一个个体(手榴弹)都会独立地进行“爆炸-生成破片-选择最佳破片”的过程。整个种群经过这种方式协同进化,逐渐向挑战的最优解区域收缩和聚焦。

(2)算法流程

初始化:随机生成初始种群,每个个体为一枚“手榴弹”。

评估:计算每枚手榴弹的适应度值。

爆炸循环:对于种群中的每一枚手榴弹:

确定爆炸半径:根据其适应度或其他策略确定本次爆炸的局部搜索范围。
生成破片:在以其当前位置为中心、爆炸半径为范围的邻域内,随机生成一定数量的新解(破片)。
评估破片:计算所有破片的适应度。
选择最佳破片:从所有破片(有时也包括原手榴弹)中选择适应度最好的一个,替代当前的手榴弹,成为新一代的个体。

终止检查:若满足终止条件(如达到最大迭代次数或解的质量足够好),则停止并输出最佳解;否则,返回步骤2。

2.Python代码

import numpy as np
import matplotlib.pyplot as plt
import math
# 定义目标函数: y = sum((x-0.5)^2)
def objective_function(x):
"""计算目标函数值"""
return np.sum((x - 0.5) ** 2)
# 手榴弹爆炸算法(Grenade Explosion Method)实现
def gem_optimization(dim, bounds, max_iter, pop_size, radius_factor=0.5, reduction_rate=0.95):
"""
使用手榴弹爆炸算法优化目标函数
参数:
dim: 问题维度
bounds: 变量边界,形式为[(min1, max1), (min2, max2), ..., (mindim, maxdim)]
max_iter: 最大迭代次数
pop_size: 每轮爆炸产生的碎片数量
radius_factor: 初始爆炸半径因子
reduction_rate: 爆炸半径缩减率
返回:
best_solution: 最优解
best_fitness: 最优解对应的函数值
fitness_history: 每代最优适应度历史
"""
# 初始化参数
# 计算初始爆炸半径
radius = radius_factor * np.mean([b[1] - b[0] for b in bounds])
# 生成初始点(随机选择一个点作为初始手榴弹位置)
current_position = np.array([np.random.uniform(b[0], b[1]) for b in bounds])
current_fitness = objective_function(current_position)
# 记录优化历史
fitness_history = [current_fitness]
# 主循环
for i in range(max_iter):
# 生成爆炸碎片(在当前位置周围随机生成新解)
fragments = []
for _ in range(pop_size):
# 在半径范围内随机生成新点
fragment = []
for j in range(dim):
# 确保新点在边界内
lower = max(bounds[j][0], current_position[j] - radius)
upper = min(bounds[j][1], current_position[j] + radius)
fragment.append(np.random.uniform(lower, upper))
fragments.append(np.array(fragment))
# 计算所有碎片的适应度
fragment_fitness = [objective_function(f) for f in fragments]
# 找到最佳碎片
best_fragment_idx = np.argmin(fragment_fitness)
best_fragment = fragments[best_fragment_idx]
best_fragment_fitness = fragment_fitness[best_fragment_idx]
# 如果找到更优点,则移动到该点
if best_fragment_fitness < current_fitness:
current_position = best_fragment
current_fitness = best_fragment_fitness
# 记录当前最优适应度
fitness_history.append(current_fitness)
# 缩小爆炸半径
radius *= reduction_rate
# 打印当前迭代信息
if (i + 1) % 10 == 0:
print(f"迭代次数: {i + 1}, 最优适应度: {current_fitness:.6f}, 爆炸半径: {radius:.6f}")
return current_position, current_fitness, fitness_history
# 主程序
if __name__ == "__main__":
# 设置问题参数
dim = 10  # 10维问题
bounds = [(-5, 5) for _ in range(dim)]  # 变量边界
max_iter = 100  # 最大迭代次数
pop_size = 50  # 每轮爆炸产生的碎片数量
# 运行GEM优化
print("开始手榴弹爆炸算法优化...")
best_solution, best_fitness, fitness_history = gem_optimization(
dim, bounds, max_iter, pop_size
)
# 输出优化结果
print("\n优化结果:")
print(f"最优解: {best_solution}")
print(f"最优函数值: {best_fitness:.8f}")
print(f"理论最优解: [0.5, 0.5, ..., 0.5]")
print(f"理论最优函数值: 0.0")
# 确保中文显示正常
plt.rcParams["font.family"] = ["SimHei", "Arial Unicode MS", "sans-serif"]
plt.rcParams["axes.unicode_minus"] = False  # 解决负号显示问题
# 绘制迭代曲线
plt.figure(figsize=(10, 6))
plt.plot(fitness_history, 'b-', linewidth=2)
plt.title('手榴弹爆炸算法优化过程', fontsize=14)
plt.xlabel('迭代次数', fontsize=12)
plt.ylabel('最优函数值', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.7)
plt.yscale('log')  # 使用对数刻度更清晰地展示收敛过程
plt.tight_layout()
plt.show()
# 保持窗口打开
plt.ioff()  # 关闭交互模式
plt.show()

3.程序结果

迭代次数: 80, 最优适应度: 0.011749, 爆炸半径: 0.082577
迭代次数: 90, 最优适应度: 0.001560, 爆炸半径: 0.049442
迭代次数: 100, 最优适应度: 0.001090, 爆炸半径: 0.029603

优化结果:
最优解: [0.49467463 0.49473504 0.50464147 0.48421686 0.48880317 0.50102271
0.494882   0.52068229 0.49483154 0.51248836]
最优函数值: 0.00108977
理论最优解: [0.5, 0.5, ..., 0.5]
理论最优函数值: 0.0

4.代码、程序订制(MATLAB、Python) →QQ:1579325979

4.1 各类智能算法

中文名称

英文全称

缩写

出现年份

遗传算法

Genetic Algorithm

GA

1975

粒子群优化算法

Particle Swarm Optimization

PSO

1995

蚁群优化算法

Ant Colony Optimization

ACO

1992

模拟退火算法

Simulated Annealing

SA

1983

免疫优化算法

Immune Optimization Algorithm

IA

1986

贪婪算法

Greedy Algorithm

-

1970

差分进化算法

Differential Evolution

DE

1997

混合蛙跳算法

Shuffled Frog Leaping Algorithm

SFLA

2003

人工蜂群算法

Artificial Bee Colony

ABC

2005

人工鱼群算法

Artificial Fish Swarm Algorithm

AFSA

2002

萤火虫算法

Glowworm Swarm Optimization

GSO

2005

果蝇优化算法

Fruit Fly Optimization Algorithm

FOA

2011

布谷鸟搜索算法

Cuckoo Search

CS

2009

猴群算法

Monkey Algorithm

MA

2008

免疫网络算法

Immune Network Algorithm

aiNet

2000

水滴算法

Intelligent Water Drops Algorithm

IWD

2007

和声搜索算法

Harmony Search

HS

2001

克隆选择算法

Clonal Selection Algorithm

CLONALG

2000

禁忌搜索算法

Tabu Search

TS

1986

爬山算法

Hill Climbing

HC

1940

引力搜索算法

Gravitational Search Algorithm

GSA

2009

细菌觅食优化算法

Bacterial Foraging Optimization

BFO

2002

蝙蝠算法

Bat Algorithm

BA

2010

邻域搜索算法

Neighborhood Search

NS

1960

变邻域搜索算法

Variable Neighborhood Search

VNS

1997

蜜蜂交配优化算法

Honey Bees Mating Optimization

HBMO

2001

文化基因算法

Memetic Algorithm

MA

1989

烟花算法

Fireworks Algorithm

FWA

2010

思维进化算法

Mind Evolutionary Algorithm

MEA

1998

蜻蜓算法

Dragonfly Algorithm

DA

2016

虚拟力场算法

Virtual Force Field Algorithm

VFF

1989

遗传规划

Genetic Programming

GP

1992

鲸鱼优化算法

Whale Optimization Algorithm

WOA

2016

灰狼优化算法

Grey Wolf Optimizer

GWO

2014

狼群算法

Wolf Pack Algorithm

WPA

2007

鸡群优化算法

Chicken Swarm Optimization

CSO

2014

生物地理学优化算法

Biogeography-Based Optimization

BBO

2008

分布估计算法

Estimation of Distribution Algorithm

EDA

1996

帝国竞争算法

Imperialist Competitive Algorithm

ICA

2007

天牛须搜索算法

Beetle Antennae Search Algorithm

BAS

2017

头脑风暴优化算法

Brain Storm Optimization

BSO

2011

人工势场法

Artificial Potential Field

APF

1986

猫群算法

Cat Swarm Optimization

CSO

2006

蚁狮优化算法

Ant Lion Optimizer

ALO

2015

飞蛾火焰优化算法

Moth-Flame Optimization

MFO

2015

蘑菇繁殖优化算法

Mushroom Reproduction Optimization

MRO

2020

麻雀搜索算法

Sparrow Search Algorithm

SSA

2020

水波优化算法

Water Wave Optimization

WWO

2015

斑鬣狗优化算法

Spotted Hyena Optimizer

SHO

2017

雪融优化算法

Snow Ablation Optimization

SAO

2022

蝴蝶优化算法

Butterfly Optimization Algorithm

BOA

2019

磷虾群算法

Krill Herd Algorithm

KHA

2012

黏菌算法

Slime Mould Algorithm

SMA

2020

人类学习优化算法

Human Learning Optimization

HLO

2014

母亲优化算法

Mother Optimization Algorithm

MOA

2023

4.2各类优化问题

各种优化课题

各种优化课题

车间调度

路由路网优化

机场调度

顺序约束计划调度

工程项目调度

双层规划

港口调度

零件拆卸装配问题优化

生产线平衡问题

水资源调度

用电调度

库位优化

公交车发车调度

库位路线优化

车辆路径物流配送优化

武器分配优化

选址配送优化

覆盖疑问优化

物流公铁水疑问优化

管网难题优化

供应链、生产计划、库存优化

PID优化

库位优化、货位优化

VMD优化

4.3各类神经网络、深度学习、机器学习

序号

模型名称

核心特点

适用场景

1

BiLSTM 双向长短时记忆神经网络分类

双向捕捉序列上下文信息

自然语言处理、语音识别

2

BP 神经网络分类

误差反向传播训练

通用分类任务

3

CNN 卷积神经网络分类

自动提取空间特征

图像、视频分类

4

DBN 深度置信网络分类

多层受限玻尔兹曼机堆叠

特征学习、降维

5

DELM 深度学习极限学习机分类

结合 ELM 与深度架构

复杂分类任务

6

ELMAN 递归神经网络分类

含反馈连接的递归结构

时间序列、语音

7

ELM 极限学习机分类

随机生成隐藏层,快速训练

小样本学习

8

GRNN 广义回归神经网络分类

基于径向基函数回归

函数逼近、时间序列

9

GRU 门控循环单元分类

门控机制简化 LSTM

序列建模

10

KELM 混合核极限学习机分类

结合多核 ELM

高维复杂数据

11

KNN 分类

基于距离的分类方法

模式识别

12

LSSVM 最小二乘法支持向量机分类

最小二乘优化 SVM

小样本分类

13

LSTM 长短时记忆网络分类

门控机制处理长期依赖

语言建模

14

MLP 全连接神经网络分类

多层感知机

通用分类

15

PNN 概率神经网络分类

基于贝叶斯原理

模式识别

16

RELM 鲁棒极限学习机分类

增强鲁棒性的 ELM

噪声数据

17

RF 随机森林分类

多棵决策树集成

高维、非线性数据

18

SCN 随机配置网络模型分类

随机生成网络结构

快速训练

19

SVM 支持向量机分类

寻找最优分类超平面

二分类、多分类

20

XGBOOST 分类

梯度提升决策树

大规模结构化数据

21

ANFIS 自适应模糊神经网络预测

融合模糊逻辑与神经网络

复杂非线性框架建模

22

ANN 人工神经网络预测

多层神经元网络

通用预测任务

23

ARMA 自回归滑动平均模型预测

线性时间序列建模

时间序列预测

24

BF 粒子滤波预测

基于蒙特卡洛采样

动态框架状态估计

25

BiLSTM 双向长短时记忆神经网络预测

双向捕捉序列信息

时间序列、文本预测

26

BLS 宽度学习神经网络预测

增量学习结构

在线学习

27

BP 神经网络预测

误差反向传播训练

通用预测

28

CNN 卷积神经网络预测

自动特征提取

图像、视频预测

29

DBN 深度置信网络预测

多层无监督预训练

特征学习预测

30

DELM 深度学习极限学习机预测

结合 ELM 与深度结构

复杂预测任务

31

DKELM 回归预测

动态核 ELM 回归

时间序列回归

32

ELMAN 递归神经网络预测

递归结构处理时序

时间序列

33

ELM 极限学习机预测

快速训练

小样本回归

34

ESN 回声状态网络预测

储备池计算

时间序列预测

35

FNN 前馈神经网络预测

前向传播

通用预测

36

GMDN 预测

基因表达数据网络建模

生物信息学预测

37

GMM 高斯混合模型预测

多高斯分布建模

密度估计、聚类

38

GRNN 广义回归神经网络预测

径向基函数回归

函数逼近

39

GRU 门控循环单元预测

门控机制简化 LSTM

时间序列预测

40

KELM 混合核极限学习机预测

多核 ELM 回归

高维回归

41

LMS 最小均方算法预测

线性回归的迭代优化

自适应滤波

42

LSSVM 最小二乘法支持向量机预测

最小二乘优化 SVM

回归预测

43

LSTM 长短时记忆网络预测

门控处理长期依赖

时间序列预测

44

RBF 径向基函数神经网络预测

径向基函数逼近

函数拟合

45

RELM 鲁棒极限学习机预测

增强鲁棒性的 ELM

噪声数据回归

46

RF 随机森林预测

决策树集成

回归预测

47

RNN 循环神经网络预测

循环连接处理序列

时间序列预测

48

RVM 相关向量机预测

稀疏贝叶斯学习

回归、分类

49

SVM 支持向量机预测

寻找最优超平面

回归预测

50

TCN 时间卷积神经网络预测

一维卷积处理时序

时间序列预测

51

XGBoost 回归预测

梯度提升决策树

大规模回归

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

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

相关文章

Day08-C:\Users\Lenovo\Desktop\note\code\JavaSE\Basic\src\com\David\array-ArrayDemo01~07

数组首先要声明数组变量才能使用如dataType[] arrayRefVar; java语言中使用new操作来创建数组,如dataType[ ] arrayRefVar = new dataType[arraysize] 数组通过索引访问,索引从0开始内存分析堆:存放new的对象和数组…

yolov10_float16.tflite TO yolov10_int8.tflite

使用google colab平台1. 安装ultralytics!pip install ultralytics2. 导入yolo并从ultralytics加载yolov10n.ptfrom ultralytics import YOLO model = YOLO("https://github.com/ultralytics/assets/releases/dow…

ansible注意的和错误代码分析

一、需要注意的点分清楚这个是主控节点还是被控节点的操作,有的时候是一个文件从主控到被控节点,还是被控节点的文件到主控节点上面了剧本执行报错代码 # 仔细看,报错的原因就是ansibel_lvm 未定义,写错了变量名TA…

用 Rust 和 Tesseract OCR 识别验证码

一、背景介绍 Rust 是一种系统级编程语言,以性能和安全性著称。在自动化测试和数据分析场景中,验证码识别是一个常见挑战。结合 Tesseract OCR,我们可以使用 Rust 构建一个高效的验证码识别工具。本文将介绍如何使用…

基于寄存器地址amp;标准外设库的LED流水灯

实验任务2 1.1先在工程总文件夹中创建User,Library和Startup三个文件夹,然后右键keil中的文件夹Source Group 1添加工程所需的这三个文件夹。1.2分别在Library,Startup和User三个文件夹中添加必要的头文件和.c文件。…

用 Swift 和 Tesseract OCR 实现验证码识别

一、背景介绍 Swift 是 Apple 推出的现代化编程语言,广泛应用于 iOS 和 macOS 应用开发。结合 Tesseract OCR,可以在移动和桌面应用中高效地识别验证码。本文将展示如何使用 Swift 结合 Tesseract OCR 实现验证码自动…

Rust 和 Tesseract OCR 实现验证码识别

一、背景介绍 Rust 以其高性能和内存安全著称,适合构建高效的图像处理和 OCR 应用程序。本文将结合 Tesseract OCR,使用 Rust 实现验证码识别。 二、环境准备 2.1 安装 Rust 更多内容访问ttocr.com或联系1436423940 …

AI-Powered-ToDo-List

AI-Powered-ToDo-List https://github.com/fanqingsong/AI-Powered-ToDo-ListAI 智能任务管理器基于 LangGraph 和 React 的智能任务管理应用,支持传统手动管理和 AI 对话式管理两种方式。✨ 功能特性🎯 双重管理方…

Netty:完成RPC服务(实战)

Netty:完成RPC服务(实战)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco",…

Python 在 Web 开发中的应用与趋势

一、引言 🌐 随着互联网的普及和应用场景的不断拓展,Web 开发已经成为软件工程的核心组成部分。从简单的静态网页到复杂的交互式应用,Web 技术在近二十年间经历了飞速发展。而 Python,作为一门简洁优雅、功能强大…

网页设计怎么建站点店铺管理软件

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;MQ ⛺️稳中求进&#xff0c;晒太阳 定义 消息队列&#xff1a;一般我们简称为MQ(Message Queue) Message Queue :消息队列中间件&#xff0c;很多初学者认为&#xff0c;MQ通过消息的发送…

校园交友|基于SprinBoot+vue的校园交友网站(源码+数据库+文档) - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

LLM MOE的进化之路

1. 阅读前提 本次课一共讲解三个不同版本的 MOE,分别是基础版MOE,大模型训练用的 SparseMoE,还有 DeepSeek 用的比较多的 shared_expert 的 SparseMoE。 2. 版本1:基础版本MOE 输入是一个 Token, 输出是一个 Token…

相交链表-leetcode

题目描述 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交:题目数据 保证 整个链式结构中不存在环。 …

【pytorch】关于深度学习模型是怎么使数据从头流动到尾的

【pytorch】关于深度学习模型是怎么使数据从头流动到尾的Posted on 2025-09-25 21:52 SaTsuki26681534 阅读(0) 评论(0) 收藏 举报问题描述 之前在看cycleGAN的代码时想到一个问题 代码里用类的方式定义cycleGAN模…

AtCoder ARC114 总结 (A-C)

AtCoder ARC114 总结 A 50 内只有 15 个质数。\(2^{15}\) 枚举所有情况然后 \(O(n)\) check 即可。 B 若 \(i\to f(i)\) 连边,原题意相当于选出若干个环。答案即 \(2^{\text {环数}}-1\)。 C 考虑一开始每个数都有 \(…

松江郑州阳网站建设郑州专业网站设计

运维 | 使用 Docker 安装 Jenkins | Jenkins 前言 本期内容主要是为了学习如何通过 Docker 安装Jenkins&#xff0c;仅作为记录与参考&#xff0c;希望对大家有所帮助。 准备工作 系统&#xff1a;CentOS 7.9配置&#xff1a;4c8g 快速安装 下面以 Docker 方式安装 Jenkin…

告别单张保存!PPT 图片无损批量提取,这 3 种方法亲测有效!

告别单张保存!PPT 图片无损批量提取,这 3 种方法亲测有效! 谁懂啊!做 PPT 设计或者经常处理 PPT 的人,肯定遇到过这种崩溃场景:手里有个几百页的 PPT,每一页都插了好几张配图,要把这些图都弄出来用,只能一张张…

SQL Server从入门到项目实践(超值版)读书笔记 26 - 实践

SQL Server从入门到项目实践(超值版)读书笔记 26 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consola…

?模拟赛(2) 赛后总结

和昨天一样的 CCDD 。 如果说昨天的三个小时很充实的话,那今天的三个小时可以说是相当空虚了,因为什么也不会。 题目在这里!A 鲁的要塞去年做过,比今年还高 30 ,我真的要回去上 whk 了。 指挥中心的坐标一定是取 …