正在加载中...

展开本页目录
算法教程TLBO-教学优化

TLBO-教学优化

No.209 · 在线教程

本项目实现的是 TLBO(Teaching-Learning-Based Optimization,教学优化)单目标连续优化版本,核心代码位于 TLBO-教学优化/core/calculator.py,界面调用链为 ui/tlboparamswidget.py -> ui/tl…

TLBO-教学优化

1. 方法概述

本项目实现的是 TLBO(Teaching-Learning-Based Optimization,教学优化)单目标连续优化版本,核心代码位于 TLBO-教学优化/core/calculator.py,界面调用链为 ui/tlbo_params_widget.py -> ui/tlbo_results_widget.py,结果导出由 utils/tlbo_exporter.py 完成。

项目支持两类问题来源:

  • benchmark:内置 sphere/rastrigin/ackley/rosenbrock/griewank
  • upload_surrogate:上传数据后训练随机森林代理,再在样本边界内搜索。

内部统一按单目标优化处理:

$$ \min_{\boldsymbol{x}\in\Omega} f(\boldsymbol{x}) \tag{1} $$

并支持 run_times 次独立运行,最终选出代表性最佳运行用于导出。

2. 问题定义与上传代理优化

上传模式下,项目先训练 RandomForestRegressor(n_estimators=300)

$$ \hat f(\boldsymbol{x})=\frac{1}{300}\sum_{b=1}^{300}T_b(\boldsymbol{x}) \tag{2} $$

若界面选择最大化,则 core/calculator.py 内部实际最小化的是

$$ \tilde f(\boldsymbol{x})=\sigma \hat f(\boldsymbol{x}), \qquad \sigma= \begin{cases} 1, & \text{min}\\ -1, & \text{max} \end{cases} \tag{3} $$

当结果导出时,再把 best_fitnesscurve_bestcurve_avg 恢复为真实方向。上传模式边界由样本逐维极值给出:

$$ l_j=\min_n x_j^{(n)}, \qquad u_j=\max_n x_j^{(n)} \tag{4} $$

3. 核心数学模型

3.1 初始化

对任意一次独立运行,初始种群按均匀分布生成:

$$ \boldsymbol{x}_i^{(0)}=\boldsymbol{l}+\boldsymbol{r}_i\odot(\boldsymbol{u}-\boldsymbol{l}), \qquad \boldsymbol{r}_i\sim U(0,1)^d \tag{5} $$

3.2 Teacher Phase

第 \(t\) 轮迭代时,教师个体取当前最优解:

$$ \boldsymbol{x}_{teacher}^{(t)} = \operatorname*{arg\,min}_{1\le i\le N} f(\boldsymbol{x}_i^{(t)}) \tag{6} $$

同时计算当前群体均值

$$ \boldsymbol{m}^{(t)}=\frac{1}{N}\sum_{i=1}^{N}\boldsymbol{x}_i^{(t)} \tag{7} $$

教学因子 tf 在代码中随机取 \(\{1,2\}\):

$$ \mathrm{TF}\in\{1,2\} \tag{8} $$

于是第 \(i\) 个学生在教学阶段按

$$ \boldsymbol{x}_{i,new} = \boldsymbol{x}_i+\boldsymbol{r}\odot\big(\boldsymbol{x}_{teacher}-\mathrm{TF}\,\boldsymbol{m}\big) \tag{9} $$

更新,其中 \(\boldsymbol{r}\sim U(0,1)^d\)。

3.3 Learner Phase

随后每个个体随机选择另一个不同个体 \(j\)。若当前个体不劣于对方,则

$$ \boldsymbol{x}_{i,new} = \boldsymbol{x}_i+\boldsymbol{r}\odot(\boldsymbol{x}_i-\boldsymbol{x}_j) \tag{10} $$

否则按

$$ \boldsymbol{x}_{i,new} = \boldsymbol{x}_i+\boldsymbol{r}\odot(\boldsymbol{x}_j-\boldsymbol{x}_i) \tag{11} $$

更新。

3.4 边界处理、贪婪接受与收敛曲线

无论是 Teacher 还是 Learner 阶段,新解都会先执行边界截断:

$$ \boldsymbol{x}_{i,new}\leftarrow \operatorname{clip}(\boldsymbol{x}_{i,new},\boldsymbol{l},\boldsymbol{u}) \tag{12} $$

然后采用贪婪接受:

$$ \boldsymbol{x}_i\leftarrow \begin{cases} \boldsymbol{x}_{i,new}, & f(\boldsymbol{x}_{i,new})\le f(\boldsymbol{x}_i)\\ \boldsymbol{x}_i, & \text{otherwise} \end{cases} \tag{13} $$

每轮记录最优与平均适应度:

$$ c_{best}^{(t)}=\min_i f(\boldsymbol{x}_i^{(t)}), \qquad c_{avg}^{(t)}=\frac{1}{N}\sum_{i=1}^{N} f(\boldsymbol{x}_i^{(t)}) \tag{14} $$

