四向量智能元启发式优化算法(Four vector intelligent metaheuristic,FVIM)是一种人工智能优化元算法。FVIM解决了优化问题中存在的常见挑战,例如收敛置换、局部最优捕获和最优路径识别,以及现实世界优化器遇到的困难。
FVIM算法的独特之处在于它利用群中的四个最佳点来决定群的运动。此外,它引入了一个新的矢量位置,计算为四个优越点的平均值,可能为先前确定的那些提供更好的解决方案。该方法提高了粒子在搜索空间内的搜索能力,增强了群粒子的探索和利用能力,提高了识别全局最优的可能性,同时避免了局部最小值。
该成果于2024年发表在计算机领域三区SCI期刊“Computing”上,具有很强的创新性。
![4f795fd055ead14337fc0f15ad72820b.png](https://img-blog.csdnimg.cn/img_convert/4f795fd055ead14337fc0f15ad72820b.png)
1、算法原理
FVIM优化过程包括三个主要阶段,这些阶段支配着FVIM的运行,如下所示:
(1)初始化阶段
在此阶段定义并随机初始化基本FVIM参数。为了保持效率,FVIM为每个问题设置了上限和下限。根据优化问题的复杂度、大小、维度等特征,确定算法迭代次数和算法使用的粒子数。将基线适应度值设为0,以考察各种解决方案的有效性。一些变量初始化为极值,以确保算法的灵活性,使其能够同时处理最小化和最大化问题。
(2)迭代阶段
这一阶段是FVIM的核心,驱动优化过程,目的是引导粒子按照提出的运动方程运动,向全局最优值收敛。因此,迭代过程被编排为持续进行,直到满足特定的停止条件;此时,迭代步骤被中断。
(3)寻找最优解阶段
在这一阶段,FVIM通过系统地将得到的解与目标函数中规定的值进行比较来确定问题的最优解。算法的有效性在这个阶段达到顶峰,在这个阶段,它找到了与优化过程的既定目标一致的最佳解决方案。
如图所示,对于更多细节,在FVIM算法步骤中概述了所有上述三个阶段。
![2b671cb33b16d1fb3adaf9c1df51be59.png](https://img-blog.csdnimg.cn/img_convert/2b671cb33b16d1fb3adaf9c1df51be59.png)
与其他优化算法一样,FVIM算法中的迭代次数取决于问题。很少的迭代可能会过早地结束搜索,使算法无法进行详细的探索。另一方面,太多的迭代可能在计算上是昂贵的,特别是如果唯一的停止点是达到迭代计数。然而,FVIM提出并利用不同的数学模型来管理搜索代理的行为,定位更新机制结合了影响每个代理的搜索方向和优化过程中的步骤的多个元素,如以下提出的等式中所解释的:
其中Xn,i表示i维中第n个最佳代理的更新位置。Pn,i是i维中第n个最佳代理的当前位置。Pi表示i维中所有智能体的当前平均位置。λ是自适应系数。使用随机数ζ1和ζ2将随机性引入算法,确保代理探索搜索空间的不同区域,而不是陷入局部极小值。随机性保证了代理群体之间的多样性,并通过防止过早收敛来增强搜索过程。此外,自适应系数缩放更新步长。这个系数可以在迭代过程中减小,从而允许算法在初始阶段进行更大的跳跃以进行更好的探索,并在后期阶段进行更小的跳跃以进行细粒度的开发。搜索引擎的自适应特性平衡了探索和利用之间的权衡,确保了更有效的搜索策略。
此外,在FVIM算法中,通过桥接探索和利用之间的差距,将α用于与PSO的惯性权重(W)相同的目的。探索是指算法在搜索潜在最优值时探测各个区域的能力。同时,开发侧重于在有希望的区域内改进搜索,以提高解决方案的质量。当智能体接近最优解时,最小值线性减小。最初,在FVIM初始化阶段,为了探索更宽的搜索空间,α具有1.5的实质值。然而,随着FVIM接近最佳点以转向开采,其逐渐减小到零,如下式所描绘。
α的意义在于它在探索与融合之间起到了平衡的作用。过大的α会增加迭代过程中的步长,导致群远离最优区域。相反,过小的α以牺牲勘探为代价,优先考虑局部微调。然而,确定理想的步长取决于问题的性质。
2、计算复杂度分析
每种算法的特点是计算复杂度,这决定了它的执行时间、资源需求和相关成本。FVIM的计算复杂度取决于不同的过程。需要注意的是,n表示群体中的智能体数量,dim表示问题维度,r表示迭代次数,c表示目标函数的计算代价,初始化过程的计算复杂度为O(1)。
考虑n个智能体和d个维度,种群初始化的计算复杂度为O(n × d)。对于在r次迭代和n个代理上评估目标函数,计算复杂度为O(r × c × n)。四运动更新的计算复杂度要求恒定时间操作O(1)。如式所示,更新过程单次迭代(r = 1)的计算复杂度为:
4因子来源于四运动更新方程。此外,平均机制的计算复杂度对于每个维度每个agent也需要O(1),如下式所示:
然后,将运动更新得到的计算复杂度与r = 1时的平均步长相结合,如下式所示:
外推r次迭代,总体复杂度如下式所示为:
因此,FVIM的累积计算复杂度可表示为下式:
因此,FVIM表现出多项式阶的计算复杂度,使其成为一种计算有效的优化任务算法。
FVIM算法伪代码如下所示。
![c958dd2525b532ce7533f52a5a7ee1d2.png](https://img-blog.csdnimg.cn/img_convert/c958dd2525b532ce7533f52a5a7ee1d2.png)
3、结果展示
4、MATLAB核心代码
%% 淘个代码 %%
% 微信公众号搜索:淘个代码,获取更多代码
% 四向量智能元启发式优化算法(Four vector intelligent metaheuristic,FVIM)
%%
function [bstVal, fstPos, sndPos, thrdPos, frthPos, convCurve, traj, fitHist, posHist] = FVIM(pNum, maxIter, lb, ub, dim, costFunc)
% Initialize solutions
fstPos = zeros(1, dim);
fstVal = inf;
sndPos = zeros(1, dim);
sndVal = inf;
thrdPos = zeros(1, dim);
thrdVal = inf;
frthPos = zeros(1, dim);
frthVal = inf;
bstVal = inf;
alpha = 1.5;
deltaPos1 = zeros(1, maxIter);
fit1 = zeros(1, pNum);
fitHist = zeros(pNum, maxIter);
posHist = zeros(pNum, maxIter, dim);
traj = zeros(pNum, maxIter);
% Initialize particle positions
meanPos = initialization(pNum, dim, ub, lb);
convCurve = zeros(1, maxIter);
iter = 0;
% Main loop
while iter < maxIter
iter = iter + 1;
for i = 1:size(meanPos, 1)
% Handle boundary conditions
ubFlag = meanPos(i,:) > ub;
lbFlag = meanPos(i,:) < lb;
meanPos(i,:) = meanPos(i,:) .* ~(ubFlag + lbFlag) + ub .* ubFlag + lb .* lbFlag;
% Evaluate fitness
fit = costFunc(meanPos(i,:));
updateSolutionHierarchy(fit, meanPos(i,:));
% Store fitness and positions
fit1(i) = fit;
fitHist(i, iter) = fit;
posHist(i, iter, :) = meanPos(i,:);
traj(:, iter) = meanPos(:, 1);
end
% Update positions
alpha = alpha - 0.004;
for i = 1:pNum
for j = 1:dim
r3 = rand();
X1 = updatePosition(fstPos(j), meanPos(i,j), alpha,r3);
r3 = rand();
X2 = updatePosition(sndPos(j), meanPos(i,j), alpha,r3);
r3 = rand();
X3 = updatePosition(thrdPos(j), meanPos(i,j), alpha,r3);
r3 = rand();
X4 = updatePosition(frthPos(j), meanPos(i,j), alpha,r3);
meanPos(i,j) = (X1 + X2 + X3 + X4) / 4;
end
end
updateBestValue();
convCurve(iter) = bstVal;
end
function updateSolutionHierarchy(fitness, position)
if fitness < fstVal
[frthVal, thrdVal, sndVal, fstVal] = deal(thrdVal, sndVal, fstVal, fitness);
[frthPos, thrdPos, sndPos, fstPos] = deal(thrdPos, sndPos, fstPos, position);
elseif fitness < sndVal
[frthVal, thrdVal, sndVal] = deal(thrdVal, sndVal, fitness);
[frthPos, thrdPos, sndPos] = deal(thrdPos, sndPos, position);
elseif fitness < thrdVal
[frthVal, thrdVal] = deal(thrdVal, fitness);
[frthPos, thrdPos] = deal(thrdPos, position);
elseif fitness < frthVal
frthVal = fitness;
frthPos = position;
end
end
function X = updatePosition(best, current, a, r3)
if r3<0.5
X = best + (a * 2 * rand() - a) * abs(rand() * best - current);
else
X = best - (a * 2 * rand() - a) * abs(rand() * best - current);
end
end
function updateBestValue()
bstVal = min([bstVal, fstVal, sndVal, thrdVal, frthVal]);
end
end
参考文献
[1]Fakhouri H N, Awaysheh F M, Alawadi S, et al. Four vector intelligent metaheuristic for data optimization[J]. Computing, 2024: 1-39.
完整代码获取
后台回复关键词:
TGDM834
获取更多代码:
或者复制链接跳转:
https://docs.qq.com/sheet/DU3NjYkF5TWdFUnpu