在youtube上依葫芦画瓢写了一个matlab的粒子群算法来实现多变量函数的优化,程序最终能输出迭代后的最优解,并以半对数坐标的形式展示出每一代的最优解。
对于不同的问题只需修改CostFunction(待优化的函数),nVar(待优化函数的变量个数),VarMin和VarMax(待优化函数变量的上下界)。种群数量nPop和最大迭代次数根据具体情况自行决定是否需要修改。Construction Coefficients的值的设置根据理论分析得来,一般无需改动。
clc;
clear;
close all;
%% Problem Definition
CostFunction = @(x) Sphere(x); %Cost Function 函数句柄相当于间接调用函数,遇到具体的问题就将这个损失函数换成自己需要的函数
nVar = 5; %Number of Unknown(Decision) Variables 根据自己定义的损失函数自行确定个数
VarSize = [1 nVar]; %Matrix Size of Decision Size 矩阵规模为1行nVar列
VarMin = -10; %Lower Bound of Decison Variables 每一个变量的下界,根据具体的问题自己设定
VarMax = 10; %Upper Bound of Decision Variables 每一个变量的上界,根据自己的问题自己设定
MaxVelocity = (VarMax-VarMin)*0.2;
MinVelocity = -MaxVelocity;
%% Parammeters of PSO
% Construction Coefficients
phi1 = 2.05;
phi2 = 2.05;
kappa = 1;
phi