3.5 多次运行与最佳运行选择

若总共运行 \(R\) 次,则第 \(r\) 次使用随机种子

$$ \mathrm{seed}_r=\mathrm{seed}_0+r-1 \tag{15} $$

最终代表性最佳运行按最终最优值选择:

$$ r^\star= \begin{cases} \operatorname*{arg\,min}_{1\le r\le R} b_r, & \text{min}\\ \operatorname*{arg\,max}_{1\le r\le R} b_r, & \text{upload max} \end{cases} \tag{16} $$

其中 \(b_r\) 为第 \(r\) 次运行的最终最优值。

4. 算法流程

结合 core/calculator.pyui/tlbo_params_widget.pyui/tlbo_results_widget.pyutils/tlbo_exporter.py,本项目 TLBO 的流程为:

  1. 选择内置基准函数或 upload_surrogate
  2. 若为上传模式,则训练随机森林,并读取逐维样本边界。
  3. 对每次运行按式(5)初始化种群。
  4. 每轮先执行 Teacher Phase,对应式(6)至式(9)。
  5. 再执行 Learner Phase,对应式(10)与式(11)。
  6. 采用式(12)和式(13)进行截断与贪婪接受。
  7. 记录 curve_bestcurve_avg,并汇总全部运行历史。
  8. 按式(16)选出代表性最佳运行,导出 Excel、图表和复现脚本 repro_tlbo.py

5. 关键参数说明

  • pop_size:种群规模。
  • max_iter:最大迭代次数。
  • run_times:独立运行次数。
  • seed:基础随机种子。
  • problem_modebenchmarkupload_surrogate
  • target_column:上传模式目标列。
  • objective_direction:上传模式优化方向。

6. 评价指标与输出结果解释

utils/tlbo_exporter.py 最终导出的主要工作表包括:

  • Parameters:参数字典;
  • Processed_Info:处理后的边界与最优化方向说明;
  • Best_Summary:目标函数、最佳运行、best_fitnessmean_best_fitnessstd_best_fitness、耗时等;
  • Best_Solution:最佳解向量;
  • Run_Best:每次运行的最终最优值;
  • History_BestRun:代表性最佳运行的 best_fitness 曲线;
  • AvgFitness_BestRun:代表性最佳运行的平均适应度曲线;
  • History_AllRunsAvgFitness_AllRuns:全部运行历史;
  • Raw_Info:原始问题来源与上传前参数信息;
  • Charts:三张图的路径索引。

上传模式下还会额外导出 BoundsUploadedDataSurrogateMetrics。论文结果部分建议先以 Best_Summary 为主表汇报 best_fitness / mean_best_fitness / std_best_fitness 等统计量,再利用 History_BestRunAvgFitness_BestRun 解释代表性最佳运行的收敛过程,并用 History_AllRuns 支撑稳定性分析。Best_Solution 只保存决策变量向量,最优值应以 Best_Summary 为准;上传代理模式还应同步报告 SurrogateMetrics

7. 论文写作模板

可在论文方法部分表述为:

“本文采用教学优化算法(TLBO)进行单目标连续变量优化。算法在每一轮迭代中先执行 Teacher Phase,通过教师个体与群体均值之间的差异推动种群整体向优良区域移动;随后执行 Learner Phase,个体通过与随机同伴比较并朝更优方向学习实现局部改进。对于数据驱动问题,本文进一步基于上传样本训练随机森林代理模型,并在样本逐维边界内实施 TLBO 搜索。”

7.1 结果部分补充模板

若需把实验结果直接写入论文结果部分,可进一步表述为:

“表X给出了算法在当前问题上的最优目标值、平均最优值和标准差(如有多次独立运行),图X展示了收敛曲线变化。结果表明,该算法在迭代前期能够快速逼近优势区域,并在后期逐步趋于稳定,最终获得最优解 \(\boldsymbol{x}^*\) 及其对应目标值 \(f(\boldsymbol{x}^*)\)。对于上传代理优化场景,结合代理模型误差指标可认为该最优结果具有一定的数据驱动解释性。”

7.2 写作替换提示

为便于直接落稿,正文撰写时可将结果文件中的字段替换为以下论文措辞:

  • best_fitness 或结果汇总表中的最优值,可写为“最优目标函数值”或“最优适应度值”;
  • BestSolutionBestPositionBest_Solution最优解 等工作表,可统一写为“最优决策变量组合 \(\boldsymbol{x}^*\)”;
  • Convergence收敛曲线 等图表,可统一写为“算法收敛曲线图”;
  • SurrogateMetrics 可写为“代理模型训练误差与拟合优度指标”,如 RMSE、MAE、\(R^2\)。

7.3 可直接替换的论文结果段落

若需进一步直接落稿,可按以下模板替换其中的表号、图号和数值:

