私は数学的最適化問題を扱っています。より詳細には、それは半明確なプログラム (以下のコードの一部を参照) であり、別の問題を繰り返し解決するために使用されます。
等式制約が最大 ~10^(-10) またはそれ以上満たされている必要があります。10^(-12) 以下の制約を満たす行列 M を使用して最適化を開始しても、最適化の結果 X は X+M の要件をほとんど満たしていません (そのうちの少なくとも 2 つまたは 3 つが最大 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 はそれぞれ行列とスカラーのリストです。
すでにドキュメントやインターネットで答えを見つけようとしましたが、解決策が見つかりませんでした。したがって、私はどんな助けにも感謝します!
前もって感謝します!