My program failed in using CVX

Uncategorized
Mar 2, 2022
Z
AT0=AT_k;
BT0=BT_k;
A=[(A_m.*A_m);2];
xi1=zeros(K,1);

lamda_k=zeros(K,1);
e_k=zeros(K,M+1);
for k=1:K
    Vm_k=V(:,:,k);
    [x y]=eig(Vm_k);
    eigenvalue=diag(y);
    lamda_k(k,:)=max(eigenvalue);
    for i=1:length(Vm_k)
        if lamda_k(k,:)==eigenvalue(i)
            break;
        end
    end
    e_k(k,:)=x(:,i)';
end
[~,R_sum] = SINR_generate(K,N,M,H_r,H_t,h_k,f_k,G,w_k,sigma1,sigma2,v,lamda_k);
Rt_k=R_sum;
for k=1:K
    v1=V(:,:,k);
    v0=real(e_k(k,:)*v1*e_k(k,:)')/real(trace(v1))+delta;
    xi1(k,:)=min(1,v0);
end
fprintf("优化之前的xi1\n");
disp(xi1);
 fprintf("V求解\n");
cvx_begin   %quiet % sdp
%     cvx_solver   sedumi   %mosek %sedumi                %
%     cvx_precision low

    variables V(M+1,M+1,K) semidefinite ; 
    variables AT0(K,1) BT0(K,1) Rt_k(K,1) nonnegative;      
    maximize  sum(Rt_k)
    subject to
    sum0=0;
    inv_pos(AT0)<=inv_pos(AT_k);
    BT0>=BT_k;
    for k=1:K
        v1=V(:,:,k);
        g1=Gb_k(:,:,k);
        sum0=sum0+real(trace(v1*g1));
        diag(v1)<=A;
        real(e_k(k,:)*v1*e_k(k,:)')>=real(xi(k,:)*trace(v1));
    end 
    sum0<=P_out;
           for k=1:K
    AT_k0=AT0_k(k,:);
    BT_k0=BT0_k(k,:);
    RBT_k=log2(1+1/(AT_k0*BT_k0))-(AT0(k,:)-AT_k0)/(AT_k0*log(2)*(1+BT_k0*BT_k0))-(BT0(k,:)-BT_k0)/(AT_k0*log(2)*(1+AT_k0*BT_k0));
    RBT_k >= Rt_k(k,:);
           end  
Rt_k>=R_kmin;
cvx_end

for k=1:K
    v1=V(:,:,k);
    v0=abs(real(e_k(k,:)*v1*e_k(k,:)'/trace(v1))+delta);
    xi1(k,:)=min(1,v0);
end
% fprintf("优化之后的xi1\n");
% disp(xi1);
        xi=xi1;
        AT0_k=AT0;
        BT0_k=BT0;
end
Z

The result is failed.
V求解

Calling SDPT3 4.0: 858 variables, 9 equality constraints

num. of constraints = 9
dim. of socp var = 6, num. of socp blk = 2
dim. of linear var = 14
dim. of free var = 838
6 linear variables from unrestricted variable.

*** convert ublk to linear blk
*** convert ublk to linear blk


SDPT3: homogeneous self-dual path-following algorithms


version predcorr gam expon
NT 1 0.000 1
it pstep dstep pinfeas dinfeas gap mean(obj) cputime kap tau theta

0|0.000|0.000|9.0e-01|3.1e+01|3.9e+03| 1.000000e+00| 0:0:00|3.9e+03|1.0e+00|1.0e+00| chol 1 1
1|0.160|0.160|1.0e+00|3.1e+01|4.4e+03|-7.990017e+01| 0:0:00|3.7e+03|1.0e+00|9.8e-01| chol 1 1
2|0.114|0.114|7.8e-01|2.4e+01|3.2e+03|-6.945866e+02| 0:0:00|2.2e+03|1.3e+00|1.0e+00| chol 1 1
3|1.000|1.000|5.4e-01|1.9e+01|5.4e+03|-1.008853e+03| 0:0:00|8.1e+02|8.2e-01|5.0e-01| chol 1 1
4|0.778|0.778|1.9e-01|6.8e+00|2.8e+03|-2.601282e+02| 0:0:00|4.5e+02|5.5e-01|1.2e-01| chol 1 1
5|0.497|0.497|2.5e-01|8.8e+00|5.0e+03|-3.200046e+02| 0:0:00|3.4e+02|4.1e-01|1.1e-01| chol 1 1
6|0.999|0.999|6.9e-02|2.4e+00|1.8e+03|-8.578794e+01| 0:0:00|7.8e+01|3.2e-01|2.4e-02| chol 1 1
7|1.000|1.000|1.0e-01|3.5e+00|5.4e+03|-9.983627e+01| 0:0:00|4.0e+01|1.6e-01|1.8e-02| chol 1 1
8|0.866|0.866|2.2e-02|7.6e-01|1.3e+03|-1.777076e+01| 0:0:00|9.3e+00|1.4e-01|3.5e-03| chol 1 1
9|1.000|1.000|3.6e-02|1.2e+00|4.8e+03|-3.035136e+01| 0:0:00|5.3e+00|6.3e-02|2.5e-03| chol 1 1
10|0.822|0.822|8.9e-03|3.1e-01|1.2e+03|-4.648180e+00| 0:0:00|9.1e-01|6.6e-02|6.5e-04| chol 1 1
11|0.614|0.614|2.9e-02|1.0e+00|1.5e+04|-9.072363e+00| 0:0:00|1.0e+00|1.7e-02|5.6e-04| chol 1 1
12|0.970|0.970|8.6e-03|3.0e-01|3.8e+03| 8.553941e-01| 0:0:00|4.6e-02|2.0e-02|1.9e-04| chol 1 1
13|0.806|0.806|2.9e-03|1.0e-01|6.9e+02| 8.443095e-01| 0:0:00|2.8e-03|3.7e-02|1.2e-04| chol 1 1
14|1.000|1.000|1.6e-03|5.9e-02|3.9e+02| 2.681166e+00| 0:0:00|1.5e-02|3.6e-02|6.6e-05| chol 1 1
15|1.000|1.000|7.3e-04|2.7e-02|1.6e+02| 3.235835e+00| 0:0:00|7.0e-03|4.0e-02|3.2e-05| chol 1 1
16|1.000|1.000|3.8e-04|1.5e-02|7.6e+01| 2.799033e+00| 0:0:00|3.0e-03|4.3e-02|1.8e-05| chol 1 1
17|1.000|1.000|3.4e-04|1.3e-02|1.1e+02| 4.288945e+00| 0:0:00|3.1e-03|2.7e-02|1.0e-05| chol 1 1
18|1.000|1.000|1.3e-04|5.8e-03|4.3e+01| 3.864069e+00| 0:0:00|1.8e-03|2.7e-02|3.9e-06| chol 1 1
19|1.000|1.000|1.4e-04|6.2e-03|8.2e+01| 5.703108e+00| 0:0:00|1.4e-03|1.6e-02|2.3e-06| chol 1 1
20|0.982|0.982|6.7e-05|2.8e-03|3.2e+01| 5.019983e+00| 0:0:00|9.1e-04|1.4e-02|7.4e-07| chol 1 1
21|1.000|1.000|2.0e-04|2.7e-03|4.7e+01| 6.233447e+00| 0:0:00|5.8e-04|9.3e-03|4.7e-07| chol 1 1
22|0.958|0.958|9.4e-04|1.7e-03|2.7e+01| 5.698263e+00| 0:0:00|3.8e-04|7.5e-03|1.8e-07| chol 1 1
23|1.000|1.000|1.3e-03|1.4e-03|2.7e+01| 6.069299e+00| 0:0:00|2.3e-04|5.2e-03|8.5e-08| chol 1 1
24|0.995|0.995|6.0e-03|1.1e-03|2.3e+01| 6.340537e+00| 0:0:00|1.6e-04|3.6e-03|3.4e-08| chol 1 1
25|0.999|0.999|2.9e-02|8.9e-04|2.2e+01| 6.932199e+00| 0:0:00|1.0e-04|2.4e-03|1.4e-08| chol 1 1
26|0.987|0.987|2.1e-01|7.4e-04|1.9e+01| 7.643448e+00| 0:0:00|6.7e-05|1.5e-03|5.9e-09| chol 1 1
27|1.000|1.000|7.6e-01|6.3e-04|1.7e+01| 8.157054e+00| 0:0:00|4.1e-05|1.0e-03|2.2e-09| chol 1 1
28|1.000|1.000|8.8e-01|5.6e-04|2.1e+01| 1.007636e+01| 0:0:00|2.7e-05|5.9e-04|9.3e-10| chol 1 1
29|1.000|1.000|7.7e+00|4.9e-04|1.9e+01| 1.130303e+01| 0:0:00|1.7e-05|3.7e-04|3.4e-10| chol 1 1
stop: primal infeas has deteriorated too much, 8.4e+01 1, 0, 0
30|1.000|1.000|7.7e+00|4.9e-04|1.9e+01| 1.130303e+01| 0:0:00|1.7e-05|3.7e-04|3.4e-10|

number of iterations = 30
primal objective value = 7.86905553e-01
dual objective value = 3.11215418e+01
gap := trace(XZ) = 5.16e+01
relative gap = 3.04e+00
actual relative gap = -9.22e-01
rel. primal infeas = 1.54e+00
rel. dual infeas = 4.12e-01
norm(X), norm(y), norm(Z) = 3.6e+06, 1.3e+07, 1.3e+07
norm(A), norm(b), norm© = 6.3e+01, 1.2e+01, 1.4e+00
Total CPU time (secs) = 0.40
CPU time per iteration = 0.01
termination code = -7
DIMACS: 1.5e+00 0.0e+00 4.1e-01 0.0e+00 -9.2e-01 1.6e+00


Status: Failed
Optimal value (cvx_optval): NaN

And I can not find the reason why it is failed.

M

You have not provided all the input data to make the problem reproducible. have you tired other solvers, such as Mosek, which is commented out?

Also, I believe you need to declare semidefinite and nonnegative one at a time using variable, not variables. I think you are declaring semidefinite and nonnegative as variables, not constraining your declared variables as you intended. So fix this problem first. Then re-try.

http://cvxr.com/cvx/doc/basics.html#variables

The one limitation of the variables command is that it cannot declare complex, integer, or structured variables. These must be declared one at a time, using the singular variable command.

Z
Replying to #3

I have modified the code and use mosek to solve it. But the result is still infeasible. The code pasted is a part of the whole program and I have the input data below. The output is the process of mosek.
初始化A_k
1.0e+07 *

0.7704
3.6352

B_k
1.0e-07 *

0.1000
0.5101

iterV:1
AT_k
1.0e+07 *

0.3518
3.4580

BT_k
1.0e-07 *

0.1000
0.1876

V求解

Calling Mosek 9.1.9: 527 variables, 57 equality constraints

MOSEK Version 9.1.9 (Build date: 2019-11-21 11:34:40)
Copyright © MOSEK ApS, Denmark. WWW: mosek.com
Platform: Windows/64-X86

Problem
Name :
Objective sense : min
Type : CONIC (conic optimization problem)
Constraints : 57
Cones : 2
Scalar variables : 65
Matrix variables : 2
Integer variables : 0

Optimizer started.
Presolve started.
Eliminator - tries : 0 time : 0.00
Lin. dep. - tries : 0 time : 0.00
Lin. dep. - number : 0
Presolve terminated. Time: 0.00
Optimizer terminated. Time: 0.11

Interior-point solution summary
Problem status : PRIMAL_INFEASIBLE
Solution status : PRIMAL_INFEASIBLE_CER
Dual. obj: 4.7175148767e-01 nrm: 1e+07 Viol. con: 0e+00 var: 7e-24 barvar: 0e+00 cones: 0e+00
Optimizer summary
Optimizer - time: 0.11
Interior-point - iterations : 0 time: 0.03
Basis identification - time: 0.00
Primal - iterations : 0 time: 0.00
Dual - iterations : 0 time: 0.00
Clean primal - iterations : 0 time: 0.00
Clean dual - iterations : 0 time: 0.00
Simplex - time: 0.00
Primal simplex - iterations : 0 time: 0.00
Dual simplex - iterations : 0 time: 0.00
Mixed integer - relaxations: 0 time: 0.00


Status: Infeasible
Optimal value (cvx_optval): -Inf

M

Did you change ‘variables’ to individual `variable’ statements?

You should change the scaling of input data so that it is close to 1 in magnitude, not 1e-7.

If it’s still infeasible, follow the advice at https://yalmip.github.io/debugginginfeasible , all of which, except for section 1, also applies to CVX.

Z

Yes,I have modified the code as you advised.
variable V(M+1,M+1,K) semidefinite ;
variable AT0(K,1) nonnegative;
variable BT0(K,1) nonnegative;
variable Rt_k(K,1) nonnegative;
But I want to know how to achieve the scaling of input data, just achieved by normalizing or standardizing real-valued input and output variables?

M

Change the units …

Z

Thanks for your response. I will have a try. :smiley: