我正在尝试使用带有约束的scipy.optimize.minimize
执行多变量优化,但约束不在每个单独的变量上;相反,它取决于变量的总和。
这是二次目标:
其中A
是m
对称的m
矩阵(m
是点x
和y
)的维度。< / p>
这个功能的衍生物非常好; A
完全消失,使渐变成为我可以预先计算的常量。这是渐变:
这是我用来执行优化的Python代码:
retval = scipy.optimize.minimize(f, A.flatten(),
args = (S, dAi.flatten(), A.shape[0]),
jac = True, method = 'SLSQP')
其中A
是矩阵(展平),S
是包含成对点x
和y
的集合,dAi
是预先计算的渐变矩阵(也是扁平的)。目标函数f
如下所示:
def f(A, S, dfA, k):
A = A.reshape((k, k))
return [np.sum([np.dot(x - y, A).dot(x - y) for x, y in S]), dfA]
然而,这个实现旋转到无穷大,永远不会完成。我无法在任何地方指定求和约束,因为优化方法要求每个变量的约束或不等式约束,而不是聚合。
有没有办法做到这一点,我错过了? This question seemed close但从未得到解决方案。 This question involves multivariate optimization但只是一个不正确推导的问题,this question seems analogous to my problem但涉及到我不使用的Pandas。