目录
- 1.背景
 - 2.算法原理
 - 2.1算法思想
 - 2.2算法过程
 
- 3.结果展示
 - 4.参考文献
 - 5.代码获取
 
1.背景
2023年,Y Gao受到PID控制理论启发,提出了PID搜索算法(PID-based Search Algorithm, PSA)。

 
2.算法原理
2.1算法思想
PID算法是控制领域的经典算法,分为增量PID控制和位置PID控制,它通过偏差的比例(P)、积分(I)和微分(D)进行控制。PSA通过连续调整系统偏差将整个种群收敛到最优状态。

2.2算法过程
增量PID控制
计算系统偏差对于最小化问题,迭代次数t处的最佳个体x*(t)是对应于总体历史最小值的个体。多次迭代t的总体偏差ek(t):
  
      
       
        
         
          
          
           
            
            
              e 
             
            
              k 
             
            
           
             ( 
            
           
             t 
            
           
             ) 
            
           
             = 
            
            
            
              x 
             
            
              ∗ 
             
            
           
             ( 
            
           
             t 
            
           
             − 
            
           
             1 
            
           
             ) 
            
           
             − 
            
           
             x 
            
           
             ( 
            
           
             t 
            
           
             − 
            
           
             1 
            
           
             ) 
            
           
          
          
          
          
            (1) 
           
          
         
        
       
         \mathbf e_k(t)=\mathbf x^*(t-1)-\mathbf x(t-1)\tag{1} 
        
       
     ek(t)=x∗(t−1)−x(t−1)(1)
 为了便于计算和迭代更新:
  
      
       
        
         
          
          
           
            
            
              e 
             
             
             
               k 
              
             
               − 
              
             
               1 
              
             
            
           
             ( 
            
           
             t 
            
           
             ) 
            
           
             = 
            
            
            
              e 
             
            
              k 
             
            
           
             ( 
            
           
             t 
            
           
             − 
            
           
             1 
            
           
             ) 
            
           
             + 
            
            
            
              x 
             
            
              ∗ 
             
            
           
             ( 
            
           
             t 
            
           
             ) 
            
           
             − 
            
            
            
              x 
             
            
              ∗ 
             
            
           
             ( 
            
           
             t 
            
           
             − 
            
           
             1 
            
           
             ) 
            
           
          
          
          
          
            (2) 
           
          
         
        
       
         \mathbf{e}_{k-1}(t)=\mathbf{e}_k(t-1)+x^*(t)-x^*(t-1)\tag{2} 
        
       
     ek−1(t)=ek(t−1)+x∗(t)−x∗(t−1)(2)
 
