受精群优化算法(Sperm Swarm Optimization,SSO)。该算法由hisham shehadeh等人于2021年提出,主要模拟了精子基于受精能动性而使卵子受精的过程。在自然状态下中,精子群从宫颈的低温区域向输卵管移动。在输卵管这个高温区域中,卵子正在等待群体受精。因此在算法中,精子对应搜索个体,而卵子则被认为是最佳的解决方案。该成果发表在SCI期刊Neural Computing and Applications上。目前在谷歌学术上共被引44次。
受精优化算法看作是一种可以应用于多维搜索空间的分布式行为算法。
通过模拟,每个个体的运动行为可以受到当前的最佳局部解或精子群的最佳全局解的影响。前一种解决方案可以通过任何精子基于特定的邻域来实现,因为每个个体都会记住自己过去的位置来确定新的位置。同时,后一种解决方案可以通过任何精子根据其与目标的位置来实现,因为这个解决方案将被与目标(卵子)非常接近的精子发现。在这个算法中,一个与目标位置非常接近的精子被称为赢家。
算法原理
(1)初始化阶段
MPA首先通过一组随机解作为初始化搜索空间,根据搜索空间限制的范围由如下公式产生初始解:
其中,D为速度阻尼因子,为0到1之间的随机数。Vi是精子的速度。pH_Rand1为pH值,它是一个在(7,14)范围内的随机数。
(2)精子目前的最佳解决方案
精子头部就像一个温度传感器,它更喜欢游向更高的温度(卵子的位置)。此外,精子继续寻找由卵子产生和释放的更高浓度的分子,这种引导被称为趋化性。从这些信息中,我们可以认识到,精子不会向后游到子宫颈,而是会转向更高的温度(卵细胞在输卵管中的位置)。在此基础上,可以将这个位置通过比较精子在x轴和y轴上的电流位置与存储在记忆中的精子过去的位置来实现。如果当前的位置优于过去的位置,则过去的位置可以被当前的位置替换。个人精子电流的最佳解可用如下式表示:
其中:sb_solution是迄今为止所达到的最佳解决方案,即精子最佳(sb_解决方案)。pH_Rand2:为pH值,它是一个在(7,14)范围内的随机数。Temp_Rand1:为面积温度,为一定范围内的随机数(35.1,38.5)。
(3)全局最佳值
全局最佳值被用来确定哪些精子的数据目前最接近目标(最后,这个精子将代表为赢家)。精子整体最佳值用如下式表示:
其中:sgb_solution[]:是迄今为止所有精子所获得的最佳解决方案,用精子全球最佳解决方案(sgb_solution)表示。pH_Rand3:为pH值,它是一个在(7,14)范围内的随机数。Temp_Rand2:为面积温度,它是在(35.1,38.5)范围内的一个随机数。current[]:为当前的最佳解,用下式表示。
式中,v[]为测量的精子速度,之前速度如下:
取pH和温度参数的对数,将这些值归一化为小值。这将有助于实现一个可接受的慢速度,以模拟真实精子的正常运动。
结果展示
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