还剩3页未读,继续阅读
文本内容:
PSO算法使用简介1PSO工具箱简介PSOt为PSO的工具箱,该工具箱将PSO算法的核心部分封装起来,提供给用户的为算法的可调参数,用户只需要定义好自己需要优化的函数计算最小值或者最大值,并设置好函数自变量的取值范围、每步迭代允许的最大变化量称为最大速度,__x_V等,即可自行优化与遗传算法相比,PSO仅需要调整少数几个参数即可实现函数的优化该算法对待优化函数没有任何特别的要求如可微分、时间连续等,因而其通用性极强,对多变量、高度非线性、不连续及不可微的情况更加具有其优势该工具箱的使用主要分为几个步骤1在__tlab中设置工具箱的路径;2定义待优化函数;3调用PSO算法的核心函数pso_Trelea_vectorized其中第三步最关键,需要根据自己的需要设置好参数,可使算法极快收敛下面对各个步骤一一介绍2设置工具箱的路径
2.1在__tlab的命令窗口__“File——SetPath….”,如下图
2.2在弹出的对话框中__“AddFolder”,然后浏览找到工具箱放置的位置,如下图
2.3若想用到该工具箱所带的测试函数,还需要用如上同样的方法,设置路径指向工具箱下的“testfunctions”文件夹;
2.4若想用于训练神经网络的训练,设置路径指向工具箱下的“testfunctions”文件夹“nnet”3定义待优化函数参见文件test_func.m用户根据自己的需要,定义需要优化的函数举个例子,若想计算如下二元函数的最小值z=
0.5*x-3^2+
0.2*y-5^2-
0.1其中自变量x、y的范围均为[-5050]可按下面的方法定义该待优化函数%%----------------------------------------------------------------%%functionz=test_funcinnn=sizein;x=in:1;y=in:2;nx=nn1;fori=1:nxtemp=
0.5*xi-3^2+
0.2*yi-5^2-
0.1;zi:=temp;end%%----------------------------------------------------------------%%需要特别指出的是PSO算法的核心函数pso_Trelea_vectorized自动初始化一组随机变量,因而待优化函数test_funcin中的输入in是一个矩阵,由一组x和y的值组成,对应的,函数的输出z为一个向量4定义待优化函数参见文件test___in.m当定义好待优化函数后,设置相应的参数,然后就可以调用PSO进行优化了,对上面优化问题,按下面的方式进行调用%%----------------------------------------------------------------%%clearclcx_range=[-5050];%参数x变化范围y_range=[-5050];%参数y变化范围range=[x_range;y_range];%参数变化范围组成矩阵__x_V=
0.2*range:2-range:1;%最大速度取变化范围的10%~20%n=2;%待优化函数的维数,此例子中仅x、y两个自变量,故为2pso_Trelea_vectorizedtest_funcn__x_Vrange%调用PSO核心模块%%----------------------------------------------------------------%%5PSO算法中相关参数的说明
5.1工具箱中相关参数的含义在该工具箱中,用户可以设置PSO算法的13个参数参见pso_Trelea_vectorized的注释部分,但实际上,有些参数采用采用算法提供的默认值即可,算法的默认值说明如下在pso_Trelea_vectorized函数的定义中,用变量Pdef表示,若用户在pso_Trelea_vectorized的调用中赋以数值,则会覆盖相应的参数笔者通常直接修改Pdef的数值,而不在调用时指定%1Pdef=[
100200024220.
90.415001e-25250NaN00];P1,为在__tlab命令窗进行显示的间隔数,取值为100表示每迭代100次显示一次;若取值为0,则不显示中间过程%2Pdef=[
100200024220.
90.415001e-25250NaN00];P2,表示最大迭代次数,即即使算法不收敛,到此数后自动停止%3Pdef=[
100200024220.
90.415001e-25250NaN00];P3,种子数,即初始化多少个种子,如对上面的问题,初始化后in为24个x及24个y的数值组成的矩阵种子数越多,越有可能收敛到全局最优值,但算法收敛速度慢4Pdef=[
100200024220.
90.415001e-25250NaN00];P
4、P5,,算法的加速度参数,分别影响局部最优值和全局最优值,据说2对大多数情况来说都是挺好的选择,所以一般不需要修改5Pdef=[
100200024220.
90.415001e-25250NaN00];P
6、P7,初始时刻和收敛时刻的加权值,在最早的PSO算法中,没有此参数,靠其它几个参数的调整来保证收敛,但收敛速度和收敛精度难以同时满足,后来在改进算法中,加入此权值,使得兼顾收敛速度和收敛精度成为可能,笔者认为,对大多数情况来说仍不需要修改%6Pdef=[
100200024220.
90.415001e-25250NaN00];P8,指定的当迭代次数超过此值时,加权值取其最小如上面的
0.4%7Pdef=[
100200024220.
90.415001e-25250NaN00];P9,用于终止算法的阈值当连续的两次迭代中对应的种群最优值小于此阈值时,算法停止8Pdef=[
100200024220.
90.415001e-25250NaN00];P10,用于终止算法的阈值当连续250次迭代中函数的梯度之仍然没有变化,则推出迭代9Pdef=[
100200024220.
90.415001e-25250NaN00];P11,用于说明优化的情况,取NaN时表示为非约束下的优化问题即没有附加约束方程10Pdef=[
100200024220.
90.415001e-25250NaN00];P12,用于指定采用何种PSO类型,0表示通常的PSO算法%11Pdef=[
100200024220.
90.415001e-25250NaN00];P13,用于说明是否认为指定种子,0表示随机产生种子,1表示用户自行产生种子
5.2工具箱中重要参数的说明如上所述,上面的13个参数中,并不是每个都需要用户细心指定,多半用其默认值即可用户真正需要用心设定的参数为1待定参数变化范围;2参数的每步迭代最大允许值,即__x_V,一般取变化范围的10%~20%,越小,收敛的分辨率越高,即不容易跳过最优值,但收敛慢;越大,收敛速度快,但可能跳出全局最优值因此用户需要小心6PSO算法使用举例按如上说明的编写好__tlab文件test_func.m和test___in.m后,直接执行test___in.m,收敛后的结果为ans=
3.0002%收敛时对应的x值
5.0009%收敛时对应的y值-
0.1000%收敛时对应的z值最优值其中最后一个即-
0.1为收敛时的最优值,而前面两个
3.0002和
5.0009为对应于最优值的自变量x和y的取值。