【优化fmd分解】PSA–fmd分解,PID搜索优化算法(PID-based search a...
【优化fmd分解】PSA–fmd分解,PID搜索优化算法(PID-based search algorithm, PSA,2023年12月发表在SCI人工智能一区顶刊《Expert Systems With Applications》,利用该算法优化fmd分解,做为一种创新点使用。这里有个精妙的设计:每次提取模态时,PSA会在参数空间里进行带记忆的搜索。比如在做FMD分解时,当算法发现当前参数组合
【优化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分解时既保持了算法核心的简洁,又留出了魔改空间。下次做信号分解卡在参数调优的坑里时,或许该试试这个带着控制论智慧的搜索算法了。
更多推荐
所有评论(0)