• 榛子树搜索算法(Hazelnut tree search algorithm,HTS)附matlab代码


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

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

    🍊个人信条:格物致知。

    更多Matlab仿真内容点击👇

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

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

    ⛄ 内容介绍

    在本文中,提出了一种新颖的自然启发优化算法,榛子树搜索(HST),用于解决数值和工程优化问题。HST 是一种多智能体算法,可模拟在森林中寻找最佳榛子树的搜索过程。该算法由三个主要执行器组成:生长、果实散播和根系传播。在成长阶段,树木在共享资源上相互竞争,以成长并提高其健康度。在水果散播阶段,HTS 在动物和啮齿动物的帮助下,通过模拟榛子在森林周围的运动来进行探索。在根传播中,HTS 通过对周围树木的根传播机制进行建模来执行利用。在多变量无约束数值优化基准和约束工程问题上评估了所提出算法的性能。将所提出的算法与其他一些优化算法进行比较,可以看出 HTS 在解决问题的成功率和在大多数基准问题上找到全局最优值方面的优越性。

    ⛄ 部分代码

    function [x] = growth(Population, AlgorithmParams, ProblemParams, alpha, t)

    dmax = norm(ProblemParams.VarMax-ProblemParams.VarMin);

    maxCost=max(Population(:,end));

    sumCost=sum(Population(:,end));

    ProblemParams.dmax=dmax;

    ProblemParams.maxCost=maxCost;

    ProblemParams.sumCost=sumCost;

    for i=1:AlgorithmParams.NumOfTrees

        cored=Population(i,:);

        w1=unifrnd(alpha,alpha);

        g=(1-exp(-4*t/AlgorithmParams.NumOfYears)).*w1;

        R=cored(:,1:end-1)+g;

        

        r=rand;

        if r>=0.5

            x(i,:)=R;

        else

            landa=computeLanda(ProblemParams,AlgorithmParams,Population, i);

            x(i,:)=(1/(1+landa)).*R;

        end    

        x(i,:)=max(x(i,:),ProblemParams.VarMin);

        x(i,:)=min(x(i,:),ProblemParams.VarMax);

    end

    costs = feval(ProblemParams.CostFuncName,x);

    x(:,end+1) = costs;

    end

    function l=computeLanda(ProblemParams,AlgorithmParams,Population,i)

    fi=Population(i,end);

    coredTree=Population(i,:);

    if ProblemParams.maxCost>0

        nfi = 0.9*(ProblemParams.maxCost-fi)/ProblemParams.sumCost;

    else

        nfi = 0.7*max(ProblemParams.maxCost-fi)/ProblemParams.sumCost;

    end

    zi=round(nfi*(AlgorithmParams.NumOfTrees-1));    % Excluding individual i so the neighbors is selected from N-1 trees

    zi=min(zi, AlgorithmParams.NumOfTrees-1);

    temp=Population(1:end ~=i, :);       % For deleting individual i

    RandomIndex = randperm(AlgorithmParams.NumOfTrees-1);

    s=RandomIndex(1:zi);

    Ng=temp(s,:);

    landa=0;

    for j=1:zi

        dij=norm(coredTree(1,end-1)-Ng(j,1:end-1))/ProblemParams.dmax;

        fj=Ng(j,end);

        landa=landa+(fj/fi)*atan(fj/dij);

    end

    l=landa;

    end

    ⛄ 运行结果

    ⛄ 参考文献

    Emami, H. Hazelnut tree search algorithm: a nature-inspired method for solving numerical and engineering problems. Engineering with Computers (2021). https://doi.org/10.1007/s00366-021-01460-1

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

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

  • 相关阅读:
    一加手机 执行adb错误问题 需要权限
    轻松合并视频,一键为视频添加封面,打造个性化批量剪辑!
    计算机毕业设计Java牙科诊所管理系统(源码+系统+mysql数据库+Lw文档)
    shiro之AccessControlFilter()
    【MySQL】(五)DML表数据操作——数据的插入、修改、删除
    Java中的List
    欧拉角与旋转矩阵
    前端构建工具 代码优化压缩 模块管理 依赖管理 资源处理转换 自动化任务 流程优化 高级特性 Webpack Parcel Rollup Gulp 静态资源
    Moonbeam网络维护模式(Maintenance Mode)解读
    什么是Linux
  • 原文地址:https://blog.csdn.net/matlab_dingdang/article/details/127678170