⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 用于一维搜索的pso算法.txt

📁 实现最速下降法当中的一维搜索时候的最佳步长的确定。
💻 TXT
字号:
这是用来代替最速下降法中的黄金分割法的                                                                                  
虽然耗时较黄金分割法长,但是效果不是黄金分割法所能比较的                                                                 
毕竟PSO做一维搜索还是比较强悍的                                                                                         
function [afa] = pso1(fun,x0,d,a,b)                                                                                     
% 用于优化中的一维寻优PSO算法.                                                                                          
% 输入:                                                                                                                 
% fun  - 待优化函数句柄.                                                                                                
%  x0  - 当前待求最优步长点.                                                                                            
%   d  - 当前搜索方向.                                                                                                  
%   a  - 步长下限,应为0.                                                                                                
%   b  - 步长上限,通常为1.                                                                                              
% 输出:                                                                                                                 
% afa - 搜索到的最优步长.                                                                                               

particles = rand(10,1)*(b-a) + a;                                                                                       
velocity = rand(10,1);                                                                                                  
fitness = zeros(10,1);                                                                                                  
for i = 1:10                                                                                                            
    fitness(i) = feval(fun,x0+particles(i)*d);                                                                          
end                                                                                                                     
localP = particles;                                                                                                     
localF = fitness;                                                                                                       
[f,best] = min(fitness);                                                                                                
w = 0.5;                                                                                                                
for i = 1:20                                                                                                            
    velocity = w*velocity + 1.5*rand*(localP-particles) + ...                                                           
                            1.5*rand*(localP(best)-particles);                                                          
    particles = particles + velocity;                                                                                   
    for j = 1:10                                                                                                        
        if particles(j)>b                                                                                               
            particles(j) = b;                                                                                           
        elseif particles(j)<a                                                                                           
            particles(j) = a;                                                                                           
        end                                                                                                             
        fitness(j) = feval(fun,x0+particles(j)*d);                                                                      
        if fitness(j) < localF(j)                                                                                       
            localF(j) = fitness(j);                                                                                     
            localP(j) = particles(j);                                                                                   
        end                                                                                                             
    end                                                                                                                 
    [f,best] = min(fitness);                                                                                            
end                                                                                                                     
afa = particles(best);                                                                                                  
                                                                                                                        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -