Matlab自带的粒子群优化算法函数particleswarm

Dear-linko 204 0 本文共2159个字

particleswarm函数

温馨提示

1.这个函数在R2014b版本后推出,之前的老版本Matlab中不存在。
2.这个函数是求最小值的,如果目标函数是求最大值则需要添加负号从而转换为求最小值。

particleswarm函数示例

本文以求函数y = x1^2+x2^2-x1*x2-10*x1-4*x2+60在[-15,15]内的最小值为例!

function y = Obj_fun2(x)  
    y = x(1)^2 + x(2)^2 - x(1)*x(2) - 10*x(1) - 4*x(2) + 60; % 千万别写成了x1
end

particleswarm函数求解

clear;clc;
narvs = 2; % 变量个数
x_lb = [-15 -15]; % x的下界(
x_ub = [15 15]; % x的上界
[x,fval,exitflag,output] = particleswarm(@Obj_fun2, narvs, x_lb, x_ub)   

Matlab自带的粒子群优化算法函数particleswarm

绘制最佳的函数值随迭代次数的变化图

options = optimoptions('particleswarm','PlotFcn','pswplotbestf')   
[x,fval] = particleswarm(@Obj_fun2,narvs,x_lb,x_ub,options)

Matlab自带的粒子群优化算法函数particleswarm

展示函数的迭代过程

options = optimoptions('particleswarm','Display','iter');
[x,fval] = particleswarm(@Obj_fun2,narvs,x_lb,x_ub,options)

Matlab自带的粒子群优化算法函数particleswarm

以下方法用于调整particleswarm函数的默认参数

修改粒子数量

% 默认的是:min(100,10*nvars)
options = optimoptions('particleswarm','SwarmSize',50);
[x,fval] = particleswarm(@Obj_fun2,narvs,x_lb,x_ub,options)

在粒子群算法结束后继续调用其他函数进行混合求解

options = optimoptions('particleswarm','HybridFcn',@fmincon);
[x,fval] = particleswarm(@Obj_fun2,narvs,x_lb,x_ub,options)

修改惯性权重的变化范围

% 默认的是0.1-1.1
options = optimoptions('particleswarm','InertiaRange',[0.2 1.2]);
[x,fval] = particleswarm(@Obj_fun2,narvs,x_lb,x_ub,options)

修改个体学习因子

% 默认的是1.49(压缩因子)
options = optimoptions('particleswarm','SelfAdjustmentWeight',2);
[x,fval] = particleswarm(@Obj_fun2,narvs,x_lb,x_ub,options)

修改社会学习因子

% 默认的是1.49(压缩因子)
options = optimoptions('particleswarm','SocialAdjustmentWeight',2);
[x,fval] = particleswarm(@Obj_fun2,narvs,x_lb,x_ub,options)

修改最大迭代次数

% 默认的是200*nvars
options = optimoptions('particleswarm','MaxIterations',10000);
[x,fval] = particleswarm(@Obj_fun2,narvs,x_lb,x_ub,options)

修改邻域内粒子的比例

% 默认是0.25 
options = optimoptions('particleswarm','MinNeighborsFraction',0.2);
[x,fval] = particleswarm(@Obj_fun2,narvs,x_lb,x_ub,options)

修改函数容忍度

% 默认1e-6, 用于控制自动退出迭代的参数
options = optimoptions('particleswarm','FunctionTolerance',1e-8);
[x,fval] = particleswarm(@Obj_fun2,narvs,x_lb,x_ub,options)

修改最大停滞迭代数

% 默认20, 用于控制自动退出迭代的参数
options = optimoptions('particleswarm','MaxStallIterations',50);
[x,fval] = particleswarm(@Obj_fun2,narvs,x_lb,x_ub,options)

同时修改多个参数

options = optimoptions('particleswarm','FunctionTolerance',1e-12,'MaxStallIterations',100,'MaxIterations',100000);
[x,fval] = particleswarm(@Obj_fun2,narvs,x_lb,x_ub,options)
发表评论 取消回复
表情 图片 链接 代码

分享