在基于问题的方法和基于解决方案的方法之间做出选择
使用 Global Optimization Toolbox 求解器优化非光滑函数、寻找全局解或解决多目标问题。使用基于问题的方法来更简单地设置和解决问题。
基于问题的特征
| 优点 | 限制 |
|---|---|
| 更易于设置和调试 | 没有方程问题 |
| 更容易针对同一问题运行不同的求解器 | 无自定义数据类型 |
| 自动获取合适的求解器 | 没有 surrogateopt 的检查点文件 |
| 自动加速解在相同耗时函数(通常是模拟)中计算目标和非线性约束的问题 | 无向量化 |
| 您必须转换与基于求解器的方法相关的选项的变量 |
优点:
更易于设置和调试。在基于问题的方法中,您可以使用符号样式变量来创建优化表达式和约束。请参阅 基于问题的全局优化设置。在基于求解器的方法中,您必须将所有变量放入一个向量中,这可能很不方便,尤其是对于较大或不同维度的变量。
更容易针对同一问题运行不同的求解器。一些求解器有不同的调用语法。例如,
surrogateopt中非线性约束的语法与所有其他求解器中的语法不同。要使用基于求解器的方法中的surrogateopt和另一个求解器来运行问题,您必须创建目标函数的不同版本。相比之下,基于问题的方法负责翻译语法,因此您只需要更改求解器名称和可能的一些选项。自动获取合适的求解器。
solve函数会自动选择一个能够处理您的目标和约束的求解器。在基于求解器的方法中,您必须选择合适的求解器。自动加速解在相同耗时函数(通常是模拟)中计算目标和非线性约束的问题。通常,模拟或 ODE 求解器会在同一函数中计算目标和非线性约束。当您使用
fcn2optimexpr将耗时函数转换为优化表达式时,您可以通过将'ReuseEvaluation'参量设置为true来节省解时间。此设置使得求解器在评估目标和非线性约束时避免重新计算耗时的函数。要通过基于求解器的方法节省时间可能需要额外的编程,如示例 同一函数中的目标和非线性约束 所示。
限制:
没有方程问题。您不能使用 Global Optimization Toolbox 求解器来解决
EquationProblem类型的方程问题。但是,您可以通过指定零目标函数和求解器接受的任何约束来解决可行性问题。有关示例,请参阅 使用 surrogateopt 解决可行性问题,基于问题。无自定义数据类型。要使用具有
ga或simulannealbnd的自定义数据类型,您必须使用基于求解器的方法。有关示例,请参阅使用遗传算法优化自定义数据类型和使用自定义数据类型的模拟退火进行多处理器调度。没有针对
surrogateopt的检查点文件。对surrogateopt中的检查点文件使用基于求解器的方法。有关详细信息,请参阅使用检查点文件。没有向量化(请参阅向量化的应用)。如果您的目标函数和任何非线性约束函数都是以向量化方式编写的,则必须使用基于求解器的工作流程来获得向量化的好处。如果您在基于问题的方法中设置
UseVectorized选项,您会收到警告,而不是提高性能。您必须转换与基于求解器的方法相关的选项的变量。例如,自定义输出函数使用基于求解器的语法。使用
varindex将基于问题的变量转换为基于求解器的索引。有关示例,请参阅 使用 varindex 在基于问题的方法中设置选项。