当前位置: 首页 > java >正文

ACGRIME:用于全局优化和特征选择的自适应混沌高斯RIME优化器,附完整版免费代码

自然现象中,软冰的形成过程由 Set al. [42] 提出,软冰是空气中的过冷水滴在接触固体物体并冻结时形成的。这种现象发生在特定的气候条件下,当水蒸气尚未凝结时,导致冰覆盖的表面呈现出独特的树枝状和叶子状景观。它在软冰的生长和优化过程中,类似于冰的生长过程。它旨在模拟软冰的随机性和结构发展,将其转化为解决复杂问题的搜索策略。该算法主要由三种主要策略组成:软冰搜索策略、硬冰穿刺机制和正向贪婪选择机制。

(1) 软冰搜索策略

软冰搜索策略是RIME算法的探索阶段。它旨在模拟软冰在微风条件下的随机和扩展性增长。类似于这些冰粒子附着在表面上的方式,软冰搜索策略允许RIME算法中的个体代理在搜索空间内附着于潜在解。该策略通过动态更新机制实现,引导代理朝向最优解。

公式(1)在搜索空间中代理的位置更新机制中起着关键作用。该公式如下:

X i j n e w = X ( b e s t , j ) + r 1 × cos ⁡ ( θ ) × β (1) X_{ij}^{new} = X_{(best,j)} + r_1 \times \cos(\theta) \times \beta \tag{1} Xijnew=X(best,j)+r1×cos(θ)×β(1)

× [ h × ( U b j − L b j ) + L b j ] , r 2 < E \times [h \times (U_{bj} - L_{bj}) + L_{bj}], \quad r_2 < E ×[h×(UbjLbj)+Lbj],r2<E

其中随机分量 r 1 r_1 r1 h h h 通过引入代理运动的不确定性来促进探索,而对齐系数 E = ( t / T ) E = \sqrt{(t/T)} E=(t/T) 调节整个迭代过程中探索与开发之间的平衡。 cos ⁡ ( θ ) \cos(\theta) cos(θ) 与缩放因子 β \beta β 一起添加了定向变异性,有助于微调搜索过程中识别的有前景区域 X ( b e s t , j ) X_{(best,j)} X(best,j)。该方程体现了软冰搜索策略的本质,通过平衡随机游走特征的探索与向已知良好适应度区域的定向运动,类似于软冰在微风中积累的方式。

(2) 硬冰穿刺机制

硬冰穿刺机制是RIME算法中设计的一种方法,旨在加强当前已知最佳解附近的搜索。它类似于自然环境中硬冰通过快速冻结的过冷水滴在高风环境中形成固体表面沉积物的过程。公式(2)描述了这种穿刺机制:

X i j n e w = X ( b e s t , j ) , r 3 < F n o r m ( S i ) (2) X_{ij}^{new} = X_{(best,j)}, \quad r_3 < F^{norm}(S_i) \tag{2} Xijnew=X(best,j),r3<Fnorm(Si)(2)

在这种机制中,如果满足随机条件 r 3 = F n o r m ( S i ) r_3 = F^{norm}(S_i) r3=Fnorm(Si),则代理 i i i 的位置被积极更新为当前最佳解的位置。这代表了搜索空间中的穿刺,允许算法突破当前探索区域并汇聚到具有更高潜力的区域。硬冰穿刺类似于解的合并,更强的生长覆盖较弱的结构,从而通过促进算法向已知最佳解的收敛来增强算法的探索能力。

(3) 正向贪婪选择机制

正向贪婪选择机制是RIME算法中帮助选择最优秀代理的关键组成部分。受贪婪选择最佳可用选项概念的启发,该机制直接比较潜在解的适应度并采用更优者。它确保只有那些导致更好适应度值的更新被接受,因此术语为正向。这种正向贪婪方法确保代理种群不断朝着更好的适应度值移动,促进算法的总体收敛。与随机或概率选择方法不同,这种确定性策略通过在搜索过程中始终偏爱改进,确保朝着优化目标的稳步进展。

RIME算法的伪代码在算法1中呈现。算法的流程图如图1所示。
在这里插入图片描述

3.1 动机

根据NFL,没有优化算法对所有问题都表现最佳。该定理强调了开发适应性算法以解决特定问题特征的重要性。RIME算法,受冰的形成启发,在收敛性和搜索能力方面表现出色。然而,像许多其他MA一样,它在复杂场景中,如高维数据集中的FS,难以保持多样性并避免局部最优。为了解决这些挑战,我们提出了ACGRIME算法,它结合了三种策略:混沌理论、自适应权重和高斯突变。这些增强功能提高了算法在探索解空间时的能力,同时保持有效开发有前景区域的能力。混沌理论集成到ACGRIME中以引入不可预测性并防止过早收敛。混沌系统的基本原理,如逻辑映射产生的,避免了局部最优并确保了解空间的广泛探索。

