弹靶搜索算法(Projectile-target search algorithm, PTS)

弹靶搜索算法(Projectile-target search algorithm, PTS)

弹靶搜索算法(PTS)是一种基于弹丸运动学的随机元启发式优化算法,用以解决现实世界中的复杂优化问题。
参考文献:Hiendro A. Projectile-target search algorithm: a stochastic metaheuristic optimization technique[J]. Int. J. Electr. Comput. Eng., 2019, 9(5): 3772-3778.
PTS算法的数学模型:
PTS算法有两个主要控制参数,以加快收敛和搜索过程,因此,它可以比任何其他优化算法更快地找到更好的全局最优值。
抛射模型: y ( x ) = x ⋅ tan ⁡ ( θ ) − g ⋅ x 2 2 v 2 sec ⁡ 2 ( θ ) y\left ( x \right ) =x\cdot \tan \left ( \theta \right ) -\frac{g\cdot x^{2} }{2v^{2} }\sec ^{2}\left ( \theta \right ) y(x)=xtan(θ)2v2gx2sec2(θ)
该博客主要分享PTS算法的代码,并带有中英文注释!
分享不易,喜欢的请大家点赞加收藏,谢谢!

PTS算法的主程序

% Projectile-target search algorithm (PTS)
% Reference: Projectile-target search algorithm: a stochastic metaheuristic optimization technique
% Code by Luzhenhui Yangtze University

function [ybest,abest,Convergence_curv]=PTS(NP,GMAX,La,Ha,D,fobj)
% 输入
% NP:算法种群个体数量
% GMAX:算法的最大迭代次数
% La:变量的取值下界
% Ha:变量的取值上界
% D:优化变量的维度
% fobj:目标函数
% 输出
% ybest:最优适应度值
% abest:最优个体的位置信息
% Convergence_curv:每一次迭代的最优值,用于后期的迭代收敛图像

% 算法参数的初始化
La=La.*ones(1,D); 
Ha=Ha.*ones(1,D); 
F=0.5; % 公式(6)
ybest = inf;
iter=1;

% 算法的种群初始化
for i=1:NP
    a(i,:)= La + rand(1,D).*(Ha - La);     % 公式(5)
end

% 算法主要的迭代步骤
while iter <= GMAX
    for i = 1:NP
        y(i) = fobj(a(i,:));
        if (y(i) < ybest)
            ybest = y(i);
            abest = a(i,:);
        end
    end
    indnp = (0:1:NP-1); 
    while (iter <= GMAX)
        aold = a; 
        ind = randperm(4); 
        r1 = randperm(NP); 
        indx = rem(indnp + ind(1),NP); 
        r2 = r1(indx + 1); 
        indx = rem(indnp + ind(2),NP);
        r3 = r2(indx + 1);
        ar1 = aold(r1,:); 
        ar2 = aold(r2,:); 
        ar3 = aold(r3,:); 
        vi = ar1 + F*(ar2 - ar3);      % 公式(6)
        for i = 1:NP
            ytemp = fobj(vi(i,:));
            if ytemp < ybest
                ybest = ytemp;
                abest = vi(i,:);
            end
        end
        for i=1:NP               % 边界处理
            Flag4ub = vi(i,:)>Ha;
            Flag4lb = vi(i,:)<La;
            vi(i,:)=(vi(i,:).*(~(Flag4ub+Flag4lb)))+Ha.*Flag4ub+La.*Flag4lb;
        end
        g = 9.81;
        q = 3;
        p = 1-iter*((1)/GMAX);
        v = 0.2;
        m = 10;
        k = p^q;
        for i=1:NP
            for j=1:D
                d = (abs(vi(i,j)^2-a(i,j)^2))^(1/3);
                v0 = v^2/(2*g);
                v1 = g/(2*v^2);
                v2 = g/(v^2);
                mm = k*((m*(d)+v1*(d)^2-v0)/(m+v2*d));
                if rand < 0.5
                    a(i,j) = abest(1,j)- mm;      % 公式(11)
                else
                    a(i,j) = a(i,1) + mm;         % 公式(12)
                end
            end
        end
        for i=1:NP                % 边界处理
            Flag4ub = a(i,:)>Ha;
            Flag4lb = a(i,:)<La;
            a(i,:)=(a(i,:).*(~(Flag4ub+Flag4lb)))+Ha.*Flag4ub+La.*Flag4lb;
        end
        Convergence_curv(iter)=ybest;
        iter=iter+1;
    end
end
end
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值