基于运动编码粒子群MPSO优化算法的目标路径搜索matlab仿真

目录

一、MPSO算法的数学公式

二、MPSO算法的实现步骤

三、MPSO的核心程序

四、仿真结果


       基于运动编码粒子群优化(MPSO)的目标路径搜索算法是一种有效的路径规划方法,它通过模拟鸟群、鱼群等生物的社会行为,寻找最优的路径。该算法将粒子群的运动模型与粒子的位置、速度、加速度等运动学参数相结合,通过不断迭代更新粒子的位置和速度,寻找最优解。

一、MPSO算法的数学公式

MPSO算法的数学公式如下:

  1. 粒子的速度更新公式:
    v^t = wv^(t-1) + c1r1(pbest^t - present^t) + c2r2(gbest^t - present^t)(1)
    其中,v^t表示第t次迭代时粒子的速度;w表示粒子的惯性权重;c1和c2表示粒子的个体和群体加速常数;r1和r2表示[0,1]之间的随机数;pbest^t表示第t次迭代时粒子的个体最优位置;gbest^t表示第t次迭代时粒子群的全局最优位置;present^t表示第t次迭代时粒子的当前位置。

  2. 粒子的位置更新公式:
    x^t = x^(t-1) + v^(t)(2)
    其中,x^t表示第t次迭代时粒子的位置。

在MPSO算法中,粒子的运动轨迹不仅受到自身惯性的影响,还受到个体和群体行为的引导。其中,惯性权重w模拟了粒子保持自身速度和方向运动的趋势,个体和群体加速常数c1和c2模拟了粒子向个体最优和群体最优方向运动的趋势。随机数r1和r2模拟了粒子在运动过程中的随机性。

二、MPSO算法的实现步骤

MPSO算法的实现步骤如下:

  1. 初始化粒子群的位置和速度,设定惯性权重w、个体和群体加速常数c1和c2等参数。
  2. 计算每个粒子的适应度值,根据适应度值更新粒子的个体最优位置pbest和全局最优位置gbest。
  3. 根据公式(1)和公式(2)更新粒子的速度和位置。
  4. 判断是否达到终止条件,如达到则结束迭代,否则返回步骤2。
  5. 输出全局最优位置gbest以及对应的路径。

在实现过程中,需要注意以下几点:

  1. 适应度函数的设定:根据目标路径搜索问题的特点,设计合适的适应度函数,用于评估粒子的优劣。适应度函数应该能够充分考虑路径的长度、安全性、时间等因素。
  2. 粒子群的初始化:初始化粒子群的位置和速度,应该保证粒子群的多样性,避免过早陷入局部最优解。
  3. 惯性权重的选择:惯性权重w对粒子群的搜索能力有着重要影响。较小的w会使粒子更快地收敛到最优解附近,但可能会过早停止搜索;较大的w会使粒子在搜索过程中保持较大的步长,有利于探索更广阔的搜索空间,但可能会浪费时间在无效的搜索区域。需要根据具体情况进行调整。
  4. 个体和群体加速常数的选择:个体和群体加速常数c1和c2也影响着粒子群的搜索能力。较小的c1和c2会使粒子更倾向于向个体和群体最优位置靠近,有利于快速收敛到最优解,但可能会过早停止搜索;较大的c1和c2会使粒子更倾向于随机搜索,有利于探索更广阔的搜索空间,但可能会浪费时间在无效的搜索区域。需要根据具体情况进行调整。
  5. 终止条件的设定:根据问题的特点设定合适的终止条件,如最大迭代次数、最小适应度值等。

三、MPSO的核心程序

 

clc;
clear;
close all;

%% Create the search scenario

model = CreateModel(); % Create search map and parameters

CostFunction=@(x) MyCost(x,model);    % Cost Function

nVar = model.n;       % Number of Decision Variables = searching dimension of PSO = number of movements

VarSize=[nVar 2];   % Size of Decision Variables Matrix

