主要内容gydF4y2Ba

粒子群的选项gydF4y2Ba

为particleswarm指定选项gydF4y2Ba

创建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

创建群gydF4y2Ba

默认情况下,gydF4y2BaparticleswarmgydF4y2Ba调用gydF4y2Ba“pswcreationuniform”gydF4y2Ba群创建函数。这个函数的工作原理如下。gydF4y2Ba

  1. 如果一个gydF4y2BaInitialSwarmMatrixgydF4y2Ba选项存在,gydF4y2Ba“pswcreationuniform”gydF4y2Ba需要第一gydF4y2BaSwarmSizegydF4y2Ba的行gydF4y2BaInitialSwarmMatrixgydF4y2Ba矩阵就是蜂群。的行数gydF4y2BaInitialSwarmMatrixgydF4y2Ba矩阵小于gydF4y2BaSwarmSizegydF4y2Ba,然后gydF4y2Ba“pswcreationuniform”gydF4y2Ba继续下一步。gydF4y2Ba

  2. “pswcreationuniform”gydF4y2Ba产生了足够多的粒子gydF4y2BaSwarmSizegydF4y2Ba在总。gydF4y2Ba“pswcreationuniform”gydF4y2Ba创造出随机均匀分布的粒子。任何群集组件的范围是gydF4y2Ba-InitialSwarmSpan / 2, InitialSwarmSpan / 2gydF4y2Ba,如有必要,移动和缩放以匹配任何边界。gydF4y2Ba

创建后,gydF4y2BaparticleswarmgydF4y2Ba检查所有粒子是否满足任何边界,并在必要时截断组件。如果gydF4y2Ba显示gydF4y2Ba选择是gydF4y2Ba“通路”gydF4y2Ba那么一个粒子需要被截断gydF4y2BaparticleswarmgydF4y2Ba通知你。gydF4y2Ba

创建自定义函数gydF4y2Ba

使用设置自定义创建函数gydF4y2BaoptimoptionsgydF4y2Ba设置gydF4y2BaCreationFcngydF4y2Ba选择gydF4y2Ba@gydF4y2BacustomcreationgydF4y2Ba,在那里gydF4y2BacustomcreationgydF4y2Ba是创建函数文件的名称。自定义创建函数具有这种语法。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

  • '最终的'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

算法设置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

混合函数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
包括混合选项gydF4y2BaparticleswarmgydF4y2Ba 选项gydF4y2Ba如下:gydF4y2Ba
选择= optimoptions(选项,gydF4y2Ba“HybridFcn”gydF4y2Ba, {@fminunc, hybridopts});gydF4y2Ba
hybridoptsgydF4y2Ba必须在你设置之前存在gydF4y2Ba选项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

输出函数的调用语法如下: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

OptimValues结构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

并行或向量化函数计算gydF4y2Ba

为了提高速度,你可以设置你的选项gydF4y2BaparticleswarmgydF4y2Ba评估群集的目标函数gydF4y2Ba平行线gydF4y2Ba或在一个gydF4y2Ba矢量化gydF4y2Ba时尚。您只能使用其中一个选项。如果你设置了gydF4y2BaUseParallelgydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba和gydF4y2BaUseVectorizedgydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba,然后计算以向量化的方式完成,而不是并行的。gydF4y2Ba

平行particleswarmgydF4y2Ba

如果您有Parallel Computing Toolbox™许可证,您可以将目标函数的评估分发到处理器或核心之间的集群中。设置gydF4y2BaUseParallelgydF4y2Ba选择gydF4y2Ba真正的gydF4y2Ba.gydF4y2Ba

当目标函数的计算成本很高,或者有很多粒子和处理器时,并行计算可能比串行计算更快。否则,通信开销会导致并行计算比串行计算慢。gydF4y2Ba

有关详细信息,请参见gydF4y2Ba并行计算gydF4y2Ba.gydF4y2Ba

矢量化的颗粒gydF4y2Ba

如果你的目标函数可以一次评估所有的粒子,你通常可以通过设置gydF4y2BaUseVectorizedgydF4y2Ba选择gydF4y2Ba真正的gydF4y2Ba.你的目标函数应该接受gydF4y2Ba米gydF4y2Ba-经过-gydF4y2BaNgydF4y2Ba矩阵,其中每一行表示一个粒子,并返回gydF4y2Ba米gydF4y2Ba-经过-gydF4y2Ba1gydF4y2Ba目标函数值的向量。这个选项的工作方式与gydF4y2BaPatternSearch.gydF4y2Ba和gydF4y2Ba遗传算法gydF4y2BaUseVectorizedgydF4y2Ba选项。为gydF4y2BaPatternSearch.gydF4y2Ba细节,参见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