“由表X可知,该算法在[问题名称]上的最优目标值为 [best_fitness]。若进行了多次独立运行,则其平均最优值与标准差分别为 [mean_best_fitness] 和 [std_best_fitness]。由图X所示收敛曲线可见,算法在迭代前期快速逼近优势区域,后期逐渐趋于平稳,表现出较好的收敛性。最终得到的最优决策变量组合为 \(\boldsymbol{x}^*=[x_1^*,x_2^*,\ldots,x_d^*]\)。若采用上传代理优化模式,则结合 RMSE、MAE 和 \(R^2\) 等代理误差指标,可认为该优化结果具有一定的数据驱动可信度。”

8. 实现说明与注意事项

  • 本实现是单目标 TLBO,适合连续变量优化。
  • benchmark 模式始终按最小化执行;最大化能力仅在上传代理模式下通过式(3)的符号翻转实现。
  • curve_avg 是代码真实记录的群体平均适应度,可用于说明群体整体收敛趋势。
  • run_times=1,导出的 std_best_fitness 会固定为 0.0

9. 单篇终审补充

9.1 图题与表题对齐建议

  • Parameters 表可写为:表X TLBO 参数设置与问题配置。
  • Best_Summary 表可写为:表X TLBO 最优值与多次运行统计摘要。
  • Best_Solution 表可写为:表X TLBO 最优决策变量组合。
  • History_BestRun 表可写为:表X TLBO 代表性最佳运行收敛历史。
  • AvgFitness_BestRun 表可写为:表X TLBO 代表性最佳运行平均适应度历史。
  • History_AllRuns 表可写为:表X TLBO 全部运行最优值历史。
  • AvgFitness_AllRuns 表可写为:表X TLBO 全部运行平均适应度历史。
  • Charts 中的 convergence_best.png 建议写为:图X TLBO 代表性最佳运行收敛曲线。
  • Charts 中的 convergence_mean.png 建议写为:图X TLBO 多次运行均值收敛曲线。

9.2 终审说明

  • 该实现支持多次独立运行,因此正文可以写“平均最优值”和“标准差”,但应明确统计口径来自 Best_Summary,不是从 Best_Solution 反推。
  • Best_Solution 只保存最优解向量,不保存完整统计量;论文中最优目标值应以 Best_SummaryHistory_BestRun 末代值为准。
  • curve_avg 在代码中是真实记录的群体平均适应度,因此 AvgFitness_BestRunAvgFitness_AllRuns 可用于说明群体层面的收敛,而不只是个体最优值下降。
  • run_times=1std_best_fitness=0.0 属于实现行为,正文不要把这一结果表述成“算法稳定性已被多次运行验证”。

9.3 全量强化补充

本次全量强化优先绑定回归产物更集中的真实结果目录 具体的算法3/优化与多目标/TLBO-教学优化/results/tlbo_enhanced_regression_20260320_084351。该目录下主结果文件为 TLBO_results.xlsx,实际工作表为 ParametersProcessed_InfoBest_SummaryBest_SolutionRun_BestHistory_BestRunAvgFitness_BestRunHistory_AllRunsAvgFitness_AllRunsRaw_InfoCharts

当前主图文件位于 charts/avg_fitness_best.pngcharts/convergence_best.pngcharts/convergence_mean.png。相比很多散落的历史时间戳目录,这份 enhanced regression 目录结构更稳定,也更适合作为正文中的主证据引用对象。

repro_tlbo.py 的真实口径是 benchmark:objective = 'sphere'dim = 6lb = -20ub = 20pop_size = 24max_iter = 40run_times = 3seed = 42,并在当前目录调用 export_tlbo_results(res, out_dir)。因此 TLBO 当前绑定的是 benchmark 多次运行统计链路,而不是上传代理链路;正文若引用 Best_SummaryHistory_AllRunsAvgFitness_AllRuns,应明确这些统计来自 benchmark 三次运行结果。

10. 软件实现核查补充(2026-07)

本篇对应的软件源码目录是 具体的算法3/优化与多目标/TLBO-教学优化。软件实现支持优化模式和上传数据代理优化模式;上传模式通过数值表训练代理目标后执行教学优化。文档中的教师阶段、学生阶段、知识传递系数公式可以保留,但软件结果应以 TLBO_ParamsRun_SummaryHistory_MeanHistory_AllBest_SolutionCharts 为准。

当前较新的代表性目录为 results/TLBO-教学优化分析结果_20260517_144603-优化模式results/TLBO-教学优化分析结果_20260517_144614-上传数据代理优化。主工作簿通常包含 SummaryProblemTLBO_ParamsBoundsRun_SummaryHistory_MeanHistory_AllBest_SolutionCharts;上传模式额外包含 UploadedProblemUploadedDataSurrogateMetrics。与旧文相比,当前更适合按统一导出结构解释教学优化过程。

当前图表稳定输出为 TLBO_convergence_时间戳.png。复现代码位于 复现代码/优化模式/复现代码/上传数据代理优化/,上传模式输入副本为 repro_inputs/tlbo_sample.xlsx,复现结果进入 repro_outputs/。若正文引用上传代理模式,应把 SurrogateMetrics 与最优结果一起写。