VarMin=-model.MRANGE;           % Lower Bound of particles (Variables)
VarMax = model.MRANGE;          % Upper Bound of particles 

%% PSO Parameters

MaxIt=100;          % Maximum Number of Iterations

nPop=1000;           % Population Size (Swarm Size)

w=1;                % Inertia Weight
wdamp=0.98;         % Inertia Weight Damping Ratio
c1=2.5;             % Personal Learning Coefficient
c2=2.5;             % Global Learning Coefficient

alpha= 2;
VelMax=alpha*(VarMax-VarMin);    % Maximum Velocity
VelMin=-VelMax;                    % Minimum Velocity

%% Initialization

% Create an Empty Particle Structure
empty_particle.Position=[];
empty_particle.Velocity=[];
empty_particle.Cost=[];
empty_particle.Best.Position=[];
empty_particle.Best.Cost=[];

% Initialize Global Best
GlobalBest.Cost = -1; % Maximization problem

% Create an empty particle matrix, each particle is a solution (searching path)
particle=repmat(empty_particle,nPop,1);

% Initialization Loop
for i=1:nPop
    
    % Initialize Position
    particle(i).Position=CreateRandomSolution(model);
    
    % Initialize Velocity
    particle(i).Velocity=zeros(VarSize);
    
    % Evaluation
    costP = CostFunction(particle(i).Position);
    particle(i).Cost= costP;
    
    % Update Personal Best
    particle(i).Best.Position=particle(i).Position;
    particle(i).Best.Cost=particle(i).Cost;
    
    % Update Global Best
    if particle(i).Best.Cost>GlobalBest.Cost
        GlobalBest=particle(i).Best;
    end
    
end

% Array to Hold Best Cost Values at Each Iteration
BestCost=zeros(MaxIt,1);

%% PSO Main Loop
for it=1:MaxIt
    for i=1:nPop
                
        % Update Velocity
        particle(i).Velocity = w*particle(i).Velocity ...
            + c1*rand(VarSize).*(particle(i).Best.Position-particle(i).Position) ...
            + c2*rand(VarSize).*(GlobalBest.Position-particle(i).Position);
        
        % Update Velocity Bounds
        particle(i).Velocity = max(particle(i).Velocity,VelMin);
        particle(i).Velocity = min(particle(i).Velocity,VelMax);
        
        % Update Position
        particle(i).Position = particle(i).Position + particle(i).Velocity;
        
        % Update Position Bounds
        particle(i).Position = max(particle(i).Position,VarMin);
        particle(i).Position = min(particle(i).Position,VarMax);
        
        % Evaluation
        costP = CostFunction(particle(i).Position);
        particle(i).Cost = costP;

        % Update Personal Best
        if particle(i).Cost > particle(i).Best.Cost
            
            particle(i).Best.Position=particle(i).Position;
            particle(i).Best.Cost=particle(i).Cost;
            
            % Update Global Best
            if particle(i).Best.Cost > GlobalBest.Cost
                GlobalBest=particle(i).Best;
            end
            
        end
      
    end
    
    % Update Best Cost Ever Found
    BestCost(it)=GlobalBest.Cost;
    
    % Inertia Weight Damping
    w=w*wdamp;

    % Show Iteration Information
    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
end

%% Results

% Updade Map in Accordance to the Target Moves
targetMoves = model.targetMoves; % Number of Target Moves (Zero means static)
moveDir = DirToMove(model.targetDir); % Direction of the Target Movement
moveArr = targetMoves*moveDir;
updatedMap = noncircshift(model.Pmap, moveArr);
newModel = model;
newModel.Pmap = updatedMap;

% Plot Solution
figure(1);
path=PathFromMotion(GlobalBest.Position,model); % Convert from Motion to Cartesian Space 
PlotSolution(path,newModel);  

% Plot Best Cost Over Iterations
figure(2);
plot(BestCost,'LineWidth',2);
xlabel('Iteration');
ylabel('Best Cost');
grid on;
up2202

四、仿真结果

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/132675381