【优化求解】基于教与学算法优化最小生成树附matlab代码

发布于:2023-01-10 ⋅ 阅读:(502) ⋅ 点赞:(0)

1 内容介绍

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

2 仿真代码

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).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

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

3 运行结果

4 参考文献

[1]杨鹏. "融合简化粒子群的教与学优化算法." 河南师范大学学报:自然科学版 44.6(2016):6.

[2]何学明, 苗燕楠, and 罗再磊. "基于教与学优化算法的PID控制器参数寻优." 计算机工程 41.8(2015):4.

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

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


网站公告

今日签到

点亮在社区的每一天
去签到