当前位置: 首页 > news >正文

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

 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_fragmentcurrent_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.dtcms.com/a/400379.html

相关文章:

  • 做wap网站django网站开发规范
  • 百度云网站建设视频甘肃兴城建设有限公司网站
  • 动态分配的UDP_TEST_EQUIPMENT_REQUEST端口
  • todesk远程时出现提示“正在等待对方手动授权”,需要关掉什么设置
  • 深圳网站建设公司佰达网站广告连接如何做
  • 给网站定位提供定制型网站建设
  • 01-基于FPGA和LTC2308的数字电压表设计(总概述)
  • 永川集团网站建设广州正规网站建设
  • 深入理解布隆过滤器
  • 为什么用asp做网站东阳网站建设
  • 【高频电子线路】课上知识点扩展
  • PyQt6+OpenCV 实战:打造功能完备的数字图像处理 GUI 系统
  • 开网站备案流程施工企业组织机构图
  • 特价流量网站网页制作软件免费版无需登录
  • 做暧暖爱视频1000部在线网站做网站的不给源文件
  • 门户网站导航建设方案wordpress 段子主题
  • AnolisOS8.8-没有messages文件
  • 易班网站建设基础云主机 多个网站
  • CARLA 0.9.15安装教程基础运行教程 打开场景地图、部署随机车流/人、部署本车
  • 企业网站建设解决方案报告论文成都建设网站的
  • 在回调函数中访问外部的 this:let that = this
  • 用腾讯云做淘宝客网站视频流程福建建设人才与科技发展中心网站
  • 响应式制作网站建设电商平台的营销方式
  • 做网站麻烦么怎么开一家网站开发公司
  • 网站建设解决方网站建设 中小企业
  • html课设做网站网站建设的业务员
  • 六安品牌网站建设电话吴忠住房和城乡建设网站
  • 怎样做化妆品网站网站公司做的网站有最字
  • 做哪个视频网站赚钱wordpress安卓版教程视频
  • 广东省省考备考(第一百零五天9.23)——判断推理(强化训练)