Main Content

本页采用了机器翻译。点击此处可查看英文原文。

模式搜索选项

模式搜索选项

使用 optimoptions 设置 patternsearch 的选项。

options = optimoptions("patternsearch",...
    Option1=value1,Option2=value2);
  • 一些选项在 italics 中列出。这些选项没有出现在 optimoptions 返回的列表中。要了解 optimoptions 为何隐藏这些选项值,请参阅 optimoptions 隐藏的选项

  • 确保将选项传递给求解器。否则,patternsearch 使用默认选项值。

    [x,fval] = patternsearch(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

算法选项

Algorithm 指定 patternsearch 解决问题所使用的算法。

  • "classic" - 使用 模式搜索轮询的工作原理 中描述的原始算法。

  • "nups" - 使用 非均匀模式搜索(NUPS)算法 中描述的非均匀模式搜索算法。

  • "nups-gps" - 使用仅限于 GPS(广义模式搜索)轮询算法(无 OrthoMADS(正交网格自适应直接搜索)轮询)的非均匀模式搜索算法。

  • "nups-mads" - 使用仅限于 OrthoMADS 轮询算法(无 GPS 轮询)的非均匀模式搜索算法。

有关算法效果的示例,请参阅 探索 patternsearch 算法探索优化实时编辑器任务中的 patternsearch 算法

绘图选项

PlotFcn 指定 patternsearchparetosearch 在每次迭代中调用的绘图函数。将 PlotFcn 选项设置为内置绘图函数名称或绘图函数的句柄。您可以随时通过单击绘图窗口上的停止按钮来停止该算法。例如,为了显示最佳函数值,请按如下方式设置 options

options = optimoptions("patternsearch",PlotFcn="psplotbestf");

要显示多个图,请使用内置绘图函数名称的元胞数组或函数句柄的元胞数组:

options = optimoptions("patternsearch",...
    PlotFcn={@plotfun1, @plotfun2, ...});

其中 @plotfun1@plotfun2 等是绘图函数的函数句柄。如果指定多个绘图函数,则所有绘图都会作为子绘图出现在同一个窗口中。右键单击任意子图可在单独的图形窗口中获取更大版本。

适用于 patternsearch 或具有单一目标函数的 paretosearch 的绘图函数:

  • "psplotbestf" - 绘制最佳目标函数值。

  • "psplotfuncount" - 绘制函数计算的次数。

  • "psplotmeshsize" - 绘制网格大小图。

  • "psplotbestx" - 绘制当前最佳点。

  • "psplotmaxconstr" - 绘制最大非线性约束违反。

  • 您还可以创建和使用自己的绘图函数。绘图函数的结构 描述了自定义绘图函数的结构。将任何自定义函数作为函数句柄传递。有关示例,请参阅 自定义绘图函数

对于具有多个目标函数的 paretosearch,您可以选择作为函数句柄传递的自定义函数,或者以下任何函数。

  • "psplotfuncount" - 绘制函数计算的次数。

  • "psplotmaxconstr" - 绘制最大非线性约束违反。

  • "psplotdistance" - 绘制距离度量。请参阅 paretosearch 算法

  • "psplotparetof" - 绘制目标函数值。适用于三个或更少的目标。

  • "psplotparetox" - 在参数空间中绘制当前点。适用于三维或更少的维度。

  • "psplotspread" - 绘制传播指标。请参阅 paretosearch 算法

  • "psplotvolume" - 绘制体积指标。请参阅 paretosearch 算法

对于 patternsearchPlotInterval 选项指定连续调用绘图函数之间的迭代次数。

绘图函数的结构

绘图函数的第一行具有以下形式

function stop = plotfun(optimvalues, flag)

该函数的输入参量是

  • optimvalues - 包含有关求解器当前状态信息的结构体。该结构体包含 patternsearch 的以下字段:

    • x - 当前点

    • iteration - 迭代序号

    • fval -目标函数值

    • meshsize - 当前网格大小

    • funccount -函数计算的次数

    • method - 上次迭代中使用的方法

    • TolFun - 最后一次迭代的函数值容差

    • TolX - 上次迭代中 x 值的容差

    • nonlinineq - 非线性不等式约束,仅在指定非线性约束函数时显示

    • nonlineq - 非线性等式约束,仅在指定非线性约束函数时显示

    该结构体包含 paretosearch 的以下字段:

    • x - 当前点

    • fval -目标函数值

    • iteration - 迭代序号

    • funccount -函数计算的次数

    • nonlinineq - 非线性不等式约束,仅在指定非线性约束函数时显示

    • nonlineq - 非线性等式约束,始终为空 []

    • volume - 体积测量(请参阅 paretosearch 算法的定义

    • averagedistance - 距离测量(请参阅 paretosearch 算法的定义

    • spread - 分散测量(请参阅 paretosearch 算法的定义

  • flag - 调用绘图函数的当前状态。flag 的可能值为

    • "init" - 初始化状态

    • "iter" - 迭代状态

    • "interrupt" - 中级阶段

    • "done" - 最终状态

    有关 flag 的详细信息,请参阅 输出函数的结构

传递额外参数 解释如何为函数提供附加参数。

输出参量 stop 提供了一种在当前迭代停止算法的方法。stop 可以具有以下值:

  • false - 算法继续下一次迭代。

  • true - 算法在当前迭代终止。

轮询选项

轮询选项控制模式搜索在每次迭代时如何轮询网格点。

PollMethod 指定算法用于创建网格的模式。每类直接搜索算法都有两种模式:广义模式搜索(GPS)算法、生成集搜索(GSS)算法和网格自适应直接搜索(MADS)算法。这些模式是正基础 2 N 和正基础 N+1:

  • patternsearch"GPSPositiveBasis2N" 的默认模式由以下 2 个 N 向量组成,其中 N 是目标函数的独立变量的数量。

    [1 0 0...0] [0 1 0...0] ...[0 0 0...1] [–1 0 0...0] [0 –1 0...0] [0 0 0...–1].

    例如,如果优化问题有三个独立变量,则模式由以下六个向量组成。

    [1 0 0] [0 1 0] [0 0 1] [–1 0 0] [0 –1 0] [0 0 –1].

  • paretosearch"GPSPositiveBasis2Np2" 的默认模式与 "GPSPositiveBasis2N" 相同,但多出两个点:全一和全负一。

    [1 1 1...1] [–1 –1 –1...–1]

    例如,如果优化问题有三个独立变量,则模式由以下八个向量组成。

    [1 0 0] [0 1 0] [0 0 1] [–1 0 0] [0 –1 0] [0 0 –1] [1 1 1] [–1 –1 –1].

  • "GSSPositiveBasis2N" 模式与 "GPSPositiveBasis2N" 类似,但会调整基向量以考虑线性约束。当当前点靠近线性约束边界时,"GSSPositiveBasis2N""GPSPositiveBasis2N" 更有效。paretosearch 还具有与 "GPSPositiveBasis2Np2" 类似的 "GSSPositiveBasis2Np2" 模式。

  • "MADSPositiveBasis2N" 模式由 2 个 N 随机生成的向量组成,其中 N 是目标函数的独立变量的数量。这是通过随机生成形成线性独立集的 N 向量来实现的,然后使用这个第一个集合和这个集合的负数给出 2 个 N 向量。如上所示,"GPSPositiveBasis2N" 模式是使用线性独立恒等式的正数和负数形成的,但是,对于 "MADSPositiveBasis2N",模式是使用在每次迭代时重新生成的 N×N 线性独立下三角矩阵的随机排列生成的。

    注意

    当问题具有线性等式约束时,您不能使用 MADS 轮询。

  • "GPSPositiveBasisNp1" 模式由以下 N + 1 个向量组成。

    [1 0 0...0] [0 1 0...0] ...[0 0 0...1] [–1 –1 –1...–1].

    例如,如果目标函数有三个独立变量,则模式由以下四个向量组成。

    [1 0 0] [0 1 0] [0 0 1] [–1 –1 –1].

  • "GSSPositiveBasisNp1" 模式与 "GPSPositiveBasisNp1" 类似,但会调整基向量以考虑线性约束。当当前点靠近线性约束边界时,"GSSPositiveBasisNp1""GPSPositiveBasisNp1" 更有效。

  • "MADSPositiveBasisNp1" 模式由 N 个随机生成的向量组成,形成正基,其中 N 是目标函数的独立变量的数量。然后,再生成一个随机向量,得到 N+1 个随机生成的向量。当选择 "MADSPositiveBasisNp1" 时,每次迭代都会生成一个新模式。

    注意

    当问题具有线性等式约束时,您不能使用 MADS 轮询。

  • "OrthoMADSPositiveBasis2N" 模式与 "GPSPositiveBasis2N" 模式相同,后跟 N 维中的随机旋转。

  • "OrthoMADSPositiveBasisNp1" 模式与 "GPSPositiveBasisNp1" 模式相同,后跟 N 维中的随机旋转。

UseCompletePoll 指定是否必须在每次迭代时轮询当前网格中的所有点。UseCompletePoll 可以具有值 truefalseUseCompletePoll 仅当 Algorithm"classic" 时才适用。

  • 如果将 UseCompletePoll 设置为 true,则算法在每次迭代时轮询网格中的所有点,并选择目标函数值最小的点作为下一次迭代的当前点。

  • 如果将 UseCompletePoll 设置为默认值 false,则算法一旦找到目标函数值小于当前点的点就会停止轮询。然后,算法将该点设置为下一次迭代的当前点。

  • 仅对于 paretosearchMinPollFraction 选项指定在轮询期间调查的轮询方向的比例,而不是 UseCompletePoll 的二进制值。要指定完全轮询,请将 MinPollFraction 设置为 1。要指定轮询在找到改善所有目标函数的点后立即停止,请将 MinPollFraction 设置为 0

PollOrderAlgorithm 指定算法在当前网格中搜索点的顺序。PollOrderAlgorithm 仅当 Algorithm"classic" 时才适用。选项包括

  • "Consecutive"(默认)-该算法按连续顺序轮询网格点,即按照 轮询方法 中描述的模式向量的顺序。

  • "Random" -轮询顺序是随机的。

  • "Success" - 每次迭代的第一个搜索方向是算法在上一次迭代中找到最佳点的方向。在第一个点之后,该算法按照与 "Consecutive" 相同的顺序轮询网格点。

多目标选项

paretosearch 求解器主要使用 patternsearch 选项。一些可用的内置绘图函数有所不同;请参阅 绘图选项。以下选项仅适用于 paretosearch

表中,N 代表决策变量的数量。

多目标模式搜索选项

选项定义允许和 {Default }
ParetoSetSize帕累托集中的点数。正整数 | {max(60,number of objectives) }
ParetoSetChangeTolerance对解体积或扩散变化的容忍度。当这两个测量值中的任何一个相对变化小于 ParetoSetChangeTolerance 时,迭代结束。有关详细信息,请参阅停止条件正标量 | {1e-4}
MinPollFraction要轮询的模式的最小部分。从 0 到 1 的标量 | {0}
InitialPoints

paretosearch 的初始点。使用这些数据类型之一:

  • 具有 nvars 列的矩阵,其中每行代表一个初始点。

  • 包含以下字段的结构体(除 X0 之外,所有字段都是可选的):

    • X0 - 具有 nvars 列的矩阵,其中每行代表一个初始点。

    • Fvals - 包含 numObjectives 列的矩阵,其中每一行代表 X0 中对应点的目标函数值。

    • Cineq - 包含 numIneq 列的矩阵,其中每一行代表 X0 中对应点的非线性不等式约束值。

如果 FvalsCineq 字段中缺少条目,则 paretosearch 会计算缺失的值。

具有 nvars 列的矩阵 | 结构体 | {[]}

搜索选项

SearchFcn 选项指定算法在轮询之前的每次迭代中可以执行的可选搜索。如果搜索返回一个能够改善目标函数的点,则该算法将在下次迭代中使用该点并省略轮询。如果选择相同的 SearchFcnPollMethod,则仅使用轮询方法,尽管当所选选项不同时会同时使用这两种方法。

您仅可以为 "classic" 算法选择轮询方法作为搜索方法。

SearchFcn 的值如下所示。

  • [] 是默认值,不指定搜索步骤。

  • 任何内置轮询算法:"GPSPositiveBasis2N""GPSPositiveBasisNp1""GSSPositiveBasis2N""GSSPositiveBasisNp1""MADSPositiveBasis2N""MADSPositiveBasisNp1""OrthoMADSPositiveBasis2N""OrthoMADSPositiveBasisNp1"

  • "searchga" 指定使用遗传算法进行搜索。您可以使用两个附加参数修改遗传算法搜索:

    options = optimoptions("patternsearch",SearchFcn=...
           {@searchga,iterlim,optionsGA})
    • iterlim - 正整数,指定执行遗传算法搜索的模式搜索的迭代次数。iterlim 的默认值为 1。建议不要更改此值,因为多次执行这些耗时的搜索不太可能改善结果。

    • optionsGA -遗传算法的选项,您可以使用 optimoptions 进行设置。如果您未指定任何 searchga 选项,则 searchga 将使用与 patternsearch 相同的 UseParallelUseVectorized 选项设置。

  • "searchlhs" 指定拉丁超立方体搜索。patternsearch 按如下方式生成搜索的每个点。对于每个分量,对向量 [1,2,...,k] 减去 rand(1,k) 进行随机排列,然后除以 k。(k 是点数。)这会产生 k 个点,其中每个分量的间距都接近均匀。然后缩放所得点以适合任何边界。Latin hypercube 使用 -11 的默认边界。

    搜索的方式取决于 UseCompleteSearch 选项的设置。

    • 如果将 UseCompleteSearch 设置为 true,算法轮询拉丁超立方体搜索在每次迭代中随机生成的所有点,并选择目标函数值最小的点。

    • 如果将 UseCompleteSearch 设置为 false(默认值),则算法一旦找到目标函数值小于当前点的随机生成的点之一,就会停止轮询,并选择该点进行下一次迭代。

    您可以使用两个附加参数修改拉丁超立方体搜索:

    options = optimoptions("patternsearch",SearchFcn=...
        {@searchlhs,iterlim,level})
    • iterlim - 正整数,指定执行拉丁超立方体搜索的模式搜索的迭代次数。iterlim 的默认值为 1。

    • level - levelpatternsearch 搜索的点数,一个正整数。level 的默认值是维数的 15 倍。

  • "searchneldermead" 指定使用 fminsearch 进行搜索,该搜索使用 Nelder-Mead 算法。您可以使用两个附加参数修改 Nelder-Mead 搜索:

    options = optimoptions("patternsearch",SearchFcn=...
         {@searchneldermead,iterlim,optionsNM})
    • iterlim - 正整数,指定执行 Nelder-Mead 搜索的模式搜索的迭代次数。iterlim 的默认值为 1。

    • optionsNM - fminsearch 的选项,您可以使用 optimset 函数创建。

  • "rbfsurrogate" 指定使用径向基函数替代进行搜索,类似于 surrogateopt 替代(请参阅 替代优化算法)。替代由最近的 N+1 或更多评估点形成,其中 N 是变量的数量(x0 的大小)。在算法评估 10*N 个点之后,替代被重置(删除),并且新替代的点来自重置后的点。径向基函数至少需要 N+1 个点,因此重置后,直到算法评估至少 N+1 个额外点后,搜索才会运行。替代要求所有变量都有上限和下界。如果您不提供边界,算法将根据最近的点列表构建一个边界。因此,当您没有为某些变量提供边界时,算法会执行更多的计算并且运行速度会稍微慢一些。无论如何,此搜索函数相对耗时,因此最适合与耗时的目标函数一起使用。

  • Custom 使您能够编写自己的搜索函数。

    options = optimoptions("patternsearch",SearchFcn=@myfun);

    要查看可用于编写自己的搜索函数的模板,请输入

    edit searchfcntemplate

    以下部分描述了搜索函数的结构体。

搜索函数的结构

您的搜索函数必须具有以下调用语法。

function [successSearch,xBest,fBest,funccount] = ...
    searchfcntemplate(fun,x,A,b,Aeq,beq,lb,ub, ...
        optimValues,options)

搜索函数具有以下输入参量:

  • fun - 目标函数

  • x - 当前点

  • A,b - 线性不等式约束

  • Aeq,beq - 线性等式约束

  • lb,ub - 下限和上界约束

  • optimValues - 使您能够设置搜索选项的结构体。该结构体包含以下字段:

    • x - 当前点

    • fval - x 处的目标函数值

    • iteration - 当前迭代次数

    • funccount - 用户函数评估计数器

    • scale - 用于缩放设计点的比例因子

    • problemtype - 传递给搜索例程的标志,指示问题是 'unconstrained''boundconstraints' 还是 'linearconstraints'。该字段是非线性约束问题的子问题类型。

    • meshsize - 搜索步骤中使用的当前网格大小

    • method - 上次迭代中使用的方法

  • options - 模式搜索选项

该函数具有以下输出参量:

  • successSearch - 表示搜索是否成功的布尔标识符

  • xBest,fBest - 通过搜索方法找到的最佳点和最佳函数值

  • funccount - 搜索方法中用户函数评估的次数

有关示例,请参阅搜索和轮询

完整搜索

当将 SearchFcn 设置为 "GPSPositiveBasis2N""GPSPositiveBasisNp1""GSSPositiveBasis2N""GSSPositiveBasisNp1""MADSPositiveBasis2N""MADSPositiveBasisNp1""searchlhs" 时,将应用 UseCompleteSearch 选项。UseCompleteSearch 可以具有值 truefalse

对于轮询算法的搜索函数,UseCompleteSearch 与轮询选项 UseCompletePoll 具有相同的含义。有关拉丁超立方体搜索中 UseCompleteSearch 的含义,请参阅 搜索选项 中的 "searchlhs" 条目。

网格选项

网格选项控制模式搜索使用的网格。有以下选项可用。

  • InitialMeshSize 指定初始网格的大小,即从初始点到网格点的最短向量的长度。InitialMeshSize 必须是正标量。默认值为 1.0

  • MaxMeshSize 指定网格的最大尺寸。当达到最大尺寸时,网格大小在成功迭代后不会增加。MaxMeshSize 必须是正标量,并且仅在选择 GPS 或 GSS 算法作为轮询或搜索方法时使用。默认值为 Inf。MADS 使用的最大尺寸为 1

  • AccelerateMesh 指定当网格大小较小时,每次迭代失败后是否将 MeshContractionFactor 乘以 0.5AccelerateMesh 可以取值 true(使用加速器)或 false(不使用加速器),默认值为 AccelerateMesh 仅适用于 GPS 和 GSS 轮询算法以及 "classic" 算法。

  • MeshRotate 仅当 PollMethod"GPSPositiveBasisNp1""GSSPositiveBasisNp1" 时才适用。MeshRotate = "On" 指定在轮询失败后,当网格大小小于 MeshTolerance 选项的 1/100 时,网格向量将乘以 -1。换句话说,在第一次使用小网格大小轮询失败后,算法不再沿方向 ei(单位正方向)和 –Σ ei 轮询,而是沿方向 – ei 和 Σ ei 轮询。MeshRotate 可以具有值 "Off""On"(默认值)。

    • MeshRotate 对于不连续函数特别有用。

    • 当问题有等式约束时,MeshRotate 被禁用。

  • ScaleMesh 指定算法是否通过将模式向量小心地乘以与当前点(或对于无约束问题,初始点)的分量绝对值的对分量成比例的常数来缩放网格点。ScaleMesh 可以具有值 falsetrue(默认值)。当问题对于 "classic" 算法具有等式约束时,ScaleMesh 将被禁用。

  • MeshExpansionFactor 指定轮询成功后网格大小增加的因子。默认值为 2.0,表示轮询成功后,网格大小乘以 2.0MeshExpansionFactor 必须是正标量,并且仅在选择 GPS 或 GSS 方法作为轮询或搜索方法且 Algorithm 选项为 "classic" 时使用。MADS 使用 4.0MeshExpansionFactor。有关详细信息,请参阅网格扩张和收缩

  • MeshContractionFactor 指定轮询失败后网格大小减小的因子。默认值为 0.5,表示轮询失败后网格大小将乘以 0.5MeshContractionFactor 必须是正标量,并且仅在选择 GPS 或 GSS 方法作为轮询或搜索方法且 Algorithm 选项为 "classic" 时使用。MADS 使用 0.25MeshContractionFactor。有关详细信息,请参阅网格扩张和收缩

约束参数

有关惩罚参数的含义的信息,请参阅用于模式搜索的非线性约束求解算法

  • InitialPenalty - 指定非线性约束算法使用的惩罚参数的初始值。InitialPenalty 必须大于或等于 1,默认值为 10

  • PenaltyFactor - 当问题未解决到所需的精度且约束不满足时,增加惩罚参数。PenaltyFactor 必须大于 1,默认值为 100

TolBind 指定从当前点到可行区域边界的距离相对于线性约束的容差。这意味着 TolBind 指定线性约束何时处于活动状态。TolBind 不是停止条件。主动线性约束改变了 patternsearch 用于轮询或搜索的点的模式。TolBind 的默认值是 1e-3

缓存选项

模式搜索算法可以记录已经轮询过的点,这样它就不必多次轮询同一个点。如果目标函数需要相对较长的时间来计算,则缓存选项可以加快算法的速度。为记录点而分配的内存称为缓存。此选项只应用于确定性目标函数,而不应用于随机函数。

Cache 指定是否使用缓存。选项为 "On""Off",默认。当您将 Cache 设置为 "On" 时,该算法不会评估缓存中某个点的 CacheTol 范围内的任何网格点的目标函数。

CacheTol 指定网格点与缓存中的点之间的距离,以便算法可以忽略对它的轮询。CacheTol 必须是正标量。默认值为 eps

CacheSize 指定缓存的大小。CacheSize 必须是正标量。默认值为 1e4

注意

当并行运行求解器时,Cache 不起作用。

有关详细信息,请参阅使用缓存

停止条件

停止标准决定导致模式搜索算法停止的原因。模式搜索使用以下标准:

MeshTolerance 指定网格大小的最小容差。如果网格大小小于 MeshTolerance,GPS 和 GSS 算法将停止。当网格大小小于 MeshTolerance^2 时,MADS 2N 停止。当网格大小小于 (MeshTolerance/nVar)^2 时,MADS Np1 停止,其中 nVarx0 的元素数量。MeshTolerance 的默认值是 1e-6

MaxIterations 指定算法执行的最大迭代次数。如果迭代次数达到 MaxIterations,算法将停止。默认值是独立变量数量的 100 倍。

MaxFunctionEvaluations 指定目标函数的最大评估次数。如果函数计算的次数达到 MaxFunctionEvaluations,则算法停止。默认值是独立变量数量的 2000 倍。

MaxTime 指定模式搜索算法在停止之前运行的最大时间(以秒为单位)。这还包括模式搜索算法的任何指定暂停时间。

StepTolerance 指定两次连续迭代中当前点之间的最小距离。不适用于 MADS 轮询。轮询不成功后,如果两个连续点之间的距离小于 StepTolerance 且网格大小小于 StepTolerance,则算法停止。默认值为 1e-6

FunctionTolerance 指定目标函数的最小容差。不适用于 MADS 轮询。轮询不成功后,如果前一个最佳点的函数值与当前最佳点的函数值之间的差小于 FunctionTolerance,并且网格大小也小于 StepTolerance,则算法停止。默认值为 1e-6

有关示例,请参阅设置求解器容差

ConstraintTolerance 不被用作停止条件。它用于确定非线性约束的可行性。默认值为 1e-6

输出函数选项

OutputFcn 指定模式搜索算法在每次迭代时调用的函数。对于输出函数文件 myfun.m,设置

options = optimoptions("patternsearch",OutputFcn=@myfun);

对于多个输出函数,请输入函数句柄的元胞数组:

options = optimoptions('patternsearch",...
    OutputFcn={@myfun1,@myfun2,...});

要查看可用于编写自己的输出函数的模板,请输入

edit psoutputfcntemplate

在 MATLAB® 命令提示符下。

要在输出函数中传递额外参数,请使用 匿名函数

输出函数的结构

您的输出函数必须具有以下调用语法:

[stop,options,optchanged] = myfun(optimvalues,options,flag)

MATLAB 将 optimvaluesoptionsflag 数据传递给您的输出函数,输出函数返回 stopoptionsoptchanged 数据。

输出函数具有以下输入参量。

  • optimvalues - 包含有关求解器当前状态信息的结构体。该结构体包含以下字段:

    • x - 当前点

    • iteration - 迭代序号

    • fval - x 处的目标函数值

    • meshsize - 当前网格大小

    • funccount -函数计算的次数

    • method - 最后一次迭代中使用的方法,例如对于非线性约束问题使用 'Update multipliers''Increase penalty',对于没有非线性约束的问题使用 'Successful Poll''Refine Mesh''Successful Search'(可能带有 '\Rotate' 后缀)

    • TolFun - 最后一次迭代中函数值变化的绝对值

    • TolX - 上次迭代中 x 的变化范数

    • nonlinineq - x 处的非线性不等式约束函数值,仅在指定非线性约束函数时显示

    • nonlineq - x 处的非线性等式约束函数值,仅在指定非线性约束函数时显示

  • options - 选项

  • flag - 调用输出函数的当前状态。flag 的可能值为

    • 'init' - 初始化状态

    • 'iter' - 迭代状态

    • 'interrupt' - 非线性约束问题子问题的迭代

      • flag'interrupt' 时,optimvalues 字段的值适用于子问题迭代。

      • flag'interrupt' 时,patternsearch 不接受 options 中的更改,并且忽略 optchanged

    • 'done' - 最终状态

传递额外参数 解释如何向输出函数提供附加参数。

输出函数向 patternsearch 返回以下参量:

  • stop - 提供一种在当前迭代停止算法的方法。stop 可以有以下值。

    • false - 算法继续下一次迭代。

    • true - 算法在当前迭代终止。

  • options - patternsearch 选项。

  • optchanged - 布尔标志,指示 options 的变化。要更改 options 以进行后续迭代,请将 optchanged 设置为 true

显示到命令窗口选项

Display 指定在模式搜索运行时在命令行上显示多少信息。可用选项包括

  • "final"(默认)- 显示停止的原因。

  • "off" 或等效的 "none" - 不显示任何输出。

  • "iter" - 每次迭代都会显示信息。

  • "diagnose" - 每次迭代都会显示信息。此外,诊断还列出了一些问题信息和从默认值更改的选项。

"iter""diagnose" 都显示以下信息:

  • Iter - 迭代序号

  • FunEval -函数计算的累计次数

  • MeshSize - 当前网格大小

  • FunVal - 当前点的目标函数值

  • Method - 当前轮询的结果(未指定非线性约束函数)。使用非线性约束函数,Method 显示子问题解决后使用的更新方法。

  • Max Constraint - 最大非线性约束违反(仅在指定了非线性约束函数时显示)

向量化和并行选项

您可以选择以串行、并行或向量化的方式评估目标和约束函数。将 UseVectorizedUseParallel 选项设置为 true 以使用向量化或并行计算。

注意

要对 "classic" 算法使用向量化或并行轮询,必须将 UseCompletePoll 设置为 true。同样,对于 "classic" 算法,将 UseCompleteSearch 设置为 true 以进行向量化或并行搜索。

从 R2019a 开始,当您将 UseParallel 选项设置为 true 时,patternsearch 会在内部将 UseCompletePoll 设置覆盖为 true,以便该函数轮询。

  • UseVectorizedfalse 时,patternsearch 会在循环遍历网格点时一次在一个点上调用目标函数。(假设 UseParallel 为其默认值 false。)

  • UseVectorizedtruepatternsearch 一次在网格中的所有点上调用目标函数,即在一次调用中调用目标函数。

    如果存在非线性约束,目标函数和非线性约束都需要向量化,以便算法以向量化的方式计算。

    有关详细信息和示例,请参阅 向量化目标和约束函数

  • UseParalleltrue 时,patternsearch 使用您建立的并行环境并行调用目标函数(请参阅 如何在 Global Optimization Toolbox 中使用并行处理)。在命令行中,将 "UseParallel" 设置为 false 以进行串行计算。

注意

您不能同时使用向量化和并行计算。如果将 UseParallel 设置为 true 并将 UseVectorized 设置为 true,则 patternsearch 将以向量化的方式评估您的目标和约束函数,而不是并行评估。

如何评估目标函数和约束函数

假设 UseCompletePoll = trueUseVectorized = falseUseVectorized = true
UseParallel = false串行向量化
UseParallel = true并行向量化

模式搜索算法选项表

所有算法的选项可用性表

选项描述算法可用性
AccelerateMesh

加速网孔尺寸的收缩。

GPS 和 GSS,"classic" 算法

Cache

Cache 设置为 "on" 后,patternsearch 会保留其轮询的网格点的历史记录,并且在后续迭代中不会再次轮询靠近它们的点。如果 patternsearch 运行缓慢,请使用此选项,因为它需要很长时间来计算目标函数。如果目标函数是随机的,建议不要使用此选项。

注意

当并行运行求解器时,Cache 不起作用。

全部

CacheSize

缓存的大小(以点数表示)。

全部

CacheTol

正标量指定当前网格点必须与缓存中的点有多近,以便 patternsearch 避免轮询它。如果 "Cache" 选项设置为 "on" 则可用。

全部

ConstraintTolerance

非线性约束的容差。

全部

Display

命令窗口的显示级别。

全部

FunctionTolerance

函数值的容差。

全部

InitialMeshSize

模式搜索算法中使用的初始网格大小。

全部

InitialPenalty

惩罚参数的初始值。

全部

MaxFunctionEvaluations

目标函数评估的最大次数。

全部

MaxIterations

最大迭代次数。

全部

MaxMeshSize

轮询/搜索步骤中使用的最大网格大小。

GPS 和 GSS

MaxTime

允许优化的总时间(以秒为单位)。还包括模式搜索算法的任何指定暂停时间。

全部

MeshContractionFactor

网格收缩因子,在迭代不成功时使用。

GPS 和 GSS,"classic" 算法

MeshExpansionFactor

网格扩展因子,迭代成功时扩展网格。

GPS 和 GSS,"classic" 算法

MeshRotate

在声明某个点为最优之前,先旋转该模式。

GPS Np1 和 GSS Np1

MeshTolerance

网格大小的容差。

全部

OutputFcn

模式搜索在每次迭代时调用的用户指定的函数。

全部

PenaltyFactor

惩罚更新参数。

全部

PlotFcn

指定在运行时绘图的函数。

全部

PlotInterval

指定在每个间隔调用绘图函数。

全部

PollOrderAlgorithm

轮询搜索方向的顺序。

GPS 和 GSS,"classic" 算法

PollMethod

模式搜索中采用的轮询策略。

"classic" 算法

ScaleMesh

变量的自动缩放。

全部

SearchFcn

指定模式搜索中使用的搜索方法。

全部

StepTolerance

对独立变量的容忍度。

全部

TolBind

用于确定线性约束是否有效的约束容差。

全部

UseCompletePoll

围绕当前迭代的完全轮询。评估轮询步骤中的所有要点。

"classic" 算法

UseCompleteSearch

当搜索方法是轮询方法时,围绕当前迭代完成搜索。评估搜索步骤中的所有点。

"classic" 算法

UseParallel

true 时,并行计算轮询或搜索的目标函数。通过设置为 false 来禁用。

全部

UseVectorized

指定目标函数和约束函数是否向量化。

全部