创建gydF4y2Ba选项gydF4y2Ba
使用gydF4y2BaoptimoptionsgydF4y2Ba
函数如下。gydF4y2Ba
选项= Optimoptions(gydF4y2Ba“particleswarm”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba“Param1”gydF4y2Bavalue1,gydF4y2Ba“Param2”gydF4y2Bavalue2,gydF4y2Ba...gydF4y2Ba);gydF4y2Ba
例如,请参见gydF4y2Ba粒子群优化gydF4y2Ba.gydF4y2Ba
中的字段名列出了本节中的每个选项gydF4y2Ba选项gydF4y2Ba
.例如,gydF4y2Ba显示gydF4y2Ba
指的是相应的场gydF4y2Ba选项gydF4y2Ba
.gydF4y2Ba
默认情况下,gydF4y2BaparticleswarmgydF4y2Ba
调用gydF4y2Ba“pswcreationuniform”gydF4y2Ba
群创建函数。这个函数的工作原理如下。gydF4y2Ba
如果一个gydF4y2BaInitialSwarmMatrixgydF4y2Ba
选项存在,gydF4y2Ba“pswcreationuniform”gydF4y2Ba
需要第一gydF4y2BaSwarmSizegydF4y2Ba
的行gydF4y2BaInitialSwarmMatrixgydF4y2Ba
矩阵就是蜂群。的行数gydF4y2BaInitialSwarmMatrixgydF4y2Ba
矩阵小于gydF4y2BaSwarmSizegydF4y2Ba
,然后gydF4y2Ba“pswcreationuniform”gydF4y2Ba
继续下一步。gydF4y2Ba
“pswcreationuniform”gydF4y2Ba
产生了足够多的粒子gydF4y2BaSwarmSizegydF4y2Ba
在总。gydF4y2Ba“pswcreationuniform”gydF4y2Ba
创造出随机均匀分布的粒子。任何群集组件的范围是gydF4y2Ba-InitialSwarmSpan / 2, InitialSwarmSpan / 2gydF4y2Ba
,如有必要,移动和缩放以匹配任何边界。gydF4y2Ba
创建后,gydF4y2BaparticleswarmgydF4y2Ba
检查所有粒子是否满足任何边界,并在必要时截断组件。如果gydF4y2Ba显示gydF4y2Ba
选择是gydF4y2Ba“通路”gydF4y2Ba
那么一个粒子需要被截断gydF4y2BaparticleswarmgydF4y2Ba
通知你。gydF4y2Ba
使用设置自定义创建函数gydF4y2BaoptimoptionsgydF4y2Ba
设置gydF4y2BaCreationFcngydF4y2Ba
选择gydF4y2Ba@gydF4y2Ba
,在那里gydF4y2BacustomcreationgydF4y2Ba
customcreationgydF4y2Ba
是创建函数文件的名称。自定义创建函数具有这种语法。gydF4y2Ba
群= customcreation(问题)gydF4y2Ba
创建函数应该返回一个size的矩阵gydF4y2BaSwarmSizegydF4y2Ba
-经过-gydF4y2Ba据nvargydF4y2Ba
,每一行代表一个粒子的位置。看到gydF4y2Ba问题gydF4y2Ba
有关问题结构的详细信息。特别是,你可以获得gydF4y2BaSwarmSizegydF4y2Ba
从gydF4y2Baproblem.options.SwarmSizegydF4y2Ba
,gydF4y2Ba据nvargydF4y2Ba
从gydF4y2Baproblem.nvarsgydF4y2Ba
.gydF4y2Ba
有关创建函数的示例,请参阅下面的代码gydF4y2BapswcreationuniformgydF4y2Ba
.gydF4y2Ba
编辑gydF4y2BapswcreationuniformgydF4y2Ba
的gydF4y2Ba显示gydF4y2Ba
选项指定在运行算法时在命令行显示多少信息。gydF4y2Ba
'离开'gydF4y2Ba
或gydF4y2Ba“没有”gydF4y2Ba
- 没有显示输出。gydF4y2Ba
“通路”gydF4y2Ba
—每次迭代都会显示信息。gydF4y2Ba
'最终的'gydF4y2Ba
(default)—显示停止原因。gydF4y2Ba
itgydF4y2Ba
显示:gydF4y2Ba
迭代gydF4y2Ba
——迭代数gydF4y2Ba
f-countgydF4y2Ba
-目标函数评估的累计次数gydF4y2Ba
最好的f(x)gydF4y2Ba
-最佳目标函数值gydF4y2Ba
意思是f(x)gydF4y2Ba
-所有粒子的平均目标函数值gydF4y2Ba
失速的迭代gydF4y2Ba
-自上次更改以来的迭代次数gydF4y2Ba最好的f(x)gydF4y2Ba
的gydF4y2BaDisplayIntervalgydF4y2Ba
选项设置在迭代显示更新之前执行的迭代次数。给出一个正整数。gydF4y2Ba
详情gydF4y2BaparticleswarmgydF4y2Ba
算法出现在gydF4y2Ba粒子群优化算法gydF4y2Ba.本节介绍调优参数。gydF4y2Ba
粒子群算法的主要步骤是为群生成新的速度:gydF4y2Ba
为gydF4y2Bau1gydF4y2Ba
和gydF4y2Bau2gydF4y2Ba
均匀分布的长度随机向量gydF4y2Ba据nvargydF4y2Ba
,更新速度gydF4y2Ba
W*v + y1*u1.*(p-x) + y2*u2.*(g-x)gydF4y2Ba
.gydF4y2Ba
的变量gydF4y2BaW =惯性gydF4y2Ba
,gydF4y2Ba日元= SelfAdjustmentWeightgydF4y2Ba
,gydF4y2Bay2 = SocialAdjustmentWeightgydF4y2Ba
.gydF4y2Ba
这个更新使用的加权和:gydF4y2Ba
以前的速度gydF4y2BavgydF4y2Ba
xpgydF4y2Ba
,即当前位置的差值gydF4y2BaxgydF4y2Ba
最好的位置gydF4y2BapgydF4y2Ba
粒子已经看到gydF4y2Ba
x-ggydF4y2Ba
,即当前位置的差值gydF4y2BaxgydF4y2Ba
最好的位置gydF4y2BaggydF4y2Ba
在当前的邻居gydF4y2Ba
根据这个公式,选项的作用如下:gydF4y2Ba
惯性的绝对值更大gydF4y2BaWgydF4y2Ba
导致新的速度与旧的速度更接近于同一条线,并且具有更大的绝对值。的绝对值很大gydF4y2BaWgydF4y2Ba
会破坏蜂群的稳定。的价值gydF4y2BaWgydF4y2Ba
保持在二元向量的范围内gydF4y2BaInertiaRangegydF4y2Ba
.gydF4y2Ba
更大的值gydF4y2Ba日元= SelfAdjustmentWeightgydF4y2Ba
让粒子更倾向于它去过的最好的地方。gydF4y2Ba
更大的值gydF4y2Bay2 = SocialAdjustmentWeightgydF4y2Ba
使粒子更加朝向当前邻里的最佳位置。gydF4y2Ba
大的惯性值,gydF4y2Baselfadjustment重量gydF4y2Ba
,或gydF4y2Ba社交调节重量gydF4y2Ba
会破坏蜂群的稳定。gydF4y2Ba
的gydF4y2BaMinNeighborsFractiongydF4y2Ba
选项设置每个粒子的初始邻域大小和最小邻域大小;看到gydF4y2Ba粒子群优化算法gydF4y2Ba.设置gydF4y2BaMinNeighborsFractiongydF4y2Ba
来gydF4y2Ba1gydF4y2Ba
拥有群体的所有成员都使用全球最低点作为社会调整目标。gydF4y2Ba
看到gydF4y2Ba粒子群优化gydF4y2Ba下面的示例设置了这些调优选项中的一些。gydF4y2Ba
混合函数是粒子群算法结束后运行的另一个极小化函数。属性中指定一个混合函数gydF4y2BaHybridFcngydF4y2Ba
选择。的选择是gydF4y2Ba
[]gydF4y2Ba
—无混合功能。gydF4y2Ba
“fminsearch”gydF4y2Ba
-使用MATLABgydF4y2Ba®gydF4y2Ba函数gydF4y2BafminsearchgydF4y2Ba
执行无约束极小化。gydF4y2Ba
“patternsearch”gydF4y2Ba
- 使用模式搜索来执行受约束或无约束的最小化。gydF4y2Ba
“fminunc”gydF4y2Ba
- 使用优化工具箱™功能gydF4y2BafminuncgydF4y2Ba
执行无约束极小化。gydF4y2Ba
'fmincon'gydF4y2Ba
—使用“优化工具箱”函数gydF4y2BafmincongydF4y2Ba
执行约束最小化。gydF4y2Ba
请注意gydF4y2Ba
确保您的混合函数接受您的问题约束。否则,gydF4y2BaparticleswarmgydF4y2Ba
抛出一个错误。gydF4y2Ba
您可以为混合功能设置单独的选项。使用gydF4y2BaoptimsetgydF4y2Ba
为gydF4y2BafminsearchgydF4y2Ba
,或gydF4y2BaoptimoptionsgydF4y2Ba
为gydF4y2BafmincongydF4y2Ba
,gydF4y2BaPatternSearch.gydF4y2Ba
,或gydF4y2BafminuncgydF4y2Ba
.例如:gydF4y2Ba
hybridopts = optimoptions (gydF4y2Ba“fminunc”gydF4y2Ba,gydF4y2Ba...gydF4y2Ba'展示'gydF4y2Ba,gydF4y2Ba“通路”gydF4y2Ba,gydF4y2Ba'算法'gydF4y2Ba,gydF4y2Ba“拟牛顿”gydF4y2Ba);gydF4y2Ba
particleswarmgydF4y2Ba
选项gydF4y2Ba
如下:gydF4y2Ba选择= optimoptions(选项,gydF4y2Ba“HybridFcn”gydF4y2Ba, {@fminunc, hybridopts});gydF4y2Ba
hybridoptsgydF4y2Ba
必须在你设置之前存在gydF4y2Ba选项gydF4y2Ba
.gydF4y2Ba
有关使用混合函数的示例,请参阅gydF4y2Ba粒子群优化gydF4y2Ba.看到gydF4y2Ba何时使用混合函数gydF4y2Ba.gydF4y2Ba
输出函数是函数gydF4y2BaparticleswarmgydF4y2Ba
每次迭代时调用。输出函数可以停止gydF4y2BaparticleswarmgydF4y2Ba
,或执行其他任务。要指定输出函数,gydF4y2Ba
选择= optimoptions (@particleswarm,gydF4y2Ba“OutputFcn”gydF4y2Ba@outfun)gydF4y2Ba
在哪里gydF4y2Baoutfun.gydF4y2Ba
中是否指定了语法函数gydF4y2Ba输出功能或绘图功能的结构gydF4y2Ba.如果您有多个输出函数,请将其作为功能句柄阵列传递:gydF4y2Ba
选择= optimoptions (@particleswarm,gydF4y2Ba...gydF4y2Ba“OutputFcn”gydF4y2Ba, {@outfun1、@outfun2 @outfun3})gydF4y2Ba
类似地,plot函数是gydF4y2BaparticleswarmgydF4y2Ba
每次迭代时调用。输出函数和绘图函数之间的区别在于,绘图函数具有内置的绘图增强功能,例如出现在绘图窗口上用于暂停或停止的按钮gydF4y2BaparticleswarmgydF4y2Ba
.唯一的内置绘图函数gydF4y2Ba“pswplotbestf”gydF4y2Ba
根据迭代绘制最佳目标函数值。指定,gydF4y2Ba
选择= optimoptions (@particleswarm,gydF4y2Ba“PlotFcn”gydF4y2Ba,gydF4y2Ba“pswplotbestf”gydF4y2Ba)gydF4y2Ba
要创建自定义的plot函数,请编写语法为gydF4y2Ba输出功能或绘图功能的结构gydF4y2Ba.要指定自定义绘图函数,请使用函数句柄。如果你有几个plot函数,将它们作为函数句柄的单元格数组传递:gydF4y2Ba
选择= optimoptions (@particleswarm,gydF4y2Ba...gydF4y2Ba“PlotFcn”gydF4y2Ba,{@ plotfun1,@ plotfun2,@ plotfun3})gydF4y2Ba
有关自定义输出功能的示例,请参阅gydF4y2Ba粒子群输出功能gydF4y2Ba.gydF4y2Ba
输出函数的调用语法如下:gydF4y2Ba
停止= myfun (optimValues状态)gydF4y2Ba
如果你的函数集gydF4y2Ba停止gydF4y2Ba
来gydF4y2Ba真正的gydF4y2Ba
,迭代结束。集gydF4y2Ba停止gydF4y2Ba
来gydF4y2Ba假gydF4y2Ba
有gydF4y2BaparticleswarmgydF4y2Ba
继续计算。gydF4y2Ba
该函数有以下输入参数:gydF4y2Ba
optimValuesgydF4y2Ba
- 包含有关当前迭代中群体的信息的结构。细节在gydF4y2BaOptimValues结构gydF4y2Ba.gydF4y2Ba
状态gydF4y2Ba
- 串给出当前迭代的状态。gydF4y2Ba
“init”gydF4y2Ba
-求解器尚未开始迭代。输出函数或绘图函数可以使用此状态打开文件,或为后续迭代设置数据结构或绘图。gydF4y2Ba
“通路”gydF4y2Ba
-解算器正在进行迭代。通常,这是输出函数或绘图函数执行其工作的地方。gydF4y2Ba
“完成”gydF4y2Ba
-解算器达到停止标准。输出函数或plot函数可以使用这种状态进行清理,例如关闭它打开的任何文件。gydF4y2Ba
传递额外的参数gydF4y2Ba说明如何为输出函数或绘图函数提供附加参数。gydF4y2Ba
particleswarmgydF4y2Ba
通过了gydF4y2BaoptimValuesgydF4y2Ba
结构到输出函数或绘图函数。的gydF4y2BaoptimValuesgydF4y2Ba
结构具有以下字段。gydF4y2Ba
场gydF4y2Ba | 内容gydF4y2Ba |
---|---|
funccountgydF4y2Ba |
目标函数求值的总数。gydF4y2Ba |
bestxgydF4y2Ba |
找到最佳解点,对应于最佳目标函数值gydF4y2BabestfvalgydF4y2Ba .gydF4y2Ba |
bestfvalgydF4y2Ba |
找到最佳(最低)目标函数值。gydF4y2Ba |
迭代gydF4y2Ba |
迭代数。gydF4y2Ba |
意思gydF4y2Ba |
当前迭代中所有粒子间的平均目标函数。gydF4y2Ba |
stalliterationsgydF4y2Ba |
自上次变更以来的迭代次数gydF4y2BabestfvalgydF4y2Ba .gydF4y2Ba |
一群gydF4y2Ba |
包含粒子位置的矩阵。每一行包含一个粒子的位置,行数等于群的大小。gydF4y2Ba |
swarmfvalsgydF4y2Ba |
矢量包含群中粒子的目标函数值。对于粒子gydF4y2Ba我gydF4y2Ba ,gydF4y2Baswarmfvals (i) =乐趣(群(我:))gydF4y2Ba ,在那里gydF4y2Ba有趣的gydF4y2Ba 为目标函数。gydF4y2Ba |
为了提高速度,你可以设置你的选项gydF4y2BaparticleswarmgydF4y2Ba
评估群集的目标函数gydF4y2Ba平行线gydF4y2Ba或在一个gydF4y2Ba矢量化gydF4y2Ba时尚。您只能使用其中一个选项。如果你设置了gydF4y2BaUseParallelgydF4y2Ba
来gydF4y2Ba真正的gydF4y2Ba
和gydF4y2BaUseVectorizedgydF4y2Ba
来gydF4y2Ba真正的gydF4y2Ba
,然后计算以向量化的方式完成,而不是并行的。gydF4y2Ba
如果您有Parallel Computing Toolbox™许可证,您可以将目标函数的评估分发到处理器或核心之间的集群中。设置gydF4y2BaUseParallelgydF4y2Ba
选择gydF4y2Ba真正的gydF4y2Ba
.gydF4y2Ba
当目标函数的计算成本很高,或者有很多粒子和处理器时,并行计算可能比串行计算更快。否则,通信开销会导致并行计算比串行计算慢。gydF4y2Ba
有关详细信息,请参见gydF4y2Ba并行计算gydF4y2Ba.gydF4y2Ba
如果你的目标函数可以一次评估所有的粒子,你通常可以通过设置gydF4y2BaUseVectorizedgydF4y2Ba
选择gydF4y2Ba真正的gydF4y2Ba
.你的目标函数应该接受gydF4y2Ba米gydF4y2Ba
-经过-gydF4y2BaNgydF4y2Ba
矩阵,其中每一行表示一个粒子,并返回gydF4y2Ba米gydF4y2Ba
-经过-gydF4y2Ba1gydF4y2Ba
目标函数值的向量。这个选项的工作方式与gydF4y2BaPatternSearch.gydF4y2Ba
和gydF4y2Ba遗传算法gydF4y2Ba
UseVectorizedgydF4y2Ba
选项。为gydF4y2BaPatternSearch.gydF4y2Ba
细节,参见gydF4y2Ba向量化目标函数和约束函数gydF4y2Ba.gydF4y2Ba
particleswarmgydF4y2Ba
当出现下列任何情况时停止迭代。gydF4y2Ba
停止选项gydF4y2Ba | 停止测试gydF4y2Ba | 退出标志gydF4y2Ba |
---|---|---|
最大值gydF4y2Ba 和gydF4y2BaFunctionTolerancegydF4y2Ba |
相对变化的最佳目标函数值gydF4y2BaggydF4y2Ba 在过去gydF4y2Ba最大值gydF4y2Ba 迭代次数少于gydF4y2BaFunctionTolerancegydF4y2Ba .gydF4y2Ba |
1gydF4y2Ba |
MaxIterationsgydF4y2Ba |
迭代次数达到gydF4y2BaMaxIterationsgydF4y2Ba .gydF4y2Ba |
0gydF4y2Ba |
outputfcn.gydF4y2Ba 或gydF4y2BaPlotFcngydF4y2Ba |
outputfcn.gydF4y2Ba 或gydF4y2BaPlotFcngydF4y2Ba 可以停止迭代。gydF4y2Ba |
-1gydF4y2Ba |
Objectivelimit.gydF4y2Ba |
最佳客观函数值gydF4y2BaggydF4y2Ba 可行的点小于gydF4y2BaObjectivelimit.gydF4y2Ba .gydF4y2Ba |
-3gydF4y2Ba |
MaxStallTimegydF4y2Ba |
最佳客观函数值gydF4y2BaggydF4y2Ba 最后没有改变gydF4y2BaMaxStallTimegydF4y2Ba 秒。gydF4y2Ba |
-4gydF4y2Ba |
最大限度gydF4y2Ba |
功能运行时间超过gydF4y2Ba最大限度gydF4y2Ba 秒。gydF4y2Ba |
-5gydF4y2Ba |
同样,如果你设置gydF4y2BaFunValCheckgydF4y2Ba
选择gydF4y2Ba“上”gydF4y2Ba
,而蜂群中有粒子gydF4y2Ba南gydF4y2Ba
,gydF4y2BainfgydF4y2Ba
或复杂的目标函数值,gydF4y2BaparticleswarmgydF4y2Ba
停止并发出错误。gydF4y2Ba