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

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法  神经网络预测 雷达通信  无线传感器

信号处理 图像处理 路径规划 元胞自动机 无人机  电力系统

⛄ 内容介绍

旅行商问题(Traveling Salesman Problem)是一个典型的组合优化问题,旅行商问题描述如下:给定 n 个城市及两两城市之间的距离,求一条经过各城市一次且仅一次的最逗路线。其图论描述为:

TSP 问题的求最优化解是很困难的。对于有着 n 个城市的 TSP问题,存在着(n-1)! /2 条可能的路径。随着城市数目 n 的增长,可能路径的数目以 n 的指数倍增加,如果使用穷举法搜索,需要考虑所以的可能情况,并两两比较,找出最优解,那么可搜索的路径及其距离之和的计算量将正比于 n! /2,算法的复杂度呈指数增长,人们把这类问题称为“NP 完全问题”。由于 TSP 具有实际应用价值,例如:城市管道铺设优化、物流等行业中的车辆调度优化、制造业中的切割路径优化以及电力系统配电网络重构等现实生活中的很多优化问题都可以归结为 TSP 模型来求解。

⛄ 部分代码

% These lines of code, solves the Travelling Salesman Problem (TSP)

% by Teaching Learning Based Optimization Algorithm (TLBO) algorithm. 

% By default, 20 points are made by "MakeModel.m鈥� file and you can 

% change it if you want. 

clc;

clear;

close all;

%% Problem 

model=MakeModel();

CostFunction=@(s) CostF(s,model);        % Cost Function

nVar=model.n;             % Number of Decision Variables

VarSize=[1 nVar];         % Decision Variables Matrix Size

VarMin=0;                 % Lower Bound of Variables

VarMax=1;                 % Upper Bound of Variables

%% 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;

⛄ 运行结果

⛄ 参考文献

[1]何湘竹.一种改进的基于教学与学的优化算法寻求解决旅行商务问题[J]. 中南民族大学学报:自然科学版, 2015, 34(4):5.

❤️ 关注我领取海量matlab电子书和数学建模资料

❤️部分理论引用网络文献,若有侵权联系博主删除

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值