我正在尝试进行二次规划。我有一个亲和度矩阵A
,我必须最大化某个函数x'*A*x
。这基本上与特征匹配有关,即匹配点到标签
这基本上与在加权图中的主导集和二次函数的局部最大化之间建立连接有关
maximize(f({x} = x^{T}A{x})
受
的约束x \epsilon\Delta, \Delta:\sum_{j}x_j=1
为了解决这个问题,我找到了一种名为复制器方程的方法,由Pavan和Pelillo IEEE PAMI 2007提供
一旦给出初始化x(1)
,离散复制器方程可用于获得局部解x *
x_i(t+1) = x_i(t+1) \frac{(Ax(t))_i}{x(t)^TAx(t)}
当我使用复制器方程时,我得到了正确的结果。但是,当我尝试使用像这样的matlab的quadprog函数来解决它时
X = quadprog(-A,[],[],[],Aeq,Beq,s);
我没有得到正确的价值观。假设我想将7个点与7个标签匹配,我定义了亲和力矩阵,然后使用上面的。但是,使用复制器方程我得到了正确的结果。但仅使用quadprog并没有给我正确的结果。有什么建议吗?
我做错了吗?
答案 0 :(得分:1)
quadprog()
文档显示:
x = quadprog(H,f,A,b,Aeq,beq,lb,ub,x0)
如果没有不等式约束, A
和b
可以是[]
,但它没有说明f
,所以我假设您应该设置f
1}}是zeros
向量。此外,如果您标记为s
的是初始化,那么它不在正确的位置。
你写的行:
X = quadprog(-A,[],[],[],Aeq,Beq,s);
应该是:
X = quadprog(-A,f,[],[],Aeq,Beq,[],[],s);
其中f
是零矢量。
BTW如果这是凸的你不应该需要初始化点,如果它不是凸的,我不确定你能保证找到与复制器方法相同的本地解决方案。
答案 1 :(得分:1)
如果A是正半定的,则最大化问题是凹问题而不是凸问题。如果A是负半定,那么-A是半正定的。你可以在matlab中优化x ^ T(-A)x。
即:
min x^TAx
是凸的,
和
max x^TAx = min x^T(-A)x
是凹的。
如果
A>0 (Positive semidefinite)
而且quadprog需要凸起
由于matlab quadprog失败,我猜你的A是半正的。您可以执行eig(A)来检查所有特征值是否为正,因此您需要一些凹优化解决方案。