def test_pf_matrix_completion(self): X = cp.Variable((3, 3), pos=True) obj = cp.Minimize(cp.pf_eigenvalue(X)) known_indices = tuple(zip(*[[0, 0], [0, 2], [1, 1], [2, 0], [2, 1]])) known_values = np.array([1.0, 1.9, 0.8, 3.2, 5.9]) constr = [ X[known_indices] == known_values, X[0, 1] * X[1, 0] * X[1, 2] * X[2, 2] == 1.0, ] problem = cp.Problem(obj, constr) # smoke test. problem.solve(SOLVER, gp=True) optimal_value = problem.value param = cp.Parameter(shape=known_values.shape, pos=True, value=0.5 * known_values) constr = [ X[known_indices] == param, X[0, 1] * X[1, 0] * X[1, 2] * X[2, 2] == 1.0, ] problem = cp.Problem(obj, constr) problem.solve(SOLVER, gp=True, enforce_dpp=True) # now change param to point to known_value, and check we recover # the correct optimal value param.value = known_values problem.solve(SOLVER, gp=True, enforce_dpp=True) self.assertAlmostEqual(problem.value, optimal_value)
def test_pf_matrix_completion(self): X = cvxpy.Variable((3, 3), pos=True) obj = cvxpy.Minimize(cvxpy.pf_eigenvalue(X)) known_indices = tuple(zip(*[[0, 0], [0, 2], [1, 1], [2, 0], [2, 1]])) constr = [ X[known_indices] == [1.0, 1.9, 0.8, 3.2, 5.9], X[0, 1] * X[1, 0] * X[1, 2] * X[2, 2] == 1.0, ] problem = cvxpy.Problem(obj, constr) # smoke test. problem.solve(SOLVER, gp=True)