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


    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) = 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;

    3 运行结果

    4 参考文献

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

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

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

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

  • 相关阅读:
    【操作系统】第一章:概述
    《Java》【速学】对象-多态
    MATLAB 的ICEEMDAN分解代码实现
    什么是单测
    前端Vue 页面滑动监听 拿到滑动的坐标值
    ES的测试连通性
    Python常用标准库(pickle序列化和JSON序列化)
    ajax图书管理项目
    C++ 如何把string转为int,如何把int转为string(字符串转为数字,数字转为字符串)
    如何有效记录日常开支
  • 原文地址:https://blog.csdn.net/qq_59747472/article/details/126445876