谁知道MATLAB中函数quadprog的计算复杂度?
Who knows the computational complexity of the function quadprog in MATLAB?
QP 问题是凸的。对于维基来说,这个问题可以在多项式时间内解决。
但是顺序到底是什么?
这是一个有趣的问题,(在我看来)没有明确的答案。我将假设您的问题是凸的,并且您对 运行 时间复杂度(与迭代复杂度相反)感兴趣。
- 如您所知,
QuadProg
不是一种算法,而是解决二次方程式问题的通用名称。它在下面使用一组算法。内点(默认)、信任域和活动集。 Source。
- 根据您的选择,这些算法中的每一个都会有自己的复杂性分析。对于 Trust-Region 和 Active-Set 方法,复杂性分析非常困难。事实上,Active-Set 方法一开始就不是多项式的。存在反例,其中 Active-Set 方法采用指数 "time" 收敛(对于线性规划的单纯形法也是如此)。 Source。
- 现在,假设您选择内点方法,答案仍然不是直截了当的,因为这些方法有多种风格。当 Karmarkar 首次提出此方法时,它是第一个已知的求解线性规划的多项式算法,其复杂度为 O(n^3.5)。 Source。这些界限后来得到了很大的改进。但是,这是针对线性规划的。
- 最后,为了回答您的问题,Ye and Tse proved in 1989 我们可以使用复杂度为 O(n^3) 的内点方法。然而,要知道 MATLAB 是否使用这种内点法的确切风格有点棘手,但 O(n^3) 是我最好的猜测。
当然,我的回答比较理论化;如果您想根据经验对其进行测试,可以通过逐渐增加变量数量并绘制获得估计所需的 CPU 时间来实现。
QP 问题是凸的。对于维基来说,这个问题可以在多项式时间内解决。 但是顺序到底是什么?
这是一个有趣的问题,(在我看来)没有明确的答案。我将假设您的问题是凸的,并且您对 运行 时间复杂度(与迭代复杂度相反)感兴趣。
- 如您所知,
QuadProg
不是一种算法,而是解决二次方程式问题的通用名称。它在下面使用一组算法。内点(默认)、信任域和活动集。 Source。 - 根据您的选择,这些算法中的每一个都会有自己的复杂性分析。对于 Trust-Region 和 Active-Set 方法,复杂性分析非常困难。事实上,Active-Set 方法一开始就不是多项式的。存在反例,其中 Active-Set 方法采用指数 "time" 收敛(对于线性规划的单纯形法也是如此)。 Source。
- 现在,假设您选择内点方法,答案仍然不是直截了当的,因为这些方法有多种风格。当 Karmarkar 首次提出此方法时,它是第一个已知的求解线性规划的多项式算法,其复杂度为 O(n^3.5)。 Source。这些界限后来得到了很大的改进。但是,这是针对线性规划的。
- 最后,为了回答您的问题,Ye and Tse proved in 1989 我们可以使用复杂度为 O(n^3) 的内点方法。然而,要知道 MATLAB 是否使用这种内点法的确切风格有点棘手,但 O(n^3) 是我最好的猜测。
当然,我的回答比较理论化;如果您想根据经验对其进行测试,可以通过逐渐增加变量数量并绘制获得估计所需的 CPU 时间来实现。