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

Swarm =自定义创建(问题)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

的变量gydF4y2Ba惯性gydF4y2Ba,gydF4y2Bay1 = SelfAdjustmentWeightgydF4y2Ba,gydF4y2Bay2 = SocialAdjustmentWeightgydF4y2Ba.gydF4y2Ba

此更新使用以下的加权和:gydF4y2Ba

  • 之前的速度gydF4y2BavgydF4y2Ba

  • xpgydF4y2Ba,即当前位置的差值gydF4y2BaxgydF4y2Ba最好的位置gydF4y2BapgydF4y2Ba粒子看到了gydF4y2Ba

  • x-ggydF4y2Ba,即当前位置的差值gydF4y2BaxgydF4y2Ba最好的位置gydF4y2BaggydF4y2Ba在现在的社区gydF4y2Ba

根据此公式,选项的效果如下:gydF4y2Ba

  • 惯量绝对值更大gydF4y2BaWgydF4y2Ba导致新的速度与旧的速度在同一条线上,并且具有更大的绝对大小。的大绝对值gydF4y2BaWgydF4y2Ba能破坏蜂群的稳定。的价值gydF4y2BaWgydF4y2Ba保持在两元向量的范围内gydF4y2BaInertiaRangegydF4y2Ba.gydF4y2Ba

  • 较大的值gydF4y2Bay1 = 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在每次迭代中调用。输出函数和绘图函数之间的区别在于,绘图函数具有内置的绘图增强功能,例如在绘图窗口上显示用于暂停或停止的按钮gydF4y2BaparticleswarmgydF4y2Ba.唯一的内置绘图函数gydF4y2Ba“pswplotbestf”gydF4y2Ba针对迭代绘制最佳目标函数值。要指定它,gydF4y2Ba

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

要创建自定义绘图函数,请使用中指定的语法编写函数gydF4y2Ba输出函数或图函数的结构gydF4y2Ba.若要指定自定义绘图函数,请使用函数句柄。如果你有几个plot函数,将它们作为函数句柄的单元格数组传递:gydF4y2Ba

选项= optimoptions(@particleswarm,gydF4y2Ba...gydF4y2Ba“PlotFcn”gydF4y2Ba, {@plotfun1、@plotfun2 @plotfun3})gydF4y2Ba

有关自定义输出函数的示例,请参见gydF4y2Ba粒子群输出函数gydF4y2Ba.gydF4y2Ba

输出函数或图函数的结构gydF4y2Ba

输出函数的调用语法如下:gydF4y2Ba

stop = myfun(optimValues,state)gydF4y2Ba

如果你的函数集gydF4y2Ba停止gydF4y2Ba来gydF4y2Ba真正的gydF4y2Ba,迭代结束。集gydF4y2Ba停止gydF4y2Ba来gydF4y2Ba假gydF4y2Ba有gydF4y2BaparticleswarmgydF4y2Ba继续计算。gydF4y2Ba

该函数有以下输入参数:gydF4y2Ba

  • optimValuesgydF4y2Ba-包含当前迭代的蜂群信息的结构。详情见gydF4y2BaoptimValues结构gydF4y2Ba.gydF4y2Ba

  • 状态gydF4y2Ba-给出当前迭代状态的字符串。gydF4y2Ba

    • “init”gydF4y2Ba解算器还没有开始迭代。您的输出函数或绘图函数可以使用此状态打开文件,或为后续迭代设置数据结构或绘图。gydF4y2Ba

    • “通路”gydF4y2Ba-求解器正在进行迭代。通常,这是输出函数或绘图函数执行其工作的地方。gydF4y2Ba

    • “完成”gydF4y2Ba-求解器达到停止准则。您的输出函数或绘图函数可以使用此状态进行清理,例如关闭它打开的任何文件。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) = fun(swarm(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

矢量化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