另一方面,自适应权重动态调整探索和开发阶段在整个优化过程中的影响。它确保算法在初始阶段广泛探索搜索空间,并随着搜索进程的进行逐渐专注于开发找到的最佳解。进行动态调整的能力对于保持灵活性和响应性至关重要,使算法能够不断适应并提高性能。最后,高斯突变以其精确性而闻名,能够产生小的、受控的变化。通过利用高斯分布的特性,该策略引入了对当前解的微小、渐进的更改。这些小步骤对于解空间的详细搜索至关重要,使算法能够逐步细化和增强解决方案。高斯分布的窄而长尾特性有助于维持多样化的解池,解决全局优化任务中保持多样性的常见挑战。

此外,为了扩展ACGRIME在离散优化问题中的适用性,我们开发了其二进制形式(bACGRIME)。这种变体专门针对FS,提供了一种有效的方法来识别相关特征,同时保持或提高分类准确性。总体而言,ACGRIME算法旨在创建一个更强大的优化算法,能够解决更复杂的问题,提高收敛速度和平衡探索-开发动态。通过进行广泛的实验和与其他先进算法的比较,我们证明了ACGRIME和bACGRIME在这些领域中的有效性。

3.2 混沌理论

当应用于元启发式优化时,混沌理论作为一种机制来增强搜索过程,通过避免过早收敛并鼓励探索[69]。混沌系统的内在不可预测性使其适合于全面探索解空间。在ACGRIME中,混沌通过逻辑映射引入,这是一种迭代的、非线性动态系统,表现出混沌行为,对于某些参数值。

逻辑映射由公式(4)表示:

X n + 1 = μ X n ( 1 − X n ) (4) X_{n+1} = \mu X_n(1 - X_n) \tag{4} Xn+1=μXn(1Xn)(4)

其中 X n + 1 X_{n+1} Xn+1 是第 n + 1 n+1 n+1 次迭代的值, μ \mu μ 是控制参数。通过用随机起始值初始化混沌序列并将参数 τ \tau τ 设置为 4,算法利用逻辑映射的内在混沌动态来增强搜索过程。这种混沌序列被ACGRIME利用,以动态调整优化过程中的行为,确保在探索和开发之间保持平衡。

3.3 自适应权重

ACGRIME中的自适应权重策略是一种方法,用于随时间调制不同算法组件的影响。它旨在动态控制探索和开发阶段的影响,权重通常随着算法的进展而减少。这确保算法在初始阶段广泛探索搜索空间,并随着搜索进程的进行逐渐专注于开发找到的最佳解。类似的策略已成功应用于其他优化技术,如PSO中混沌惯性权重的使用来提高收敛速度和解决方案精度[70]。在ACGRIME的自适应权重策略中,混沌动态的应用模仿了这些成功策略。该策略用于修改和增强软冰搜索策略的性能。

权重通过依赖于优化过程阶段的自适应函数进行调整。

3.4 高斯突变

高斯突变在MA中被用作关键操作,以微调搜索最优解。起源于Back和Schwefel[71]的工作。高斯突变的本质在于其能够产生接近父实体的后代。这种接近性通过高斯分布的窄而长尾特性实现,允许进行增量、精确的变化。这些小步骤对于解空间内的详细搜索至关重要,它们有助于维持多样化的解池,这是全局优化任务中的常见挑战。

在ACGRIME算法中,高斯突变通过高斯密度函数实现,如公式(6)所示:

M g a u s s = X × ( 1 + r a n d ( 1 ) × k ) (6) M_{gauss} = X \times (1 + rand(1) \times k) \tag{6} Mgauss=X×(1+rand(1)×k)(6)

其中 X X X 是从逻辑映射派生的原始候选解向量,并为突变提供动态缩放因子,以确保突变强度在整个优化过程中变化。这种混沌动态的使用有助于通过提供非线性和不可预测的突变尺度,以及 rand ( 1 ) \text{rand}(1) rand(1) 生成均值为0、标准差为1的正态分布随机数,从而在突变步骤中添加更多随机性,从而在探索和开发之间实现更健康的平衡。

3.5 ACGRIME框架

本研究提出了RIME算法的改进版本,称为ACGRIME,通过整合混沌理论、自适应权重和高斯突变三种主要策略来增强RIME的收敛能力及其避免局部最优的能力。混沌理论的引入通过动态平衡优化过程中的探索和开发进一步增强了RIME,并使其能够适应搜索景观的变化。此外,高斯突变策略为种群引入了变异性和多样性。这种突变策略,受混沌动态影响,有助于防止停滞并维持解池的健康多样性。这在导航复杂、多模态景观时尤其关键,这些景观具有高风险收敛到次优解。

这些策略通过增强RIME算法的全局搜索能力和防止过早收敛的鲁棒性来改进原始RIME算法。ACGRIME算法通过逻辑映射和自适应权重策略结合混沌,使其能够适应搜索景观的变化。此外,高斯突变不断多样化搜索空间并增强解质量,帮助在探索和开发阶段之间保持平衡。因此,ACGRIME是一个更强大且适应性强的工具,用于解决复杂优化问题,如FS,并在速度和解决方案质量方面优于其前身。提供的伪代码在算法1中概述了ACGRIME算法的实现步骤。此外,图2展示了ACGRIME算法的清晰流程图。
在这里插入图片描述