PID调节
在现实问题中,比例、积分和微分因子会根据不同的情况和问题进行调整。当迭代次数为t时,PID调节的输出值Δu(t):
  
      
       
        
         
          
          
           
            
             
              
               
               
                 Δ 
                
               
                 u 
                
               
                 ( 
                
               
                 t 
                
               
                 ) 
                
               
                 = 
                
                
                
                  K 
                 
                
                  p 
                 
                
               
                 ⋅ 
                
                
                
                  r 
                 
                
                  2 
                 
                
               
                 ⋅ 
                
               
                 [ 
                
                
                
                  e 
                 
                
                  k 
                 
                
               
                 ( 
                
               
                 t 
                
               
                 ) 
                
               
                 − 
                
                
                
                  e 
                 
                 
                 
                   k 
                  
                 
                   − 
                  
                 
                   1 
                  
                 
                
               
                 ( 
                
               
                 t 
                
               
                 ) 
                
               
                 ] 
                
               
                 + 
                
                
                
                  K 
                 
                
                  i 
                 
                
               
                 ⋅ 
                
                
                
                  r 
                 
                
                  3 
                 
                
               
                 ⋅ 
                
                
                
                  e 
                 
                
                  k 
                 
                
               
                 ( 
                
               
                 t 
                
               
                 ) 
                
               
                 + 
                
                
                
                  K 
                 
                
                  d 
                 
                
               
                 ⋅ 
                
                
                
                  r 
                 
                
                  4 
                 
                
               
                 ⋅ 
                
               
                 [ 
                
                
                
                  e 
                 
                
                  k 
                 
                
               
                 ( 
                
               
                 t 
                
               
                 ) 
                
               
                 − 
                
               
                 2 
                
                
                
                  e 
                 
                 
                 
                   k 
                  
                 
                   − 
                  
                 
                   1 
                  
                 
                
               
                 ( 
                
               
                 t 
                
               
                 ) 
                
               
                 + 
                
                
                
                  e 
                 
                 
                 
                   k 
                  
                 
                   − 
                  
                 
                   2 
                  
                 
                
               
                 ( 
                
               
                 t 
                
               
                 ) 
                
               
                 ] 
                
               
              
             
            
           
          
          
          
          
            (3) 
           
          
         
        
       
         \begin{aligned}\Delta\mathbf{u}(t)=K_{p}\cdot\mathbf{r}_{2}\cdot[\mathbf{e}_{k}(t)-\mathbf{e}_{k-1}(t) ]+K_{i}\cdot\mathbf{r}_{3}\cdot\mathbf{e}_{k}(t)+K_{d}\cdot\mathbf{r}_{4}\cdot[\mathbf{e}_{k}(t)-2\mathbf{e}_{k-1}(t)+\mathbf{e}_{k-2}(t) ]\end{aligned}\tag{3} 
        
       
     Δu(t)=Kp⋅r2⋅[ek(t)−ek−1(t)]+Ki⋅r3⋅ek(t)+Kd⋅r4⋅[ek(t)−2ek−1(t)+ek−2(t)](3)
 其中r2、r3和r4是n行1列中从0到1的随机数的矢量;Kp、Ki和Kd分别是比例、积分和微分的调整系数,论文中分别设置为1、0.5和1.2。
 在传统的PID算法中,输出调节值为0意味着实际值在某个点上已经达到设定值。但是,随着时间的增加,如果不调整受控对象,则真实值很快将不等于设定值。因此,增加了一个称为零输出的条件因子,以防止算法陷入局部最优:
  
      
       
        
         
          
          
           
           
             o 
            
           
             ( 
            
           
             t 
            
           
             ) 
            
           
             = 
            
           
             ( 
            
           
             cos 
            
           
              
            
           
             ( 
            
           
             1 
            
           
             − 
            
           
             t 
            
           
             / 
            
           
             T 
            
           
             ) 
            
           
             + 
            
           
             λ 
            
            
            
              r 
             
            
              5 
             
            
           
             ⋅ 
            
           
             L 
            
           
             ) 
            
           
             ⋅ 
            
            
            
              e 
             
            
              k 
             
            
           
             ( 
            
           
             t 
            
           
             ) 
            
           
          
          
          
          
            (4) 
           
          
         
        
       
         \mathbf{o}(t)=(\cos(1-t/T)+\lambda\mathbf{r}_5\cdot\mathbf{L})\cdot\mathbf{e}_k(t)\tag{4} 
        
       
     o(t)=(cos(1−t/T)+λr5⋅L)⋅ek(t)(4)
 其中,r5是n行和d列中从0到1的随机数的矢量,λ是调整系数:
  
      
       
        
         
          
          
           
           
             λ 
            
           
             = 
            
            
             
             
               [ 
              
             
               ln 
              
             
                
              
             
               ( 
              
             
               T 
              
             
               − 
              
             
               t 
              
             
               + 
              
             
               2 
              
             
               ) 
              
             
               / 
              
             
               ln 
              
             
                
              
             
               ( 
              
             
               T 
              
             
               ) 
              
             
               ] 
              
             
            
              2 
             
            
           
          
          
          
          
            (5) 
           
          
         
        
       
         \lambda=\left[\ln(T-t+2)/\ln(T)\right]^2\tag{5} 
        
       
     λ=[ln(T−t+2)/ln(T)]2(5)
 λ随着t的增加而缓慢减小,这有前期算法充分探索。在后期,λ迅速下降,这有助于算法从探索转向开发。个体的更新都与Δu(t)和o(t)有关:
  
      
       
        
         
          
          
           
           
             x 
            
           
             ( 
            
           
             t 
            
           
             + 
            
           
             1 
            
           
             ) 
            
           
             = 
            
           
             x 
            
           
             ( 
            
           
             t 
            
           
             ) 
            
           
             + 
            
           
             η 
            
           
             ⋅ 
            
           
             Δ 
            
           
             u 
            
           
             ( 
            
           
             t 
            
           
             ) 
            
           
             + 
            
           
             ( 
            
           
             1 
            
           
             − 
            
           
             η 
            
           
             ) 
            
           
             ⋅ 
            
           
             o 
            
           
             ( 
            
           
             t 
            
           
             ) 
            
           
          
          
          
          
            (6) 
           
          
         
        
       
         \mathbf{x}(t+1)=\mathbf{x}(t)+\eta\cdot\Delta\mathbf{u}(t)+(1-\eta)\cdot\mathbf{o}(t)\tag{6} 
        
       
     x(t+1)=x(t)+η⋅Δu(t)+(1−η)⋅o(t)(6)
 其中,η是n行1列的矩阵:
  
      
       
        
         
          
          
           
           
             η 
            
           
             = 
            
            
            
              r 
             
            
              6 
             
            
           
             cos 
            
           
              
            
           
             ( 
            
           
             t 
            
           
             / 
            
           
             T 
            
           
             ) 
            
           
          
          
          
          
            (7) 
           
          
         
        
       
         \eta=\mathbf{r}_6\cos(t/T)\tag{7} 
        
       
     η=r6cos(t/T)(7)
流程图

伪代码

 
3.结果展示
使用测试框架,测试PSA性能 一键run.m
- 【智能算法】省时方便,智能算法统计指标——一键运行~
 
CEC2017-F6
 
 
 
4.参考文献
[1] Gao Y. PID-based search algorithm: A novel metaheuristic algorithm based on PID algorithm[J]. Expert Systems With Applications, 2023, 232: 120886.






![[渗透利器]全能工具=信息收集->漏洞扫描->EXP调用](https://img-blog.csdnimg.cn/img_convert/28a247f684de66df1111e3dcefadc0b5.png)












