Recently, I am using the cvx to solve an outage constrained robust beamforming problem. The problem is finally formulated as a convex problem by appling the S-procedure, which is
cvx_begin
variable F(J,J) hermitian semidefinite
variable t(K_num,1)
A = (as_ele_Tx * as_ele_Tx').';
% A = 1/2 *(A + A');
A1 = -1 .* A;
minimize( trace(A1 * F) )
subject to
for ii=1:J
F(ii,ii) <= P;
end
for i = 1:(K_num)
C_i = epsilon .* diag(ones(J,1));
d_i = sqrt(chi2inv(1 - rou, 2 * J) ./ 2);
[-1 .* sqrt(C_i) * F * sqrt(C_i) + t(i) .* diag(ones(J,1)) (-1 .* sqrt(C_i) * F * Hm(i,:)'); ...
(-1 .* sqrt(C_i) * F * Hm(i,:)')' gamma - Hm(i,:) * F * Hm(i,:)' - t(i) * d_i^2] == hermitian_semidefinite( J + 1 );
t(i) >= 0;
end
cvx_end
Specifically, the epsilon in the formulation is zero, which denotes a special scenario of my problem. Then I found that, for some P values, for example, between 0.3 and 2, the problem can be perfectly solved. However, for smaller P like 0.01 and larger P like 5, CVX will fail and gives me something like,
Calling SDPT3 4.0: 9552 variables, 1302 equality constraints
For improved efficiency, SDPT3 is solving the dual problem.
num. of constraints = 1302
dim. of sdp var = 516, num. of sdp blk = 7
dim. of linear var = 42
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|8.3e+01|6.7e+02|3.3e+06| 3.963474e+00 0.000000e+00| 0:0:00| chol 1 1
1|1.000|0.812|1.9e-06|1.3e+02|9.5e+05| 7.102757e+01 3.379866e+02| 0:0:01| chol 1 1
2|1.000|0.989|9.8e-06|1.6e+00|1.2e+04| 7.042052e+01 5.535133e+00| 0:0:01| chol 1 1
3|1.000|1.000|2.1e-07|7.5e-02|5.7e+02| 4.888803e+01 1.165530e+00| 0:0:02| chol 1 1
4|0.988|1.000|1.9e-08|3.8e-02|7.1e+01| 6.888510e+00 1.035422e+00| 0:0:02| chol 1 1
5|1.000|0.665|1.3e-08|2.0e-02|3.0e+01| 9.572384e+00 8.121442e+00| 0:0:02| chol 1 1
6|1.000|1.000|1.1e-09|3.4e-03|3.1e+00| 6.503451e+00 6.809413e+00| 0:0:02| chol 1 1
7|0.989|1.000|8.7e-11|1.0e-03|4.3e-01| 6.472475e+00 6.638532e+00| 0:0:03| chol 1 1
8|1.000|1.000|1.9e-11|3.0e-04|6.7e-02| 6.473451e+00 6.523251e+00| 0:0:03| chol 1 1
9|1.000|0.985|3.7e-12|3.4e-05|5.1e-03| 6.473632e+00 6.480623e+00| 0:0:03| chol 1 1
10|1.000|0.217|6.8e-12|2.8e-05|7.8e-03| 6.471058e+00 6.479344e+00| 0:0:03| chol 1 1
11|0.003|0.003|1.3e-09|2.7e-05|7.8e-03| 6.469931e+00 6.479296e+00| 0:0:03| chol 1 1
12|0.011|0.003|1.4e-09|2.7e-05|8.1e-03| 6.466552e+00 6.479220e+00| 0:0:04|
stop: steps too short consecutively
-------------------------------------------------------------------
number of iterations = 12
primal objective value = 6.47363249e+00
dual objective value = 6.48062327e+00
gap := trace(XZ) = 5.12e-03
relative gap = 3.67e-04
actual relative gap = -5.01e-04
rel. primal infeas (scaled problem) = 3.75e-12
rel. dual " " " = 3.44e-05
rel. primal infeas (unscaled problem) = 0.00e+00
rel. dual " " " = 0.00e+00
norm(X), norm(y), norm(Z) = 4.2e+02, 1.3e-01, 1.3e-01
norm(A), norm(b), norm(C) = 8.6e+01, 5.2e+01, 1.0e+00
Total CPU time (secs) = 3.63
CPU time per iteration = 0.30
termination code = -5
DIMACS: 6.4e-11 0.0e+00 3.5e-05 0.0e+00 -5.0e-04 3.7e-04
-------------------------------------------------------------------
------------------------------------------------------------
Status: Failed
Optimal value (cvx_optval): NaN
What bothers me is that, for larger P, I can understand why it will fail for the corresponding scenario of my application, but for smaller P, it was supposed to be solved more easily but it just failed. So right now I really need some help to figure out why the smaller P will fail.