【Matlab】PSOt工具箱使用

1. PSOt工具箱介绍

PSOt为PSO的工具箱,该工具箱将PSO算法的核心部分封装起来,提供给用户的为算法的可调参数,用户只需要定义好自己需要优化的函数(计算最小值或者最大值),并设置好函数自变量的取值范围、每步迭代允许的最大变化量(称为最大速度,Max_V)等,即可自行优化。

与遗传算法相比,PSO仅需要调整少数几个参数即可实现函数的优化。该算法对待优化函数没有任何特别的要求(如可微分、时间连续等),因而其通用性极强,对多变量、高度非线性、不连续及不可微的情况更加具有其优势。

该工具箱的使用主要分为几个步骤:

  1. 在Matlab中设置工具箱的路径;
  2. 定义待优化函数;
  3. 调用PSO算法的核心函数:pso_Trelea_vectorized()

其中第三步最关键,需要根据自己的需要设置好参数,可使算法极快收敛。

2. 使用举例

2.1 定义待优化函数

用户根据自己的需要,定义需要优化的函数。举个例子,若想计算如下二元函数的最小值

z= 0.5*(x-3)^2+0.2*(y-5)^2-0.1

其中自变量x、y的范围均为[-50, 50]。

function z=test_func(in)
nn=size(in);
x=in(:,1);
y=in(:,2);
nx=nn(1);
for i=1:nx
    temp = 0.5*(x(i)-3)^2+0.2*(y(i)-5)^2-0.1;
    z(i,:) = temp;
end

2.2 设置参数进行优化

clear
clc
x_range=[-50,50];     %参数x变化范围
y_range=[-50,50];     %参数y变化范围
range = [x_range;y_range];     %参数变化范围(组成矩阵)
Max_V = 0.2*(range(:,2)-range(:,1));  %最大速度取变化范围的10%~20%
n=2;                     %待优化函数的维数,此例子中仅x、y两个自变量,故为2
pso_Trelea_vectorized('test_func',n,Max_V,range)  %调用PSO核心模块

Pdef参数解释: 

Pdef = [100 2000 100 2 2 0.9 0.4 1500 1e-25 250 NaN 0 0];
%% Functname, D, mv, Varrange, minmax, and psoparams
pso_Trelea_vectorized('test_func',N,Max_V,range,0,Pdef)  %调用PSO核心模块

P(1),为在matlab命令窗进行显示的间隔数,取值为100表示每迭代100次显示一次;若取值为0,则不显示中间过程

P(2),表示最大迭代次数,即即使算法不收敛,到此数后自动停止

P(3),种子数,即初始化多少个种子,如对上面的问题,初始化后in为24个x及24个y的数值组成的矩阵。种子数越多,越有可能收敛到全局最优值,但算法收敛速度慢。

P(4)、P(5),,算法的加速度参数,分别影响局部最优值和全局最优值,据说2对大多数情况来说都是挺好的选择,所以一般不需要修改。

P(6)、P(7),初始时刻和收敛时刻的加权值,在最早的PSO算法中,没有此参数,靠其它几个参数的调整来保证收敛,但收敛速度和收敛精度难以同时满足,后来在改进算法中,加入此权值,使得兼顾收敛速度和收敛精度成为可能,笔者认为,对大多数情况来说仍不需要修改。

P(8),指定的当迭代次数超过此值时,加权值取其最小(如上面的0.4)。

P(9),用于终止算法的阈值。当连续的两次迭代中对应的种群最优值小于此阈值时,算法停止

P(10),用于终止算法的阈值。当连续250次迭代中函数的梯度之仍然没有变化,则推出迭代。

P(11),用于说明优化的情况,取NaN时表示为非约束下的优化问题(即没有附加约束方程)

P(12),用于指定采用何种PSO类型,0表示通常的PSO算法。

P(13),用于说明是否认为指定种子,0表示随机产生种子,1表示用户自行产生种子。

  • 6
    点赞
  • 64
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值