热启动最佳实践
在 MATLAB 中使用热启动
lsqlin
和 quadprog
求解器支持使用热启动对象作为增强的初始点。热启动对象存储来自先前解的算法特定数据,以帮助避免求解之间的昂贵的初始化。使用热启动可以显著提高多个求解器调用之间的性能。要使用求解器进行热启动,首先要使用 optimwarmstart
创建一个热启动对象。指定初始点 x0
和使用 optimoptions
创建的选项,包括将 Algorithm
选项设置为 'active-set'
。有关基本示例,请参阅 quadprog
返回热启动对象 和 lsqlin
返回热启动对象。有关更广泛的示例,请参阅热启动 quadprog。
当您求解一系列类似的问题时,使用热启动对象。为获得最佳性能,请遵循以下准则。
保持相同数量的变量。从一个问题到下一个问题,变量的数量必须相同。如果变量数量发生变化,求解器就会发出错误。
不要改变等式约束。如果更改等式约束矩阵
Aeq
或beq
,求解器将无法使用热启动。修改
A
矩阵的几行。当问题仅修改A
矩阵和相应的b
向量的几行(代表约束A*x <= b
)时,热启动最有效。此修改包括添加或删除一个或多个约束。修改
b
向量的几个元素。当问题仅修改b
向量的几个元素时,热启动最有效。更改一些边界约束。当问题仅通过添加、删除或更改上界或下界中的条目来修改几个边界时,热启动最有效。此修改包括将边界设置为
Inf
或 –Inf
。更改目标函数。当您更改表示目标函数的矩阵或向量时,热启动会非常有效 -
H
和f
数组用于quadprog
,或C
和d
数组用于lsqlin
。然而,对这些数组进行大的修改可能会导致效率损失,因为之前的解可能与新的解相差甚远。
热启动的性能提升最终取决于问题的几何形状。对于许多问题而言,问题之间的变化越少,性能优势就越大。
在代码生成中使用热启动和静态内存管理
除了 MATLAB® 热启动指南外,还请遵循以下使用静态内存管理的代码生成指南:
在
optimwarmstart
中设置'MaxLinearEqualities'
和'MaxLinearInequalities'
名称值参量。对所有作为矩阵的求解器输入(
lb
、Aeq
等等)使用coder.varsize
(MATLAB Coder) 宏。
另请参阅
lsqlin
| quadprog
| optimwarmstart
| coder.varsize
(MATLAB Coder)