最近,我在研究中遇到了二次约束二次规划 (QCQP) 问题。我在 MATLAB 优化工具箱中发现了一些有用的东西,即“fmincon”函数(具有非线性约束的一般非线性优化),它使用“内点算法”来解决我的问题,其中包含 8 个变量、1 个等式二次约束和 1 个不等式二次约束.带有或不带有 'Hessian' 和 'Gradient' 的 'fmincon' 提供了很好的解决方案,我唯一不满意的是效率,因为我需要在我的主代码中调用它像百万次一样。我需要找到一些可能更特定于 QCQP 的东西,可能会提高效率。不过我从netlib和wiki上找了很多资料,但是我没有判断应该用哪一个,而且一个一个尝试很乏味,我真的需要一些建议。顺便说一下,我主要是在 MATLAB 中为这个问题编程,但合适的 c/fortran 也很有用。

-严

最佳答案

另一种方法是使用 CVX available here ,它非常适合 QCQP(以及许多其他类型的问题)。这是一个解决 QCQP 的代码片段:

close all; clear; clc
n = 10;
H = rand(n); H = H*H'; % make spsd
f = -rand(n,1);
Q = rand(n); Q = Q*Q'; % make spsd
g = -rand(n,1);
cvx_begin
    variable x(n)
    0.5*x'*Q*x+g'*x <=0
    x >= 0
    minimize(0.5*x'*H*x + f'*x)
cvx_end

关于matlab - MATLAB 中的二次约束二次规划 (QCQP),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18008628/

10-10 17:28