http://cn.mathworks.com/help/gads/examples/optimize-using-a-particle-swarm.html
算法描述:n个粒子在Q维(变量个数)空间进行搜索,每个粒子表示为xi=(xi1,xi2,xi3,xi4,xi5.......),对应的速度Vi=(vi1,vi2,vi3,vi4,vi5...),搜索时考虑两个因素:1自己历史最大值2全部粒子最优值
速度由3个因素改变;1惯性权重,2自身权重3种群权重
可以通过plotobjective(@..,rang)画出函数图像。
对于复杂的目标函数可能使用默认设置会找不到最优值。
可进行一些自定义设置;
1绑定搜索空间
设置 lb=-10*ones(1,nvars);其中nvars为变量个数
ub=-lb;
[x,Fval.exitFlag,output]=particleswarm(fun,nvars,lb,ub);
2.更待其他选项
options=optimoptions('particleswarm','MinNeighborsFraction'1);
[x,Fval.exitFlag,output]=particleswarm(fun,nvars,lb,ub,options);
3.更改自身权重
options.SelfAdjustmentWeight=1.9;
[x,Fval.exitFlag,output]=particleswarm(fun,nvars,lb,ub,options);
4 也可以提供初始点(并不是必须的)
x0=zeros(20,6)这里设置20个粒子作为行向量,6为变量值nvars
options.InitialSwarmMatrix=x0;
[x,Fval.exitFlag,output]=particleswarm(fun,nvars,lb,ub,options);
5矢量化速度(可以使计算时间缩短)
开启矢量化:options.UseVectorized=true;
关闭矢量化:options.UseVectorized=false;
另外计算程序运行时间可以用tic......toc中间是程序代码,tic和toc一般成对使用来计算时间间隔。
6.设置粒子数
默认是60,也可以自定义设置options.SwarmSize=200;
7.混合函数
指的是在粒子群算法停止后进行的计算,比如options.HybridFcn=@fmincon,这样可能会使结果更准确。