受精优化算法(SSO),原理公式详解,附matlab代码

受精群优化算法(Sperm Swarm OptimizationSSO)。该算法由hisham shehadeh等人于2021年提出,主要模拟了精子基于受精能动性而使卵子受精的过程。在自然状态下中,精子群从宫颈的低温区域向输卵管移动。在输卵管这个高温区域中,卵子正在等待群体受精。因此在算法中,精子对应搜索个体,而卵子则被认为是最佳的解决方案。该成果发表在SCI期刊Neural Computing and Applications上。目前在谷歌学术上共被引44次。

9afcf34eafec3b923fd5b240924592db.png

受精优化算法看作是一种可以应用于多维搜索空间的分布式行为算法。

通过模拟,每个个体的运动行为可以受到当前的最佳局部解或精子群的最佳全局解的影响。前一种解决方案可以通过任何精子基于特定的邻域来实现,因为每个个体都会记住自己过去的位置来确定新的位置。同时,后一种解决方案可以通过任何精子根据其与目标的位置来实现,因为这个解决方案将被与目标(卵子)非常接近的精子发现。在这个算法中,一个与目标位置非常接近的精子被称为赢家。

算法原理

(1)初始化阶段

MPA首先通过一组随机解作为初始化搜索空间,根据搜索空间限制的范围由如下公式产生初始解: 

24dee79621f5bf7872949aafc4359605.png

其中,D为速度阻尼因子,为01之间的随机数。Vi是精子的速度。pH_Rand1pH值,它是一个在(7,14)范围内的随机数。

(2)精子目前的最佳解决方案

精子头部就像一个温度传感器,它更喜欢游向更高的温度(卵子的位置)。此外,精子继续寻找由卵子产生和释放的更高浓度的分子,这种引导被称为趋化性。从这些信息中,我们可以认识到,精子不会向后游到子宫颈,而是会转向更高的温度(卵细胞在输卵管中的位置)。在此基础上,可以将这个位置通过比较精子在x轴和y轴上的电流位置与存储在记忆中的精子过去的位置来实现。如果当前的位置优于过去的位置,则过去的位置可以被当前的位置替换。个人精子电流的最佳解可用如下式表示:

c46151ef8f2233f4b545926b16bd9572.png

其中:sb_solution是迄今为止所达到的最佳解决方案,即精子最佳(sb_解决方案)。pH_Rand2:为pH值,它是一个在(7,14)范围内的随机数。Temp_Rand1:为面积温度,为一定范围内的随机数(35.1,38.5)。

(3)全局最佳值

全局最佳值被用来确定哪些精子的数据目前最接近目标(最后,这个精子将代表为赢家)。精子整体最佳值用如下式表示:

6150b0cea4a9e0461cdfe369ec58cfa2.png

其中:sgb_solution[]:是迄今为止所有精子所获得的最佳解决方案,用精子全球最佳解决方案(sgb_solution)表示。pH_Rand3:为pH值,它是一个在(7,14)范围内的随机数。Temp_Rand2:为面积温度,它是在(35.1,38.5)范围内的一个随机数。current[]:为当前的最佳解,用下式表示。

b19f362a767ceca291a13c08496bb824.png

式中,v[]为测量的精子速度,之前速度如下:

adf018484f4b5161cc9d2a8f5ee78579.png

pH和温度参数的对数,将这些值归一化为小值。这将有助于实现一个可接受的慢速度,以模拟真实精子的正常运动。


结果展示

a2361b93af4c2193e94563c6b7684f97.png

66e41bd98689f49523598f2792fac754.png

fa647f5269273c00fae3284ababf1051.png

88ca0c19007519d44a694429e69c5f28.png

a924bd197c816cd8a4f7a4d7a3dd75be.png

 MATLAB核心代码

function
function [BestSol,bestfits]=FOA(nPop,MaxIt,v_min,v_max,nVar,CostFunction)
v_size = [1 nVar]; % Decision Variables Matrix Size
%% Initialization
% Empty Plant Structure
empty_sperm.Position = [];
empty_sperm.velocity = [];
empty_sperm.Cost = [];
sperm = repmat(empty_sperm, nPop, 1);    % Initial Population Array
for i = 1:nPop    
    % Initialize Position
    sperm(i).Position = unifrnd(v_min, v_max, v_size); 
    sperm(i).velocity = sperm(i).Position;
    % Evaluation
    sperm(i).Cost = CostFunction(sperm(i).Position);    
end
% Initialize Best Cost History
bestfits = zeros(MaxIt, 1);
%% IWO Main Loop
x=1;
d=0.95;
% for it = 1:MaxIt  
for it=1:MaxIt
     newsperm = [];    
        for i = 1:nPop
            % Initialize new sperm
           K= (sperm(1).Position+sperm(round(nPop/2)).Position+sperm(end).Position)/3;           
            newsol = empty_sperm;
            L = Levy(nVar);  
            newsol.velocity =  exp(-1/x)*sperm(i).velocity; 
            ds=L.*(sperm(i).Position-sperm(i).velocity);             
            newsol.Position = sperm(i).Position - newsol.velocity+ds-K;           
            newsol.Position = max(newsol.Position, v_min);
            newsol.Position = min(newsol.Position, v_max);                
            newsol.Cost = CostFunction(newsol.Position);        
        % Add new sperm to the Population
            newsperm = [newsperm
                      newsol];  %#ok                       
        end
    % Merge Populations
    sperm = [sperm
           newsperm ];    
    % Sort Population
    [~, SortOrder]=sort([sperm.Cost]);
    sperm = sperm(SortOrder);


    % Competitive Exclusion (Delete Extra Members)
    if numel(sperm)>nPop
        sperm = sperm(1:nPop);
    end    
    % Store Best Solution Ever Found
    BestSol = sperm(1);    
    % Store Best Cost History
    bestfits(it) = BestSol.Cost;
    x=x*d;
    % Display Iteration Information    
% 
% disp(['It ' num2str(it) ': Best Cost = ' num2str(bestfits(it))]);
end
end

参考文献

[1]  Shehadeh H A. A hybrid sperm swarm optimization and gravitational search algorithm (HSSOGSA) for global optimization[J]. Neural Computing and Applications, 2021, 33(18): 11739-11752.

完整代码获取方式:后台回复关键字:

TGDM101

  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天吃饺子

不想刀我的可以选择爱我

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值