0

我正在处理一个数学优化问题,更详细地说,它是一个半定程序(参见下面的代码片段),用于迭代地解决另一个问题。

要求等式约束满足 ~10^(-10) 或更好。即使我从满足高达 10^(-12) 或更好的约束的矩阵 M 开始优化,优化结果 X 也不能非常接近地满足 X+M 的要求(至少其中两个或三个是只遇到了 10**(-7))。有没有办法提高 cvx (mosek) 满足约束的精度?

旁注:我将优化的初始值作为完全相同问题的解决方案,因此似乎可以产生更高的准确性,但我想这只是幸运。不幸的是,这个矩阵并不接近最小值,所以我需要再做一次迭代。

# defining variable
X = cp.Variable((m,m), hermitian=True)
#pos. semi-definite constraint
constraints = [M+X >> 0]                                             
# all the other constraints
for i in range(0,len(b)):
    constraints += [ cp.trace(A[i]@(M+X)) == b[i]]                     

#problem formulation
prob = cp.Problem(cp.Minimize(cp.real(cp.trace(C@X))), constraints)
Result = prob.solve(solver=cp.MOSEK, verbose = False, parallel = True)

这里 M 和 C 是已知矩阵, A 和 b 分别是矩阵和标量的列表。

我已经尝试在文档和互联网上找到答案,但我找不到解决方案。因此,我将不胜感激任何帮助!

提前致谢!

4

0 回答 0