hello everyone , I am using CVX to solve an SDP problem. CVX fails to solve the problem .The result is always a full rank matrix, and the constraint condition does not work. Is there any problem with setting it?
Here’s the code:
variable W(mm,mm) semidefinite
variable V(mm,mm) semidefinite
xi=1.312210^(-13); %%% the average electrical noise power is ?98.82 dBm (= 1.312210^(-13) watt)
gamma0=10; %%% the AN power versus SINR threshold on Bob gamma0=10 (=10log(10^1)dB = 10dB)
gammak=1; %%% Eve’s SINR threshold gamma0=1 (= 10log(10^0)dB = 0dB)
minimize (trace(W)+trace(V) )
d1W(d1’) >= gamma0*(d1Vd1’+xi);
dEW(dE’) <= 1*(dEVdE’+xi);
Do you have a log output?
Yes, this is the output :
0.0769 0.1227 0.1227 0.2260
0.3431 0.0971 0.0638 0.0335
Calling SDPT3 4.0: 26 variables, 6 equality constraints
num. of constraints = 6
dim. of sdp var = 8, num. of sdp blk = 2
dim. of linear var = 6
SDPT3: Infeasible path-following algorithms
version predcorr gam expon scale_data
HKM 1 0.000 1 0
it pstep dstep pinfeas dinfeas gap prim-obj dual-obj cputime
0|0.000|0.000|4.4e+00|9.2e+00|6.1e+03| 4.160000e+02 0.000000e+00| 0:0:00| chol 1 1
1|0.989|1.000|4.8e-02|9.8e-02|7.1e+02| 7.603960e+01 -5.839780e+02| 0:0:01| chol 1 1
2|0.984|0.889|7.9e-04|2.9e-02|7.7e+01| 6.621080e+01 -7.768297e+00| 0:0:01| chol 1 1
3|0.773|1.000|1.8e-04|1.1e-03|3.3e+01| 4.267696e+00 -2.850678e+01| 0:0:01| chol 1 1
4|0.984|0.978|2.8e-06|1.6e-04|7.3e-01| 2.717535e-01 -4.346826e-01| 0:0:01| chol 1 1
5|0.989|0.989|3.1e-08|1.2e-05|8.3e-03| 3.076254e-03 -3.931885e-03| 0:0:01| chol 1 1
6|0.989|0.989|3.4e-10|1.1e-06|9.2e-05| 3.382173e-05 5.567096e-05| 0:0:01| chol 1 1
7|0.989|0.989|5.9e-12|1.2e-08|1.0e-06| 3.716696e-07 6.119453e-07| 0:0:01| chol 1 1
8|1.000|0.994|1.2e-13|7.4e-11|1.5e-08| 6.416119e-09 7.397421e-10| 0:0:01| chol 1 1
9|1.000|0.995|2.7e-14|5.3e-13|2.1e-10| 9.120008e-11 2.241573e-10| 0:0:01|
stop: max(relative gap, infeasibilities) < 1.49e-08
number of iterations = 9
primal objective value = 9.12000801e-11
dual objective value = 2.24157314e-10
gap := trace(XZ) = 2.11e-10
relative gap = 2.11e-10
actual relative gap = -1.33e-10
rel. primal infeas (scaled problem) = 2.68e-14
rel. dual " " " = 5.30e-13
rel. primal infeas (unscaled problem) = 0.00e+00
rel. dual " " " = 0.00e+00
norm(X), norm(y), norm(Z) = 5.0e+01, 3.2e+02, 3.2e+02
norm(A), norm(b), norm© = 4.7e+00, 5.1e+01, 3.8e+00
Total CPU time (secs) = 1.04
CPU time per iteration = 0.12
termination code = 0
DIMACS: 5.2e-14 0.0e+00 1.0e-12 0.0e+00 -1.3e-10 2.1e-10
Optimal value (cvx_optval): +9.12001e-11
0.1140 -0.0000 -0.0000 0.0000
-0.0000 0.1140 0.0000 0.0000
-0.0000 0.0000 0.1140 0.0000
0.0000 0.0000 0.0000 0.1140
0.1140 -0.0000 -0.0000 -0.0000
-0.0000 0.1140 -0.0000 -0.0000
-0.0000 -0.0000 0.1140 -0.0000
-0.0000 -0.0000 -0.0000 0.1140
From a quick glance at your data it looks like all coefficients in your problem are essentially zero, so you get a solution that is also essentially zero.
You cannot expect to get anything meaningful if all the input data to your problem are of order 1e-10. You probably want to rescale your data.
Thank you very much for your answer, but these coefficients are all model parameters of an actual communication system. How can we scale it so as not to change the actual performance of the system? Can you give an example to answer it in detail?
When I change d1 dE to [1,2,3,4], [2,3,4,3], The result of the solution is still a full-rank matrix .
Whatever you change d1, dE to then V,W=0 is still a solution, since the xi is essentially zero so we can ignore it, the two main inequalities are homogenous, and the upper bound constraints with 25 are satisfied. Only you know your model well enough to know how deal with it.
Okay, thank you very much for your answers, I will try to transform the coefficients or variables .
By the way, do you know that constraints such as xlog(1+x) can be solved by CVX?
Thank you very much for your answer, but xlog(1+x/y) is different from mine. It contains two variables, but mine only has one. Can I use the rel_entr(y,x) function?
Use @Michal_Adamaszek’s formulation with y = 1.
x*log(1+x) = rel_entr(x+1,1)+rel_entr(1,x+1)
Oh, thank you very much! I will try to solve it.