【优化fmd分解】PSA–fmd分解,PID搜索优化算法(PID-based search algorithm, PSA,2023年12月发表在SCI人工智能一区顶刊《Expert Systems With Applications》,利用该算法优化fmd分解,做为一种创新点使用。 具体如下图

最近实验室里有个有意思的算法在传阅——PID搜索优化算法(PSA),这哥们刚登上《Expert Systems With Applications》就把FMD分解玩出了新花样。传统优化算法调参数就像在迷宫里摸黑走,而PSA带着PID控制器的思维方式,愣是给参数搜索装上了导航仪。

先看段PSA的核心操作代码,感受下它的脾气:

class PSA:
    def __init__(self, obj_func, dim):
        self.Kp = 0.5  # 比例项系数
        self.Ki = 0.1  # 积分项系数  
        self.Kd = 0.3  # 微分项系数
        self.error_history = []

    def update_weights(self, current_error):
        self.error_history.append(current_error)
        if len(self.error_history) > 5:  # 滑动窗口
            self.error_history.pop(0)
        
        P = self.Kp * current_error
        I = self.Ki * sum(self.error_history)
        D = self.Kd * (current_error - self.error_history[-2]) if len(self.error_history)>=2 else 0
        
        return P + I + D  # 动态调整的搜索步长

这段代码藏着PSA的灵魂——用误差的过去、现在和未来趋势动态调整搜索步长。比如在做FMD分解时,当算法发现当前参数组合的残差突然增大(D项警觉),就会自动减小探索步长,防止错过潜在的最优解,这比固定步长的搜索机智多了。

【优化fmd分解】PSA–fmd分解,PID搜索优化算法(PID-based search algorithm, PSA,2023年12月发表在SCI人工智能一区顶刊《Expert Systems With Applications》,利用该算法优化fmd分解,做为一种创新点使用。 具体如下图

实战中把PSA套在FMD分解上的代码骨架长这样:

def optimized_fmd(signal):
    # 初始化分解参数
    modes = []
    residual = signal.copy()
    
    # PSA优化器上场
    psa = PSA(obj_func=calculate_sparsity, dim=3)  # 以稀疏度为优化目标
    
    while not stopping_criterion(residual):
        current_params = initialize_params()
        best_params = current_params
        
        for _ in range(psa.max_iter):
            candidate_params = current_params + psa.update_weights()
            if evaluate(candidate_params) < evaluate(best_params):
                best_params = candidate_params
                
        # 用优化后的参数做模态分解
        mode, residual = extract_mode(residual, best_params)
        modes.append(mode)
    
    return modes, residual

这里有个精妙的设计:每次提取模态时,PSA会在参数空间里进行带记忆的搜索。比如当处理信号中突然出现的高频分量时,积分项(I)会记住之前参数调整的方向,自动加强高频特征的捕捉能力,这个特性让FMD分解在非平稳信号处理中表现突出。

跑实验时发现个有趣现象:传统方法需要手动设置的分解层数,用PSA优化后算法能自己收敛。就像有个老司机在参数空间里自动换挡,遇到平缓信号段用大步长快速扫描,碰到复杂波动区域立刻切换小步长精雕细琢。这种自适应特性,大概就是PSA能登上顶刊的杀手锏吧。

不过也别把PSA当万能药,它在超高频信号处理时偶尔会"晕车"——PID参数如果没调好,搜索轨迹会出现震荡。这时候在代码里加个阻尼因子就稳了:

# 在update_weights方法里追加
damping_factor = 1 / (1 + abs(D))  # 根据微分项动态阻尼
return (P + I + D) * damping_factor

这种即插即用的模块化设计,让PSA在优化FMD分解时既保持了算法核心的简洁,又留出了魔改空间。下次做信号分解卡在参数调优的坑里时,或许该试试这个带着控制论智慧的搜索算法了。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