主要内容

求解时间太长

求解者可能会因为各种原因而花费过多的时间。要诊断原因或快速解决问题,请使用以下一种或多种技术。

启用迭代显示

设置显示选项“通路”.此设置显示求解器迭代的结果。

在MATLAB中实现迭代显示®命令行,输入

Options = optimoptions('solvername”、“显示”、“iter”);

调用解算器选项结构。

有关迭代显示的示例,请参见解释结果.有关更多信息,请参见在迭代显示中寻找什么

使用适当的公差

特别是,如果公差太小,解算器可能无法收敛OptimalityTolerance而且StepTolerance

若要在命令行更改容差,请使用optimoptions如在设置和更改选项

使用绘图函数

您可以使用绘图函数获得关于求解器迭代的更多可视化或详细信息。求解器的函数参考页的选项部分列出了绘图函数。

要在MATLAB命令行中使用绘图函数,请输入

Options = optimoptions('solvername”、“PlotFcn’,{@plotfcn1,@plotfcn2…});

调用解算器选项结构。

有关使用绘图函数的示例,请参见使用绘图函数

使用“lbfgs”HessianApproximation选项

fmincon而且fminunc求解器,如果您有许多变量(数百个或更多)的问题,那么通常您可以通过设置HessianApproximation选项“lbfgs”.这导致了fmincon“内点”算法和fminunc“拟牛顿”算法使用低内存黑森近似。看到求解多变量非线性问题

使CheckGradients

如果你为你的求解器提供了导数(梯度或雅可比矩阵),如果导数不准确,求解器就不能收敛。的详细信息CheckGradients选项,看到检验梯度或雅可比矩阵的有效性

使用Inf而不是一个大的,任意的边界

如果你使用一个很大的任意边界(上或下),求解器可能会花费过多的时间,甚至无法收敛。然而,如果你设置作为边界,求解器可以花费更少的时间,并且可能收敛得更好。

为什么?内点算法可以将初始点设置为有限界的中点。或者,内点算法可以尝试在有限边界之间找到一条“中心路径”。因此,一个较大的任意边界可以不恰当地调整这些组件的大小。相反,出于这些目的,无限边界被忽略了。

要点:有些解算器对每个约束都使用内存,主要是通过约束Hessian。设置绑定为意味着没有约束,因此使用的内存更少,因为约束黑森具有更低的维数。

使用输出函数

您可以使用输出函数获得求解器迭代的详细信息。求解器在每次迭代中调用输出函数。中描述的语法编写输出函数输出函数和图函数语法

有关使用输出函数的示例,请参见优化工具箱的输出函数

尝试不同的算法选项

许多求解器都有可以改变求解时间的选项,但不是以容易预测的方式。通常,算法选项对求解时间有显著影响。

影响解决方案时间的其他选项包括:

  • fmincon“内点”算法-尝试设置BarrierParamUpdate选项预估的

  • “SubproblemAlgorithm”选项“信赖域”“trust-region-reflective”算法-尝试设置“SubproblemAlgorithm”“分解”而不是默认“重心”

  • coneprog-对于大的稀疏问题,尝试设置LinearSolver选项“prodchol”“舒尔”,或“正常”.对于密集的问题,请尝试设置LinearSolver选项“增强”

  • quadprog“interior-point-convex”算法或lsqlin“内点”算法-尝试设置LinearSolver选项“稀疏”“密集”

使用稀疏求解器或乘法函数

大的问题可能会导致MATLAB耗尽内存或时间。下面是一些减少内存使用的建议:

使用并行计算

如果您拥有并行计算工具箱™许可证,您的求解器使用并行计算可能运行得更快。有关更多信息,请参见并行计算