Python实现霸王龙优化算法(Tyrannosaurus Optimization Algorithm, TROA)(附完整代码)
Python实现霸王龙优化算法(Tyrannosaurus Optimization Algorithm, TROA)(附完整代码)
1.霸王龙优化算法(Tyrannosaurus Optimization Algorithm, TROA)
霸王龙优化算法(Tyrannosaurus Optimization Algorithm, TROA) 是一种受古生物学启发的新型元启发式优化算法,其灵感来源于白垩纪晚期顶级掠食者——霸王龙(Tyrannosaurus rex)的独特捕猎行为与生存策略。该算法通过模拟霸王龙的三种核心行为来指导搜索过程,以解决复杂的全局优化问题。
TROA的核心思想是将优化问题的解空间视为一个广阔的“狩猎场”,每个候选解代表一只霸王龙个体。算法的迭代过程主要模拟以下三种策略:
视觉捕猎(视觉搜索): 霸王龙拥有极佳的视力。在算法中,这体现为个体在其周围一个较大的视觉半径内进行局部精细搜索,以探索并利用当前区域的潜在最优解。
追逐猎物(全局探索): 当发现更优的猎物(更优解)时,霸王龙会迅速移动并进行追逐。此过程在算法中促使种群向全局范围内更有希望的区域进行探索,避免过早陷入局部最优,增强了算法的全局探索能力。
竞争与独占(竞争机制): 霸王龙是顶级掠食者,具有强烈的领地意识。算法通过模拟个体之间的竞争行为(如根据适应度值进行排序和竞争),让更强大的个体(更优解)占据主导地位并保留下来,而较弱的个体则被淘汰或学习强者的位置,从而引导整个种群向全局最优方向进化。
TROA的优势在于其概念新颖、参数较少、结构相对简单,且能有效平衡全局探索(通过追逐和竞争)与局部开发(通过视觉搜索)能力。它已被应用于多个领域,如工程设计、机器学习参数调优和经济调度等,并展现出与其他成熟优化算法(如粒子群优化PSO、遗传算法GA)相竞争的强大性能。该算法为元启发式家族提供了又一个基于“捕食者-猎物”模型的强大工具。
2. Python代码
import numpy as np
import matplotlib.pyplot as plt
import random# 定义目标函数: y = sum((x-0.5)^2)
def objective_function(x):"""计算目标函数值,即适应度值"""return np.sum((x - 0.5) ** 2)# 霸王龙优化算法类
class TyrannosaurusOptimization:def __init__(self, objective_func, dim=10, lower_bound=0, upper_bound=1,pop_size=30, max_iter=100, hunt_step=0.1, territory_range=0.3,attack_prob=0.3, wander_prob=0.2):"""初始化霸王龙优化算法参数参数:- objective_func: 目标函数- dim: 问题维度- lower_bound: 变量下界- upper_bound: 变量上界- pop_size: 种群规模(霸王龙数量)- max_iter: 最大迭代次数- hunt_step: 捕食步长- territory_range: 领地范围- attack_prob: 突袭概率- wander_prob: 漫游概率"""self.objective_func = objective_funcself.dim = dimself.lower_bound = lower_boundself.upper_bound = upper_boundself.pop_size = pop_sizeself.max_iter = max_iterself.hunt_step = hunt_stepself.territory_range = territory_rangeself.attack_prob = attack_probself.wander_prob = wander_prob# 初始化霸王龙位置self.positions = np.random.uniform(low=lower_bound, high=upper_bound,size=(pop_size, dim))# 计算初始适应度self.fitness = np.array([objective_func(pos) for pos in self.positions])# 记录最优解self.best_fitness_history = []self.best_position = Noneself.best_fitness = float('inf')self.update_best()# 记录每个霸王龙的领地中心self.territory_centers = self.positions.copy()def update_best(self):"""更新全局最优解"""current_best_idx = np.argmin(self.fitness)current_best_fitness = self.fitness[current_best_idx]if current_best_fitness < self.best_fitness:self.best_fitness = current_best_fitnessself.best_position = self.positions[current_best_idx].copy()self.best_fitness_history.append(self.best_fitness)def territory_patrol(self):"""领地巡视行为:在领地范围内活动"""for i in range(self.pop_size):# 在领地中心附近随机移动patrol_move = np.random.uniform(-self.territory_range, self.territory_range, self.dim)new_pos = self.territory_centers[i] + patrol_move# 边界处理new_pos = np.clip(new_pos, self.lower_bound, self.upper_bound)new_fitness = self.objective_func(new_pos)# 如果找到更优位置,更新位置和领地中心if new_fitness < self.fitness[i]:self.positions[i] = new_posself.territory_centers[i] = new_pos # 领地中心随最优位置迁移self.fitness[i] = new_fitnessdef prey_tracking(self):"""猎物追踪行为:向更优解方向移动"""# 找到当前最优个体(最佳猎物位置)best_idx = np.argmin(self.fitness)best_pos = self.positions[best_idx]for i in range(self.pop_size):if i != best_idx: # 非最优个体执行追踪行为# 计算与最优位置的方向向量direction = best_pos - self.positions[i]distance = np.linalg.norm(direction)if distance > 1e-6: # 避免除以零direction = direction / distance # 归一化方向# 向最优位置移动,步长随迭代衰减step = self.hunt_step * (1 - i / self.pop_size) # 差异化步长new_pos = self.positions[i] + step * directionnew_pos = np.clip(new_pos, self.lower_bound, self.upper_bound)new_fitness = self.objective_func(new_pos)if new_fitness < self.fitness[i]:self.positions[i] = new_posself.fitness[i] = new_fitnessdef surprise_attack(self):"""突袭行为:小概率进行远距离跳跃,增强全局搜索"""for i in range(self.pop_size):if random.random() < self.attack_prob:# 以当前位置为中心,进行较大范围的随机跳跃attack_move = np.random.uniform(-self.territory_range * 2, self.territory_range * 2, self.dim)new_pos = self.positions[i] + attack_movenew_pos = np.clip(new_pos, self.lower_bound, self.upper_bound)new_fitness = self.objective_func(new_pos)# 即使没有更优也有一定概率接受新位置,增加多样性if new_fitness < self.fitness[i] or random.random() < 0.1:self.positions[i] = new_posself.fitness[i] = new_fitnessdef random_wander(self):"""随机漫游:部分个体离开领地探索新区域"""for i in range(self.pop_size):if random.random() < self.wander_prob:# 随机生成新位置,模拟漫游到新区域new_pos = np.random.uniform(low=self.lower_bound, high=self.upper_bound, size=self.dim)new_fitness = self.objective_func(new_pos)# 更新位置和领地self.positions[i] = new_posself.territory_centers[i] = new_posself.fitness[i] = new_fitnessdef run(self):"""运行霸王龙优化算法进行优化"""for iter in range(self.max_iter):# 执行领地巡视self.territory_patrol()# 执行猎物追踪self.prey_tracking()# 执行突袭行为self.surprise_attack()# 执行随机漫游self.random_wander()# 更新最优解self.update_best()# 打印当前迭代信息if (iter + 1) % 10 == 0:print(f"迭代次数: {iter + 1}, 最优适应度: {self.best_fitness:.6f}")return self.best_position, self.best_fitness# 主函数
def main():# 设置随机种子,保证结果可复现np.random.seed(42)random.seed(42)# 定义问题参数dim = 10 # 10维问题lower_bound = 0 # 变量下界upper_bound = 1 # 变量上界# 创建霸王龙优化算法实例troa = TyrannosaurusOptimization(objective_function,dim=dim,lower_bound=lower_bound,upper_bound=upper_bound,pop_size=100,max_iter=500,hunt_step=0.08,territory_range=0.25,attack_prob=0.2,wander_prob=0.15)# 运行优化算法print("开始霸王龙优化算法优化...")best_position, best_fitness = troa.run()# 输出优化结果print("\n优化结果:")print(f"最优位置: {best_position}")print(f"最优适应度值: {best_fitness:.8f}")# 确保中文显示正常plt.rcParams["font.family"] = ["SimHei", "Arial Unicode MS", "sans-serif"]plt.rcParams["axes.unicode_minus"] = False # 解决负号显示问题# 绘制迭代曲线plt.figure(figsize=(10, 6))plt.plot(troa.best_fitness_history, 'r-', linewidth=2)plt.xlabel('迭代次数', fontsize=12)plt.ylabel('最优适应度值', fontsize=12)plt.title('霸王龙优化算法迭代曲线', fontsize=14)plt.grid(True)plt.show()# 保持窗口打开plt.ioff() # 关闭交互模式plt.show()if __name__ == "__main__":main()
3.程序结果
迭代次数: 490, 最优适应度: 0.000316
迭代次数: 500, 最优适应度: 0.000316
优化结果:
最优位置: [0.49791311 0.49131407 0.49140764 0.48941591 0.50290519 0.49458086
0.50239755 0.49844069 0.49821569 0.50117503]
最优适应度值: 0.00031620
4.代码、程序订制(MATLAB、Python)
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 回归预测 | 梯度提升决策树 | 大规模回归 |