基于教学优化算法(TLBO)求解TSP问题 (Matlab代码实现)

发布于:2022-11-14 ⋅ 阅读:(493) ⋅ 点赞:(0)

 📝个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现

💥1 概述

TLBO,由Rao等人在2011年提出的,是一种基于群体的启发式优化算法,不需要任何算法特定参数。这种方法模拟了传统的课堂教学过程。整个优化过程包括教师阶段和学习者阶段。在教师阶段,每个学生都向最优秀的个体进行学习。在学习阶段,每个学生都以随机的方式向其他学生学习。
基于教学的优化(TLBO)是一种模拟课堂教学过程的基于群体的优化方法。TLBO分为两部分。第一部分是°教师阶段”,即向教师学习;第二部分是“学习者阶段”,即通过学习者之间的互动进行学习。在TLBO中,种群被视为一类学习者。每个学习者代表优化问题的一个可能的解决方案,分数代表适应度值。老师被认为是迄今为止得到的最好的解决办法。

本文应用这一比较新的算法求解TSP这一老问题,并用Matlab代码实现。
 

📚2 运行结果

 

 部分代码:

%% TLBO Parameters
MaxIt = 500;         % Maximum Number of Iterations
nPop = 50;           % Population Size

%% Start 
% Empty Individuals
empty_individual.Position = [];
empty_individual.Cost = [];
empty_individual.Sol = [];

% Population Array
pop = repmat(empty_individual, nPop, 1);
% Initialize Best Solution
BestSol.Cost = inf;
% Population Members
for i = 1:nPop
pop(i).Position = unifrnd(VarMin, VarMax, VarSize);
[pop(i).Cost pop(i).Sol] = CostFunction(pop(i).Position);
if pop(i).Cost < BestSol.Cost
BestSol = pop(i);
end
end
% Best Cost Record
BestCosts = zeros(MaxIt, 1);

%% TLBO 
for it = 1:MaxIt
% Calculate Population Mean
Mean = 0;
for i = 1:nPop
Mean = Mean + pop(i).Position;
end
Mean = Mean/nPop;
% Select Teacher
Teacher = pop(1);
for i = 2:nPop
if pop(i).Cost < Teacher.Cost
Teacher = pop(i);
end
end

% Teacher Phase
for i = 1:nPop
% Create Empty Solution
newsol = empty_individual;
% Teaching Factor
TF = randi([1 2]);
% Teaching (moving towards teacher)
newsol.Position = pop(i).Position ...
+ rand(VarSize).*(Teacher.Position - TF*Mean);
% Clipping
newsol.Position = max(newsol.Position, VarMin);
newsol.Position = min(newsol.Position, VarMax);
% Evaluation
[newsol.Cost newsol.Sol] = CostFunction(newsol.Position);
% Comparision
if newsol.Cost<pop(i).Cost
pop(i) = newsol;
if pop(i).Cost < BestSol.Cost
BestSol = pop(i);
end
end
end

% Learner Phase
for i = 1:nPop
A = 1:nPop;
A(i) = [];
j = A(randi(nPop-1));
Step = pop(i).Position - pop(j).Position;
if pop(j).Cost < pop(i).Cost
Step = -Step;
end
% Create Empty Solution
newsol = empty_individual;
% Teaching (moving towards teacher)
newsol.Position = pop(i).Position + rand(VarSize).*Step;
% Clipping
newsol.Position = max(newsol.Position, VarMin);
newsol.Position = min(newsol.Position, VarMax);
% Evaluation
[newsol.Cost newsol.Sol] = CostFunction(newsol.Position);
% Comparision
if newsol.Cost<pop(i).Cost
pop(i) = newsol;
if pop(i).Cost < BestSol.Cost
BestSol = pop(i);
end
end
end
BestCosts(it) = BestSol.Cost;
% Iteration 
disp(['In ITR ' num2str(it) ': TLBO Cost Value Is = ' num2str(BestCosts(it))]);
% Plot Res
figure(1);
Plotfig(BestSol.Sol.tour,model);
end

%% ITR
figure;
plot(BestCosts, 'LineWidth', 2);
xlabel('ITR');
ylabel('Cost Value');
ax = gca; 
ax.FontSize = 12; 
ax.FontWeight='bold';
set(gca,'Color','k')
grid on;

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]王芬,杨媛.基于猎人猎物优化算法求解TSP问题[J].宁夏师范学院学报,2022,43(7):59-6371

🌈4 Matlab代码实现

本文含有隐藏内容,请 开通VIP 后查看