主要内容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

创建函数应该返回一个大小的矩阵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(默认)-显示停止的原因。gydF4y2Ba

itergydF4y2Ba显示: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均匀(0,1)分布的随机长度向量gydF4y2Ba据nvargydF4y2Ba,更新速度gydF4y2Ba

v = 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

大的惯性值,gydF4y2BaSelfAdjustmentWeightgydF4y2Ba,或gydF4y2BaSocialAdjustmentWeightgydF4y2Ba会破坏蜂群的稳定。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,gydF4y2BapatternsearchgydF4y2Ba,或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

在哪里gydF4y2BaoutfungydF4y2Ba中指定了语法的函数吗gydF4y2Ba输出函数或图函数的结构gydF4y2Ba.如果你有几个输出函数,将它们作为函数句柄的单元格数组传递:gydF4y2Ba

选择= optimoptions (@particleswarm,gydF4y2Ba...gydF4y2Ba“OutputFcn”gydF4y2Ba, {@outfun1、@outfun2 @outfun3})gydF4y2Ba

类似地,图函数是gydF4y2BaparticleswarmgydF4y2Ba在每次迭代时调用。输出函数和plot函数之间的区别在于,plot函数具有内置的绘图增强功能,例如在plot窗口上显示用于暂停或停止的按钮gydF4y2BaparticleswarmgydF4y2Ba.唯一的内置绘图函数gydF4y2Ba“pswplotbestf”gydF4y2Ba绘制针对迭代的最佳目标函数值。指定,gydF4y2Ba

选择= optimoptions (@particleswarm,gydF4y2Ba“PlotFcn”gydF4y2Ba,gydF4y2Ba“pswplotbestf”gydF4y2Ba)gydF4y2Ba

要创建自定义plot函数,请编写具有中指定语法的函数gydF4y2Ba输出函数或图函数的结构gydF4y2Ba.要指定自定义plot函数,请使用函数句柄。如果你有几个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
meanfvalgydF4y2Ba 当前迭代中所有粒子的平均目标函数。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

如果您拥有并行计算工具箱™许可证,则可以将目标函数的评估分布到处理器或核心之间的群中。设置gydF4y2BaUseParallelgydF4y2Ba选项gydF4y2Ba真正的gydF4y2Ba.gydF4y2Ba

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

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

矢量化particleswarmgydF4y2Ba

如果你的目标函数可以一次评估所有的粒子,你通常可以通过设置gydF4y2BaUseVectorizedgydF4y2Ba选项gydF4y2Ba真正的gydF4y2Ba.你的目标函数应该接受gydF4y2Ba米gydF4y2Ba——- - - - - -gydF4y2BaNgydF4y2Ba矩阵,其中每一行代表一个粒子,并返回一个gydF4y2Ba米gydF4y2Ba——- - - - - -gydF4y2Ba1gydF4y2Ba目标函数值的向量。该选项的工作方式与gydF4y2BapatternsearchgydF4y2Ba而且gydF4y2Ba遗传算法gydF4y2BaUseVectorizedgydF4y2Ba选项。为gydF4y2BapatternsearchgydF4y2Ba详细信息,请参阅gydF4y2Ba向量化目标函数和约束函数gydF4y2Ba.gydF4y2Ba

停止条件gydF4y2Ba

particleswarmgydF4y2Ba当出现下列任何情况时停止迭代。gydF4y2Ba

停止选项gydF4y2Ba 停止测试gydF4y2Ba 出口标志gydF4y2Ba
MaxStallIterationsgydF4y2Ba而且gydF4y2BaFunctionTolerancegydF4y2Ba 最佳目标函数值的相对变化gydF4y2BaggydF4y2Ba在过去gydF4y2BaMaxStallIterationsgydF4y2Ba迭代少于gydF4y2BaFunctionTolerancegydF4y2Ba.gydF4y2Ba 1gydF4y2Ba
MaxIterationsgydF4y2Ba 迭代次数达到gydF4y2BaMaxIterationsgydF4y2Ba.gydF4y2Ba 0gydF4y2Ba
OutputFcngydF4y2Ba或gydF4y2BaPlotFcngydF4y2Ba OutputFcngydF4y2Ba或gydF4y2BaPlotFcngydF4y2Ba可以停止迭代。gydF4y2Ba -1gydF4y2Ba
ObjectiveLimitgydF4y2Ba 最佳目标函数值gydF4y2BaggydF4y2Ba一个可行点的小于gydF4y2BaObjectiveLimitgydF4y2Ba.gydF4y2Ba 3gydF4y2Ba
MaxStallTimegydF4y2Ba 最佳目标函数值gydF4y2BaggydF4y2Ba没有在最后改变吗gydF4y2BaMaxStallTimegydF4y2Ba秒。gydF4y2Ba 4gydF4y2Ba
MaxTimegydF4y2Ba 函数运行时间超过gydF4y2BaMaxTimegydF4y2Ba秒。gydF4y2Ba 5gydF4y2Ba

另外,如果你设置gydF4y2BaFunValCheckgydF4y2Ba选项gydF4y2Ba“上”gydF4y2Ba,蜂群中有粒子gydF4y2Ba南gydF4y2Ba,gydF4y2Ba正gydF4y2Ba,或复杂目标函数值,gydF4y2BaparticleswarmgydF4y2Ba停止并发出错误。gydF4y2Ba

Baidu
map