# Modeling a non-convex SDP

Hi,

This is my objective:

max \sum_{k = 1}^K trace(X A_k) + c_k
s.t trace(X A_k) >= constant - c_k

I’ve relaxed the rank 1 constraint and written the following code.

maximize Obj;
subject to
diag(X) == 1;
trace(X A_k) >= constant - c; \forall k
cvx_end

Is this the correct way to do it?

I don’t know what problem you’re trying to solve. Your CVX “code” isn’t even CVX code.

If you are trying to solve non-convex SDPs, maybe you should be using YALMIP instead of CVX. You might be able to solve them without relaxing non-convexities.

This is the problem that I’m trying to solve. We can ignore log in the original problem.

Also, I tried YALMIP. It throws infeasible (Couldn’t solve) or numerical issues as errors.

What is your difficulty entering the SDR into CVX? It looks straightforward if you use for loop for the last constraint. If A is n by n by K, you can use sum(A,3)for the sum of the A_k.

As to whether that SDR is any good for your purpose, is a different matter, which is out of scope of this forum.

There are some infeasibility issues when I add the constraint. Also, the original problem objective has a sum of logs. Can I still solve it using Cvx?

Infeasibility of the model suggests that the model formulation and/or it’s input data may not be adequate, or your real world problem has no solution.

If the problem you enter in an optimization modeling tool is infeasible, it may also be that any approximation made between that problem and the problem you really want to solve is inadequate.

If the problem involving the sum of logs in the objective function is a convex optimization problem, it might be enterable in CVX.

Before proceeding with CVX, carefully read

1 Like