function [Best_rime, Convergence_curve] = ACGRIME_v1(N, MaxFEs, lb, ub, dim, fobj)Best_rime = zeros(1, dim);Best_rime_rate = inf; % change this to -inf for maximization problemsRimepop = initialization(N, dim, ub, lb);Lb = lb .* ones(1, dim);Ub = ub .* ones(1, dim);FEs = 0; % Number of function evaluationsConvergence_curve = [];Rime_rates = zeros(1, N);newRime_rates = zeros(1, N);Time =1;ChaosValue = rand(); % Initial value for Logistic mapa = 4; % Parameter for Logistic mapfor i = 1:NRime_rates(1, i) = fobj(Rimepop(i, :));FEs = FEs + 1;if Rime_rates(1, i) < Best_rime_rateBest_rime_rate = Rime_rates(1, i);Best_rime = Rimepop(i, :);endendwhile FEs < MaxFEs% Apply Logistic map for chaosChaosValue = a * ChaosValue * (1 - ChaosValue);E = sqrt(ChaosValue * FEs/MaxFEs);newRimepop = Rimepop;normalized_rime_rates = normr(Rime_rates);w1 = (1-FEs/MaxFEs)^(1-tan(pi*(ChaosValue * rand-0.5))*FEs/MaxFEs); % Adaptive weightingfor i = 1:Nfor j = 1:dimr1 = rand();r2 = rand();r3 = rand();c1 = 2*exp(-(4*FEs/MaxFEs)^2);c2 = rand();if r2 < Eif c2 < 0.5newRimepop(i, j) = Best_rime(1, j) + w1 * c1 * ((Ub(j) - Lb(j)) * r1 + Lb(j));elsenewRimepop(i, j) = Best_rime(1, j) - w1 * c1 * ((Ub(j) - Lb(j)) * r1 + Lb(j));endendif r3 < normalized_rime_rates(i)newRimepop(i, j) = Best_rime(1, j);endend% Gaussian Mutationx = newRimepop(i, :);m_gaus = x * (1 + ChaosValue * randn(1));Flag4ub = m_gaus > ub;Flag4lb = m_gaus < lb;m_gaus = (m_gaus .* (~(Flag4ub + Flag4lb))) + ub .* Flag4ub + lb .* Flag4lb;m_gaus_fitness = fobj(m_gaus);fitness_s = fobj(x);m_gaus_fitness_comb = [m_gaus_fitness, fitness_s];[~, m] = min(m_gaus_fitness_comb);if m == 1newRimepop(i, :) = m_gaus;endendfor i = 1:NFlag4ub = newRimepop(i, :) > ub;Flag4lb = newRimepop(i, :) < lb;newRimepop(i, :) = (newRimepop(i, :) .* (~(Flag4ub + Flag4lb))) + ub .* Flag4ub + lb .* Flag4lb;newRime_rates(1, i) = fobj(newRimepop(i, :));FEs = FEs + 1;if newRime_rates(1, i) < Rime_rates(1, i)Rime_rates(1, i) = newRime_rates(1, i);Rimepop(i, :) = newRimepop(i, :);if newRime_rates(1, i) < Best_rime_rateBest_rime_rate = Rime_rates(1, i);Best_rime = Rimepop(i, :);endendendConvergence_curve(Time)=Best_rime_rate;Time=Time+1;end
end
http://www.xdnf.cn/news/3558.html

相关文章:

  • 65. Java 类和对象 - 创建和使用类与对象:摘要
  • [SoC]AXI总线Performance验证方案
  • 一天学完JDBC!!(万字总结)
  • 机器学习中的学习率及其衰减方法全面解析
  • 值此五一劳动节来临之际,
  • Java 入门:自定义标识符规则解析
  • ECMAScript 2(ES2):标准化的微调与巩固
  • STM32MP157开发板设置静态IP地址
  • stm32 HAI库 SPI(一)原理
  • spring-- 事务失效原因及多线程事务失效解决方案
  • spring中的@PostConstruct注解详解
  • 如何用Python绘制两个圆之间的8条公切线
  • 从原理到实战讲解回归算法!!!
  • FastAPI 与数据库交互示例
  • 集成Langfuse和Langchain:简化开发,增强自然语言理解能力
  • 解决“‘mvn‘ 不是内部或外部命令,也不是可运行的程序”错误
  • 5.2算法学习笔记(动态规划)
  • 书生实战营之沐曦专场
  • FHQ Treap
  • 蒙特卡罗方法(Monte Carlo Method)​​:基于随机采样的数值计算与模拟技术
  • WMO 介绍
  • 【Redis】List类型
  • AntSK:基于大模型的一体化AI知识库解决方案深度解析
  • 【JS压缩图片】js压缩图片至指定大小
  • MCP智能体意图识别与工具路由:让AI自主决策调用链路
  • 支持向量机(SVM)详解
  • Arduino逻辑控制详细解答,一点自己的想法记录
  • 2025A卷华为OD机试真题-数组二叉树(C++/Java/Python)-100分
  • 当神经网络突破摩尔定律:探索大模型时代的算力新纪元
  • ValueError: expected sequence of length 8 at dim 2 (got 0)