主要内容gydF4y2Ba

粒子群的选项gydF4y2Ba

指定的选项particleswarmgydF4y2Ba

创建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。* (px) + 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在每一次迭代时调用。输出函数和一块函数之间的区别是,一块内置的绘图功能增强,如按钮,出现在窗口暂停或停止gydF4y2BaparticleswarmgydF4y2Ba。的内置函数gydF4y2Ba“pswplotbestf”gydF4y2Ba情节的最佳目标函数值与迭代。指定,gydF4y2Ba

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

创建一个自定义函数,编写一个函数与语法中指定gydF4y2Ba结构输出函数或情节的功能gydF4y2Ba。指定一个自定义绘制函数,使用一个函数处理。如果你有几个情节函数,通过一系列细胞的功能处理: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——解决达成停止准则。您的输出函数或情节函数可以使用这个状态来清理,比如关闭任何文件。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详细信息,请参阅gydF4y2BaVectorize目标和约束函数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