简要分析了智能优化算法的研究现状,重点对“教学优化算法”作了描述,并分析了“教与学”算法的性能和优缺点;同时详细介绍了几种改进的算法学优化算法,对教教与学“优化算法的应用研究情况进行学教与学习”。最后,说明了当前“学与优化算法中存在的并学”“优化算法与”优化算法未来的研究方向。


clc;
clear;
close all;
warning('off');
%% Problem
model=CreateModel();
CostFunction=@(xhat) MyCost(xhat,model); % Cost Function
nVar=model.n*(model.n-1)/2; % 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 = 300; % Population Size
%% Initial
% Empty Structure for Individuals
empty_individual.Position = [];
empty_individual.Cost = [];
empty_individual.Sol=[];
% Initialize Population Array
pop = repmat(empty_individual, nPop, 1);
% Initialize Best Solution
BestSol.Cost = inf;
% Initialize 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
% Initialize Best Cost Record
BestCosts = zeros(MaxIt, 1);
%% TLBO Body
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) = 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) = newsol; if pop(i).Cost < BestSol.Cost BestSol = pop(i); end end end % Store Record for Current Iteration BestCosts(it) = BestSol.Cost; % Show Iteration Information disp(['In Iteration ' num2str(it) ': TLBO Best Cost Is = ' num2str(BestCosts(it))]); figure(1); PlotIt(BestSol.Sol,model); pause(0.01); end title('TLBO Minimum Spanning Tree'); %% Plot figure; semilogy(BestCosts,'k', 'LineWidth', 2); xlabel('Iteration'); ylabel('Best Cost'); grid on; [1]杨鹏. "融合简化粒子群的教与学优化算法." 河南师范大学学报:自然科学版 44.6(2016):6. [2]何学明, 苗燕楠, and 罗再磊. "基于教与学优化算法的PID控制器参数寻优." 计算机工程 41.8(2015):4. 部分理论引用网络文献,若有侵权联系博主删除。3 运行结果


4 参考文献
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。