基于教学的优化 (TLBO)
在考虑尽可能低的成本的同时,为给定系统的特定参数找到最佳值以满足所有设计要求的过程称为优化。优化问题可以在所有科学领域中找到。
一般来说,优化问题可以写成,
优化
受制于,
在哪里是目标,而和分别是等式和不等式约束。在 N=1 的情况下,称为单目标优化。当 N≥2 时,它成为一个多目标优化问题,其求解策略与单目标不同。本文主要关注单目标优化问题。
许多学者和研究人员开发了几种元启发式方法来解决复杂/未解决的优化问题。示例:粒子群优化、灰狼优化、蚁群优化、遗传算法、布谷鸟搜索算法等。
本文旨在介绍一种新的元启发式优化技术,称为基于教学的优化(TLBO)。
算法灵感:
基于教学学习的优化(TLBO)是一种基于群体的元启发式优化技术,它模拟教室环境以优化给定的目标函数,由 RV Rao 等人提出。在2011年。
在一个课堂上,老师付出辛勤劳动,让一个班的所有学生都受过教育。然后学习者与自己互动,以进一步修改和改进他们获得的知识。
该算法由两个阶段组成:
1)教师阶段
所有学生向老师学习,获得知识
2)学习者阶段
学生之间进行互动,相互分享知识
- 存储班级学生的数据结构
- 存储班级第 i 个学生的数据结构
数学模型
1)教学阶段
- 具有最小适应度值的学生被视为教师
- 这个阶段使用Xmean,其中Xmean是班上所有学生的平均值
- 新解生成方程:
- Xnew = X + r*(Xteacher – TF*Xmean) ( 1)
- 其中 TF 是教学因子,为 1 或 2(随机选择)
- 如果Xnew比X 好。然后用Xnew替换X
2)学习者阶段
- Xpartner:从班级中随机选择的同学
- 选择 Xpartner 进行互动和交流知识
- 新解生成方程
- 设 Xparter 的适应度为 Fpartner,X 的适应度为 F
- 如果(F < Fpartner ) ( 2)
- Xnew = X + r*(X – Xpartner )
- 别的
- Xnew = X – r*(X – Xpartner)
- d.如果Xne w 比X 好。然后用Xnew替换X
算法
- 问题参数:
- 维数 ( d )
- 下限 ( minx )
- 上限 ( maxx )
- 算法的超参数:
- 粒子数 ( N )
- 最大迭代次数( max_iter )
Step1: Randomly initialize Class of N students Xi ( i=1, 2, …, n)
Step2: Compute fitness value of all the students
Step3: For Iter in range(max_iter): # loop max_iter times
For i in range(N): # for each student
# Teaching phase-----------
Xteacher = student with least fitness value
Xmean = mean of all the students
TF ( teaching factor) = either 1 or 2 ( randomly chosen )
Xnew = class[i].position + r*(Xteacher - TF*Xmean)
# if Xnew < minx OR Xnew > maxx then clip it
Xnew = min(Xnew, minx)
Xnew = max(Xnew, maxx)
# compute fitness of new solution
fnew = fitness(Xnew)
# greedy selection strategy
if(fnew < class[i].fitness)
class[i].position = Xnew
class[i].fitness = fnew
# Learning phase------------
Xpartner = randomly chosen student from class
if(class[i].fitness < Xpartner.fitness):
Xnew = class[i].position + r*(class[i].position - Xpartner)
else
Xnew = class[i].position - r*(class[i].position - Xpartner)
# if Xnew < minx OR Xnew > maxx then clip it
Xnew = min(Xnew, minx)
Xnew = max(Xnew, maxx)
# compute fitness of new solution
fnew = fitness(Xnew)
# greedy selection strategy
if(fnew < class[i].fitness)
class[i].position = Xnew
class[i].fitness = fnew
End-for
End -for
Step 4: Return best student from class