主要内容

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

热启动最佳实践

MATLAB 中使用热启动

lsqlinquadprog 求解器支持使用热启动对象作为增强的初始点。热启动对象存储来自先前解的算法特定数据,以帮助避免求解之间的昂贵的初始化。使用热启动可以显著提高多个求解器调用之间的性能。要使用求解器进行热启动,首先要使用 optimwarmstart 创建一个热启动对象。指定初始点 x0 和使用 optimoptions 创建的选项,包括将 Algorithm 选项设置为 'active-set'。有关基本示例,请参阅 quadprog 返回热启动对象lsqlin 返回热启动对象。有关更广泛的示例,请参阅热启动 quadprog

当您求解一系列类似的问题时,使用热启动对象。为获得最佳性能,请遵循以下准则。

  • 保持相同数量的变量。从一个问题到下一个问题,变量的数量必须相同。如果变量数量发生变化,求解器就会发出错误。

  • 不要改变等式约束。如果更改等式约束矩阵 Aeqbeq,求解器将无法使用热启动。

  • 修改 A 矩阵的几行。当问题仅修改 A 矩阵和相应的 b 向量的几行(代表约束 A*x <= b)时,热启动最有效。此修改包括添加或删除一个或多个约束。

  • 修改 b 向量的几个元素。当问题仅修改 b 向量的几个元素时,热启动最有效。

  • 更改一些边界约束。当问题仅通过添加、删除或更改上界或下界中的条目来修改几个边界时,热启动最有效。此修改包括将边界设置为 Inf 或 – Inf

  • 更改目标函数。当您更改表示目标函数的矩阵或向量时,热启动会非常有效 - Hf 数组用于 quadprog,或 Cd 数组用于 lsqlin。然而,对这些数组进行大的修改可能会导致效率损失,因为之前的解可能与新的解相差甚远。

热启动的性能提升最终取决于问题的几何形状。对于许多问题而言,问题之间的变化越少,性能优势就越大。

在代码生成中使用热启动和静态内存管理

除了 MATLAB® 热启动指南外,还请遵循以下使用静态内存管理的代码生成指南:

  • optimwarmstart 中设置 'MaxLinearEqualities''MaxLinearInequalities' 名称值参量。

  • 对所有作为矩阵的求解器输入(lbAeq 等等)使用 coder.varsize (MATLAB Coder) 宏。

另请参阅

| | | (MATLAB Coder)

主题