Python实现基于教学的优化器 (Teaching-Learning-Based Optimization, TLBO) (附完整代码)
Python实现基于教学的优化器 (Teaching-Learning-Based Optimization, TLBO) (附完整代码)
1.基于教学的优化器算法介绍
基于教学的优化器 (Teaching-Learning-Based Optimization, TLBO) 是一种模拟课堂教学过程的群体智能优化算法,由印度的R. V. Rao等人于2011年提出。它灵感来源于教师如何通过教学提高班级的整体成绩,以及学生之间如何通过相互学习共同进步。TLBO因其概念简单、参数少、收敛速度快和优化性能优异而受到广泛关注。
TLBO将优化问题视为一个学习过程,其中种群中的每个个体代表一个“学生”,而待优化的目标函数值则对应学生的“成绩”。整个算法过程主要分为两个核心阶段:“教师阶段”和“学习者阶段”。
教师阶段 (教学阶段):
在此阶段,种群中适应度最好的个体(即目标函数值最优的学生)被认定为“教师”。教师的目标是提高班级的平均水平。教师会根据当前班级的平均水平与自己水平的差距,进行知识传授。班级中的每位学生(即所有其他个体)将根据这个差距,并结合一定的随机性,来更新自己的知识(即解的位置)。其更新公式可简化为:X_new = X_old + r * (Teacher - T_F * Mean)
,其中r
为随机数,T_F
为教学因子,用于控制变化幅度。这个过程侧重于开发 (Exploitation),即在当前已知的优秀区域进行精细搜索。
学习者阶段 (互学阶段):
在此阶段,学生们不再仅仅依赖教师,而是通过彼此之间的随机交流来学习。每个学生会随机选择另一个不同的同学作为学习伙伴。如果伙伴的知识(成绩)比自己更优秀,则自己会向伙伴靠近;反之,则会远离。其更新公式为:如果f(X_partner) < f(X_i)
,则X_new = X_old + r * (X_partner - X_old)
,否则X_new = X_old + r * (X_old - X_partner)
。这个过程同时包含了探索 (Exploration) 和开发,增加了种群的多样性,有助于避免算法陷入局部最优。
TLBO算法的显著优点是其无需调整任何算法特定参数(如粒子群算法中的惯性权重,遗传算法中的交叉变异概率等),仅需要常见的种群大小和迭代次数。这极大地降低了使用者的调参负担,使其易于理解和实现。
2.Python代码
import numpy as np
import matplotlib.pyplot as plt# 定义目标函数: y = sum((x-0.5)^2)
def objective_function(x):"""计算目标函数值参数:x: 输入向量,形状为(n_dim,)或(n_pop, n_dim)返回:目标函数值,单个值或数组"""return np.sum((x - 0.5) ** 2, axis=-1)# 教学阶段
def teaching_phase(population, fitness, best_solution):"""执行TLBO算法的教学阶段参数:population: 当前种群,形状为(n_pop, n_dim)fitness: 种群中每个个体的适应度值,形状为(n_pop,)best_solution: 当前最优解,形状为(n_dim,)返回:经过教学阶段后的新种群"""# 计算班级平均值mean_solution = np.mean(population, axis=0)# 生成教学因子TF (取1或2的概率各为50%)tf = np.random.randint(1, 3) # 生成1或2# 对每个个体进行教学new_population = np.copy(population)for i in range(population.shape[0]):# 生成随机因子r = np.random.rand(population.shape[1])# 教学阶段的更新公式new_population[i] = population[i] + r * (best_solution - tf * mean_solution)return new_population# 学习阶段
def learning_phase(population, fitness):"""执行TLBO算法的学习阶段参数:population: 当前种群,形状为(n_pop, n_dim)fitness: 种群中每个个体的适应度值,形状为(n_pop,)返回:经过学习阶段后的新种群"""new_population = np.copy(population)n_pop = population.shape[0]for i in range(n_pop):# 随机选择另一个不同的个体jj = np.random.randint(n_pop)while j == i:j = np.random.randint(n_pop)# 比较适应度,决定学习方向if fitness[i] < fitness[j]:# 个体i优于个体j,个体j向i学习r = np.random.rand(population.shape[1])new_population[j] = population[j] + r * (population[i] - population[j])else:# 个体j优于个体i,个体i向j学习r = np.random.rand(population.shape[1])new_population[i] = population[i] + r * (population[j] - population[i])return new_population# 边界处理
def enforce_bounds(solution, bounds):"""确保解在指定的边界范围内参数:solution: 待处理的解bounds: 边界范围,形状为(n_dim, 2),每个维度的[下界, 上界]返回:处理后的解,确保每个维度都在边界范围内"""# 对每个维度检查并处理边界for i in range(len(solution)):if solution[i] < bounds[i, 0]:solution[i] = bounds[i, 0]elif solution[i] > bounds[i, 1]:solution[i] = bounds[i, 1]return solution# TLBO主函数
def tlbo(objective_func, bounds, n_dim, n_pop=50, max_iter=100):"""基于教学的优化器(TLBO)主函数参数:objective_func: 目标函数bounds: 边界范围,形状为(n_dim, 2)n_dim: 问题维度n_pop: 种群大小max_iter: 最大迭代次数返回:best_solution: 最优解best_fitness: 最优解对应的适应度值convergence_curve: 收敛曲线,记录每代的最优适应度"""# 初始化种群population = np.zeros((n_pop, n_dim))for i in range(n_dim):# 在每个维度上随机初始化种群population[:, i] = np.random.uniform(bounds[i, 0], bounds[i, 1], n_pop)# 计算初始适应度fitness = objective_func(population)# 找到初始最优解best_idx = np.argmin(fitness)best_solution = population[best_idx].copy()best_fitness = fitness[best_idx]# 记录收敛曲线convergence_curve = np.zeros(max_iter)# 主循环for iter in range(max_iter):# 教学阶段population_after_teaching = teaching_phase(population, fitness, best_solution)# 边界处理for i in range(n_pop):population_after_teaching[i] = enforce_bounds(population_after_teaching[i], bounds)# 评估教学阶段后的适应度fitness_after_teaching = objective_func(population_after_teaching)# 选择操作:保留较优的解for i in range(n_pop):if fitness_after_teaching[i] < fitness[i]:population[i] = population_after_teaching[i]fitness[i] = fitness_after_teaching[i]# 更新全局最优解current_best_idx = np.argmin(fitness)if fitness[current_best_idx] < best_fitness:best_solution = population[current_best_idx].copy()best_fitness = fitness[current_best_idx]# 学习阶段population_after_learning = learning_phase(population, fitness)# 边界处理for i in range(n_pop):population_after_learning[i] = enforce_bounds(population_after_learning[i], bounds)# 评估学习阶段后的适应度fitness_after_learning = objective_func(population_after_learning)# 选择操作:保留较优的解for i in range(n_pop):if fitness_after_learning[i] < fitness[i]:population[i] = population_after_learning[i]fitness[i] = fitness_after_learning[i]# 更新全局最优解current_best_idx = np.argmin(fitness)if fitness[current_best_idx] < best_fitness:best_solution = population[current_best_idx].copy()best_fitness = fitness[current_best_idx]# 记录当前迭代的最优适应度convergence_curve[iter] = best_fitness# 打印迭代信息if (iter + 1) % 10 == 0:print(f"迭代 {iter + 1}/{max_iter}, 最优适应度: {best_fitness:.6f}")return best_solution, best_fitness, convergence_curvedef main():"""主函数:设置参数并运行TLBO优化器"""# 设置问题参数n_dim = 10 # 10维问题bounds = np.array([[0, 1] for _ in range(n_dim)]) # 每个维度的范围都是[0, 1]# 设置TLBO参数n_pop = 50 # 种群大小max_iter = 100 # 最大迭代次数# 运行TLBO算法print("开始TLBO优化...")best_solution, best_fitness, convergence_curve = tlbo(objective_function, bounds, n_dim, n_pop, max_iter)# 输出优化结果print("\n优化完成!")print(f"最优解: {best_solution}")print(f"最优目标函数值: {best_fitness:.6f}")print(f"理论最优值: 0 (当所有x_i=0.5时)")# 确保中文显示正常plt.rcParams["font.family"] = ["SimHei", "Arial Unicode MS", "sans-serif"]plt.rcParams["axes.unicode_minus"] = False # 解决负号显示问题# 绘制收敛曲线plt.figure(figsize=(10, 6))plt.plot(range(1, max_iter + 1), convergence_curve)plt.title("TLBO算法收敛曲线")plt.xlabel("迭代次数")plt.ylabel("最优目标函数值")plt.grid(True)plt.show()# 保持窗口打开plt.ioff() # 关闭交互模式plt.show()if __name__ == "__main__":main()
3.程序结果
迭代 90/100, 最优适应度: 0.000221
迭代 100/100, 最优适应度: 0.000220
优化完成!
最优解: [0.50292693 0.49699494 0.500185 0.50019957 0.5007101 0.50040676
0.50553591 0.50100742 0.5001052 0.48694715]
最优目标函数值: 0.000220
理论最优值: 0 (当所有x_i=0.5时)
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 回归预测 | 梯度提升决策树 | 大规模回归 |