MATLAB中的二次约束二次规划(QCQP)

4
最近在我的研究中遇到了一个二次约束的二次规划(QCQP)问题。我在MATLAB优化工具箱中找到了一些有用的内容,即'fmincon'函数(带非线性约束的一般非线性优化),它使用'内点算法'来解决包含8个变量、1个等式二次约束和1个不等式二次约束的问题。使用或不使用'Hessian'和'Gradient'的'fmincon'能够提供相当好的解决方案,唯一让我不满意的是效率,因为我需要在主代码中调用它几百万次。我需要找到一些可能更专门针对QCQP的东西,也许可以提高效率。然而,我从netlib和wiki上找到了很多信息,但我不知道该用哪一个,一个一个地尝试会很繁琐,我真的需要一些建议。顺便说一句,我在这个问题中主要使用MATLAB进行编程,但适合c/fortran的语言也是有用的。

如果问题是二次的,请使用“quadprog”。此外,为了让其他人讨论可能更快的算法,您需要提供有关特定问题的更多信息。 - Alex Botev
MATLAB的'quadprog'是一个二次规划求解器,但它只能处理线性等式和不等式约束以及边界。我的问题涉及到无法由它处理的非线性约束。MATLAB的'fmincon'对我的问题非常好,但我正在寻找更高效的东西,因为我需要调用这个函数数百万次。 - ywang
1个回答

4

另一种选择是使用CVX,在这里可以下载。它可以很好地解决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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接