模式搜索选项
模式搜索选项
使用 patternsearch 设置 optimoptions 的选项。
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 指定 patternsearch 或 paretosearch 在每次迭代中调用的绘图函数。将 PlotFcn 选项设置为内置绘图函数名称或绘图函数的句柄。您可以通过点击绘图窗口上的停止按钮随时停止该算法。例如,为了显示最佳函数值,请按如下方式设置 options:
options = optimoptions("patternsearch",PlotFcn="psplotbestf");
要显示多个图,请使用内置绘图函数名称的元胞数组或函数句柄的元胞数组:
options = optimoptions("patternsearch",... PlotFcn={@plotfun1, @plotfun2, ...});
其中 @plotfun1、@plotfun2 等是绘图函数的函数句柄。如果指定多个绘图函数,则所有绘图都会作为子绘图出现在同一个窗口中。右键点击任意子图可在单独的图形窗口中获取更大版本。
适用于 patternsearch 或具有单一目标函数的 paretosearch 的绘图函数:
对于具有多个目标函数的 paretosearch,您可以选择作为函数句柄传递的自定义函数,或者以下任何函数。
"psplotfuncount"- 绘制函数计算的次数。"psplotmaxconstr"- 绘制最大非线性约束违反。"psplotdistance"- 绘制距离度量。请参阅 paretosearch 算法。"psplotparetof"- 绘制目标函数值。适用于三个或更少的目标。"psplotparetox"- 在参数空间中绘制当前点。适用于三维或更少的维度。"psplotspread"- 绘制传播指标。请参阅 paretosearch 算法。"psplotvolume"- 绘制体积指标。请参阅 paretosearch 算法。
对于 patternsearch,PlotInterval 选项指定连续调用绘图函数之间的迭代次数。
绘图函数的结构
绘图函数的第一行具有以下形式
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- 算法在当前迭代终止。
注意
绘图函数不支持 subplot 语句,因为绘图函数框架管理轴。要指定多个子图,请编写单独的绘图函数,并将其作为元胞数组传递给求解器:
options = optimoptions("solvername",PlotFcn={@plot1,@plot2,@plot3});输出函数支持 subplot,因此您可以使用输出函数代替绘图函数,在一个函数中包含多个绘图。
轮询选项
轮询选项控制模式搜索在每次迭代时如何轮询网格点。
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还具有与"GSSPositiveBasis2Np2"类似的"GPSPositiveBasis2Np2"模式。"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 可以具有值 true 或 false。UseCompletePoll 仅当 Algorithm 为 "classic" 时才适用。
如果将
UseCompletePoll设置为true,则算法在每次迭代时轮询网格中的所有点,并选择目标函数值最小的点作为下一次迭代的当前点。如果将
UseCompletePoll设置为默认值false,则算法一旦找到目标函数值小于当前点的点就会停止轮询。然后,算法将该点设置为下一次迭代的当前点。仅对于
paretosearch,MinPollFraction选项指定在轮询期间调查的轮询方向的比例,而不是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 |
如果 | 具有 |
搜索选项
SearchFcn 选项指定算法在轮询之前的每次迭代中可以执行的可选搜索。如果搜索返回一个能够改善目标函数的点,则该算法将在下次迭代中使用该点并省略轮询。如果选择相同的 SearchFcn 和 PollMethod,则仅使用轮询方法,尽管当所选选项不同时会同时使用这两种方法。
您仅可以为 "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相同的UseParallel和UseVectorized选项设置。
"searchlhs"指定拉丁超立方体搜索。patternsearch按如下方式生成搜索的每个点。对于每个分量,对向量[1,2,...,k]减去rand(1,k)进行随机排列,然后除以k。(k是点数。)这会产生k个点,其中每个分量的间距都接近均匀。然后缩放所得点以适合任何边界。Latin hypercube使用-1和1的默认边界。搜索的方式取决于
UseCompleteSearch选项的设置。如果将
UseCompleteSearch设置为true,算法轮询拉丁超立方体搜索在每次迭代中随机生成的所有点,并选择目标函数值最小的点。如果将
UseCompleteSearch设置为false(默认值),则算法一旦找到目标函数值小于当前点的随机生成的点之一,就会停止轮询,并选择该点进行下一次迭代。
您可以使用两个附加参数修改拉丁超立方体搜索:
options = optimoptions("patternsearch",SearchFcn=... {@searchlhs,iterlim,level})
iterlim- 正整数,指定执行拉丁超立方体搜索的模式搜索的迭代次数。iterlim的默认值为 1。level-level是patternsearch搜索的点数,一个正整数。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- 搜索方法中用户函数评估的次数
有关示例,请参阅搜索和轮询。
完整搜索
当将 UseCompleteSearch 设置为 SearchFcn、"GPSPositiveBasis2N"、"GPSPositiveBasisNp1"、"GSSPositiveBasis2N"、"GSSPositiveBasisNp1"、"MADSPositiveBasis2N" 或 "MADSPositiveBasisNp1" 时,将应用 "searchlhs" 选项。UseCompleteSearch 可以具有值 true 或 false。
对于轮询算法的搜索函数,UseCompleteSearch 与轮询选项 UseCompletePoll 具有相同的含义。有关拉丁超立方体搜索中 UseCompleteSearch 的含义,请参阅 搜索选项 中的 "searchlhs" 条目。
网格选项
网格选项控制模式搜索使用的网格。有以下选项可用。
InitialMeshSize指定初始网格的大小,即从初始点到网格点的最短向量的长度。InitialMeshSize必须是正标量。默认值为1.0。MaxMeshSize指定网格的最大尺寸。当达到最大尺寸时,网格大小在成功迭代后不会增加。MaxMeshSize必须是正标量,并且仅在选择 GPS 或 GSS 算法作为轮询或搜索方法时使用。默认值为Inf。MADS 使用的最大尺寸为1。AccelerateMesh指定当网格大小较小时,每次迭代失败后是否将MeshContractionFactor乘以0.5。AccelerateMesh可以取值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可以具有值false或true(默认值)。当问题对于"classic"算法具有等式约束时,ScaleMesh将被禁用。MeshExpansionFactor指定轮询成功后网格大小增加的因子。默认值为2.0,表示轮询成功后,网格大小乘以2.0。MeshExpansionFactor必须是正标量,并且仅在选择 GPS 或 GSS 方法作为轮询或搜索方法且Algorithm选项为"classic"时使用。MADS 使用4.0的MeshExpansionFactor。有关详细信息,请参阅网格扩张和收缩。MeshContractionFactor指定轮询失败后网格大小减小的因子。默认值为0.5,表示轮询失败后网格大小将乘以0.5。MeshContractionFactor必须是正标量,并且仅在选择 GPS 或 GSS 方法作为轮询或搜索方法且Algorithm选项为"classic"时使用。MADS 使用0.25的MeshContractionFactor。有关详细信息,请参阅网格扩张和收缩。
约束参数
有关惩罚参数的含义的信息,请参阅用于模式搜索的非线性约束求解算法。
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 停止,其中 nVar 是 x0 的元素数量。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 将 optimvalues、options 和 flag 数据传递给您的输出函数,输出函数返回 stop、options 和 optchanged 数据。
输出函数具有以下输入参量。
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- 最大非线性约束违反(仅在指定了非线性约束函数时显示)
向量化和并行选项
您可以选择以串行、并行或向量化的方式评估目标和约束函数。将 UseVectorized 或 UseParallel 选项设置为 true 以使用向量化或并行计算。
注意
要对 "classic" 算法使用向量化或并行轮询,必须将 UseCompletePoll 设置为 true。同样,对于 "classic" 算法,将 UseCompleteSearch 设置为 true 以进行向量化或并行搜索。
从 R2019a 开始,当您将 UseParallel 选项设置为 true 时,patternsearch 会在内部将 UseCompletePoll 设置覆盖为 true,以便该函数轮询。
当
UseVectorized为false时,patternsearch会在循环遍历网格点时一次在一个点上调用目标函数。(假设UseParallel为其默认值false。)UseVectorized是true,patternsearch一次在网格中的所有点上调用目标函数,即在一次调用中调用目标函数。如果存在非线性约束,目标函数和非线性约束都需要向量化,以便算法以向量化的方式计算。
有关详细信息和示例,请参阅 向量化目标和约束函数。
当
UseParallel为true时,patternsearch使用您建立的并行环境并行调用目标函数(请参阅 如何在 Global Optimization Toolbox 中使用并行处理)。在命令行中,将"UseParallel"设置为false以进行串行计算。
注意
您不能同时使用向量化和并行计算。如果将 UseParallel 设置为 true 并将 UseVectorized 设置为 true,则 patternsearch 将以向量化的方式评估您的目标和约束函数,而不是并行评估。
如何评估目标函数和约束函数
假设 UseCompletePoll = true | UseVectorized = false | UseVectorized = true |
|---|---|---|
UseParallel = false | 串行 | 向量化 |
UseParallel = true | 并行 | 向量化 |
模式搜索算法选项表
所有算法的选项可用性表
| 选项 | 描述 | 算法可用性 |
|---|---|---|
AccelerateMesh | 加速网孔尺寸的收缩。 | GPS 和 GSS, |
Cache | 将 注意 当并行运行求解器时, | 全部 |
CacheSize | 缓存的大小(以点数表示)。 | 全部 |
CacheTol | 正标量指定当前网格点必须与缓存中的点有多近,以便 | 全部 |
ConstraintTolerance | 非线性约束的容差。 | 全部 |
Display | 命令窗口的显示级别。 | 全部 |
FunctionTolerance | 函数值的容差。 | 全部 |
InitialMeshSize | 模式搜索算法中使用的初始网格大小。 | 全部 |
InitialPenalty | 惩罚参数的初始值。 | 全部 |
MaxFunctionEvaluations | 目标函数评估的最大次数。 | 全部 |
MaxIterations | 最大迭代次数。 | 全部 |
MaxMeshSize | 轮询/搜索步骤中使用的最大网格大小。 | GPS 和 GSS |
MaxTime | 允许优化的总时间(以秒为单位)。还包括模式搜索算法的任何指定暂停时间。 | 全部 |
MeshContractionFactor | 网格收缩因子,在迭代不成功时使用。 | GPS 和 GSS, |
MeshExpansionFactor | 网格扩展因子,迭代成功时扩展网格。 | GPS 和 GSS, |
MeshRotate | 在声明某个点为最优之前,先旋转该模式。 | GPS Np1 和 GSS Np1 |
MeshTolerance | 网格大小的容差。 | 全部 |
OutputFcn | 模式搜索在每次迭代时调用的用户指定的函数。 | 全部 |
PenaltyFactor | 惩罚更新参数。 | 全部 |
PlotFcn | 指定在运行时绘图的函数。 | 全部 |
PlotInterval | 指定在每个间隔调用绘图函数。 | 全部 |
PollOrderAlgorithm | 轮询搜索方向的顺序。 | GPS 和 GSS, |
PollMethod | 模式搜索中采用的轮询策略。 |
|
ScaleMesh | 变量的自动缩放。 | 全部 |
SearchFcn | 指定模式搜索中使用的搜索方法。 | 全部 |
StepTolerance | 对独立变量的容忍度。 | 全部 |
TolBind | 用于确定线性约束是否有效的约束容差。 | 全部 |
UseCompletePoll | 围绕当前迭代的完全轮询。评估轮询步骤中的所有要点。 |
|
UseCompleteSearch | 当搜索方法是轮询方法时,围绕当前迭代完成搜索。评估搜索步骤中的所有点。 |
|
UseParallel | 当 | 全部 |
UseVectorized | 指定目标函数和约束函数是否向量化。 | 全部 |