粒子群的选项GydF4y2Ba

对于particleswarm指定选项GydF4y2Ba

创建GydF4y2Ba选项GydF4y2Ba使用GydF4y2BaoptimoptionsGydF4y2Ba功能如下。GydF4y2Ba

选项= optimoptions(GydF4y2Ba'particleswarm'GydF4y2Ba,GydF4y2Ba“Param1”GydF4y2Ba,值1,GydF4y2Ba“Param2”GydF4y2Ba,值2,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'ITER'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

  • 'ITER'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)+ Y 2 * U2。*(G-X)GydF4y2Ba。GydF4y2Ba

的变量GydF4y2BaW =惯性GydF4y2Ba,GydF4y2BaY1 = SelfAdjustmentWeightGydF4y2Ba,GydF4y2Bay2 = SocialAdjustmentWeightGydF4y2Ba。GydF4y2Ba

此更新采用的加权和:GydF4y2Ba

  • 以前的速度GydF4y2BavGydF4y2Ba

  • X-PGydF4y2Ba,当前位置之间的差GydF4y2BaXGydF4y2Ba最好的位置GydF4y2BapGydF4y2Ba粒子已经看到GydF4y2Ba

  • 的x克GydF4y2Ba,当前位置之间的差GydF4y2BaXGydF4y2Ba最好的位置GydF4y2BaGGydF4y2Ba在目前附近GydF4y2Ba

根据这个公式,这些选项有以下效果:GydF4y2Ba

  • 惯性较大的绝对值GydF4y2Baw ^GydF4y2Ba导致新的速度与旧的速度更接近同一条线,并具有更大的绝对大小。一个很大的绝对值GydF4y2Baw ^GydF4y2Ba会破坏蜂群的稳定。的价值GydF4y2Baw ^GydF4y2Ba在两元向量的范围内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( 'fminunc', '显示', 'ITER', '算法', '准牛顿');GydF4y2Ba
包括在混合选项GydF4y2BaparticleswarmGydF4y2Ba 选项GydF4y2Ba如下:GydF4y2Ba
选项= optimoptions(选项 'HybridFcn',{@ 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“OutputFcn”GydF4y2Ba, {@outfun1、@outfun2 @outfun3})GydF4y2Ba

类似地,标绘函数是GydF4y2BaparticleswarmGydF4y2Ba在每个迭代中调用。输出函数和曲线函数之间的差别在于一个绘图功能内置在显示的图形窗口以暂停或停止上绘制的增强,诸如按钮GydF4y2BaparticleswarmGydF4y2Ba。独行内建绘图功能GydF4y2Ba'pswplotbestf'GydF4y2Ba绘制针对迭代的最佳目标函数值。要指定它,GydF4y2Ba

选项= optimoptions(@particleswarm,GydF4y2Ba'PlotFcn'GydF4y2Ba,GydF4y2Ba'pswplotbestf'GydF4y2Ba)GydF4y2Ba

要创建自定义绘图函数,请使用中指定的语法编写函数GydF4y2Ba输出函数或绘图功能的结构GydF4y2Ba。要指定自定义绘图功能,使用功能句柄。如果你有几个情节的功能,将它们作为函数处理的单元阵列:GydF4y2Ba

选项= optimoptions(@particleswarm,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- String,给出当前迭代的状态。GydF4y2Ba

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

    • 'ITER'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)=乐趣(群(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-通过-GydF4y2BañGydF4y2Ba矩阵,其中每一行表示一个粒子,并返回GydF4y2Ba中号GydF4y2Ba-通过-GydF4y2Ba1GydF4y2Ba目标函数的值的向量。该选项的工作方式一样GydF4y2BapatternsearchGydF4y2Ba和GydF4y2BaGAGydF4y2BaUseVectorizedGydF4y2Ba选项。对于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为NaNGydF4y2Ba,GydF4y2Ba天道酬勤GydF4y2Ba或复杂的目标函数值,GydF4y2BaparticleswarmGydF4y2Ba停止并发出错误。GydF4y2Ba