主要内容

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

搜索和轮询

搜索的定义

patternsearch 中,搜索是一种在轮询之前运行的算法。搜索尝试找到一个比当前点更好的点。(更好意味着目标函数值更低。)如果搜索找到一个更好的点,则该更好的点将成为当前点,并且在该迭代中不进行轮询。如果搜索没有找到更好的点,patternsearch 将执行轮询。

默认情况下,patternsearch 不使用搜索。要进行搜索,请参阅 如何使用搜索方法

patternsearch 使用搜索方法包含使用搜索方法的直接搜索的流程图。

patternsearch 使用搜索方法

迭代限制适用于除轮询方法之外的所有内置搜索方法。如果为搜索方法选择了迭代限制,则搜索将一直启用,直到达到迭代限制为止。随后,patternsearch 停止搜索并仅轮询。

如何使用搜索方法

要在 patternsearch 中使用搜索:

  • 优化实时编辑器任务中,在指定求解器选项 > 算法设置 > 搜索函数中选择一个搜索函数。

  • 在命令行中,使用 optimoptions 创建搜索方法的选项。例如,使用拉丁超立方体搜索:

    opts = optimoptions("patternsearch","SearchFcn",@searchlhs);

    有关更多信息,包括所有内置搜索方法的列表,请查阅 patternsearch 函数参考页面和选项参考的 搜索选项 部分。

您可以编写自己的搜索方法。使用 搜索函数的结构 中描述的语法。要在模式搜索中使用您的搜索方法,请将其函数句柄作为自定义函数 (SearchFcn) 选项。

内置搜索类型

  • 轮询方法-您可以使用任何轮询方法作为 "classic" 算法中的搜索算法。patternsearch 将一个轮询步骤作为搜索进行。为了使此类搜索有益,您的搜索类型应该与轮询类型不同。(如果所选的搜索方法与轮询类型相同,则 patternsearch 不会进行搜索。)因此,请将 MADS 搜索与 GSS 或 GPS 轮询一起使用,或者将 GSS 或 GPS 搜索与 MADS 轮询一起使用。

    注意

    仅当 Algorithm 选项为 "classic" 时,您才可以使用轮询方法作为搜索方法。

  • fminsearch,也称为 Nelder-Mead - fminsearch 仅适用于无约束问题。fminsearch 运行至其自然停止条件;它不会只采取一步。因此,仅使用 fminsearch 进行一次迭代。这是默认设置。要更改设置,请参阅 搜索选项

  • ga - ga 按照其自然停止条件运行;它不会只走一步。因此,仅使用 ga 进行一次迭代。这是默认设置。要更改设置,请参阅 搜索选项

  • 拉丁超立方体搜索-在 搜索选项 中描述。默认情况下,搜索 15 个 n 点,其中 n 是变量的数量,并且仅在第一次迭代期间搜索。要更改设置,请参阅 搜索选项

  • "rbfsurrogate" - 如 搜索选项 中所述,使用径向基函数替代进行搜索,类似于 surrogateopt 替代(请参阅 替代优化算法)。这种搜索可以降低函数计算的次数,但相对耗时,因此最适合耗时的目标函数。

何时使用搜索

使用搜索方法有两个主要原因:

提高速度的搜索方法

一般来说,您事先不知道某种搜索方法是否会加快优化速度。因此,在以下情况下请尝试搜索方法:

  • 您正在对类似的问题或具有不同参数的同一问题进行重复的优化。

  • 您可以尝试不同的搜索方法来找到更短的解时间。

搜索并不总能加速优化。有关确实存在的示例,请参阅 搜索和轮询

寻找更好解的方法

由于搜索方法在轮询方法之前运行,因此使用搜索相当于为优化选择不同的起点。此注释适用于 Nelder-Mead、ga 和拉丁超立方体搜索方法,所有这些方法默认在优化开始时运行一次。ga 和拉丁超立方体搜索是随机的,并且可以搜索多个吸引盆

另请参阅

主题