Cvx status is falied, how to solve this problem?

Uncategorized
Jan 8, 2023
J
clc,clear;
close all;

 %% paramters
qs = [20,-40]';  
qe = [20,40]'; 
p_u = [5,5,0]';  
p_e = [5,10,0]';  
p_irs = [0,0,20]';
Nt = 4;
w = rand(Nt,1)+1i*rand(Nt,1);
irs_nz =  4;
irs_ny = 4;
irs_antenna_number  = irs_nz*irs_ny;
lambda = 1;
d = 1/2*lambda;
M = irs_nz*irs_ny; 
v = exp(1i*2*pi*rand(M,1)); 
Phi = diag(v);
dis  = norm(qe-qs);  
T =10; 
delta_T = 1; 
N = floor(T/delta_T);
noise_power = 1e-8; 
beta0 = 1e-3; 
gamma = beta0/noise_power;
alpha = 3; 
kappa = 2; 
H_uav = 25;
iter_num = 20;  



%% fixed channel
d_irs_u = norm(p_irs-p_u);
d_irs_e = norm(p_irs-p_e);
theta_AOD_irs_u = acos(p_u(1)/sqrt(p_u(1)^2+p_u(2)^2));
phi_AOD_irs_u = acos(p_irs(3)/sqrt(p_u(1)^2+p_u(2)^2+p_irs(3)^2));
theta_AOD_irs_e =  acos(p_e(1)/sqrt(p_e(1)^2+p_e(2)^2));
phi_AOD_irs_e =acos(p_irs(3)/sqrt(p_e(1)^2+p_e(2)^2+p_irs(3)^2));
vec_irs_u_y = exp(-1i*2*pi*d/lambda*(0:irs_ny-1)'*cos(theta_AOD_irs_u)*sin(phi_AOD_irs_u));
vec_irs_u_z = exp(-1i*2*pi*d/lambda*(0:irs_nz-1)'*cos(phi_AOD_irs_u));
vec_AOD_irs_u = kron(vec_irs_u_y,vec_irs_u_z);
 
vec_irs_e_y = exp(-1i*2*pi*d/lambda*(0:irs_ny-1)'*cos(theta_AOD_irs_e)*sin(phi_AOD_irs_e));
vec_irs_e_z = exp(-1i*2*pi*d/lambda*(0:irs_nz-1)'*cos(phi_AOD_irs_e));
vec_AOD_irs_e = kron(vec_irs_e_y,vec_irs_e_z);

h_iu_hat = sqrt(d_irs_u^(-alpha))*vec_AOD_irs_u;
h_ie_hat = sqrt(d_irs_e^(-alpha))*vec_AOD_irs_e;
 

q = rand(N,2,iter_num+1);
q(:,1,1)=linspace(qs(1),qe(1),T);
q(:,2,1)=linspace(qs(2),qe(2),T);
W1=zeros(2,2,N);
W2=zeros(2,2,N);

iter=1;
theta_n = zeros(N,1);
phi_n = zeros(N,1);
theta_aoa_n = zeros(N,1);
for idx=1:N
    theta_n(idx) = acos(q(idx,1,iter)/sqrt(q(idx,1,iter)^2+q(idx,2,iter)^2));
    phi_n(idx)  = acos(abs(p_irs(3)-H_uav)/sqrt(q(idx,1,iter)^2+q(idx,2,iter)^2+p_irs(3)^2));
    theta_aoa_n(idx) = atan(abs(q(idx,2,iter)-p_irs(2))/abs(q(idx,1,iter)-p_irs(1)));
    
    h_au_hat =  exp(-1i*pi*(0:Nt-1)'*sin(pi/10));
    h_ae_hat =  exp(-1i*pi*(0:Nt-1)'*sin(pi/15));
    
    vec_irs_y = exp(-1i*2*pi*d/lambda*(0:irs_ny-1)'*cos(theta_n(idx))*sin(phi_n(idx)));
    vec_irs_z = exp(-1i*2*pi*d/lambda*(0:irs_nz-1)'*cos(phi_n(idx)));
    vec_AOD_irs = kron(vec_irs_y,vec_irs_z);
    vec_AOA_irs = exp(-1i*pi*(0:Nt-1)'*sin(theta_aoa_n(idx)));
    H_ai_hat = vec_AOD_irs*vec_AOA_irs';
    W1(:,:,idx) = [h_au_hat'*w;h_iu_hat'*Phi*H_ai_hat*w]*[h_au_hat'*w;h_iu_hat'*Phi*H_ai_hat*w]';
    W1(:,:,idx) = (W1(:,:,idx)'+W1(:,:,idx))/2;
    W2(:,:,idx) = [h_ae_hat'*w;h_ie_hat'*Phi*H_ai_hat*w]*[h_ae_hat'*w;h_ie_hat'*Phi*H_ai_hat*w]';
    W2(:,:,idx) = (W2(:,:,idx)'+W2(:,:,idx))/2;
end
u0 = zeros(2,N);
s0 = zeros(2,N);
b0 =zeros(1,N);
for idx=1:N
    u0(1,idx)=sqrt(norm([q(idx,:,iter),H_uav]'-p_u)^(-alpha));
    u0(2,idx)=sqrt(norm([q(idx,:,iter),H_uav]'-p_irs)^(-kappa));
    s0(1,idx)=sqrt(norm([q(idx,:,iter),H_uav]'-p_e)^(-alpha));
    s0(2,idx)=sqrt(norm([q(idx,:,iter),H_uav]'-p_irs)^(-kappa));
    b0(idx) = real(gamma*s0(:,idx)'*W2(:,:,idx)*s0(:,idx));
end

cvx_begin 
variable  a(N,1) 
variable  b(N,1) 
variables q1(2,N) u(2,N) s(2,N)

sum=0;
for n=1:N
    sum = sum + (log(1+a(n))-log(1+b0(n))-(b(n)-b0(n))/(1+b0(n)))/log(2);
end
maximize (sum)
subject to

    for n=1:N
        a(n)<=real(gamma*u0(:,n)'*W1(:,:,n)*u0(:,n)+2*gamma*u0(:,n)'*W1(:,:,n)*(u(:,n)-u0(:,n)));
        real(gamma*s(:,n)'*W2(:,:,n)*s(:,n))<=b(n);
 
    end
    
cvx_end

M

Here is the entire output. Apparently, CVX did not solve the dual, because the output doesn’t say that it did. Apparently, Mosek’s presolve doesn’t have a very high pinion of the model, because it declared dual ill-posed without even invoking the interior point optimizer. I will defer to Mosek personnel for further assessment.

Calling Mosek 10.0.34: 120 variables, 40 equality constraints

MOSEK Version 10.0.34 (Build date: 2023-1-5 10:25:54)
Copyright © MOSEK ApS, Denmark WWW: mosek.com
Platform: Windows/64-X86

Problem
Name :
Objective sense : minimize
Type : CONIC (conic optimization problem)
Constraints : 40
Affine conic cons. : 0
Disjunctive cons. : 0
Cones : 20
Scalar variables : 120
Matrix variables : 0
Integer variables : 0

Optimizer started.
Presolve started.
Linear dependency checker started.
Linear dependency checker terminated.
Eliminator started.
Freed constraints in eliminator : 0
Eliminator terminated.
Eliminator started.
Freed constraints in eliminator : 0
Eliminator terminated.
Eliminator - tries : 2 time : 0.00
Lin. dep. - tries : 1 time : 0.00
Lin. dep. - number : 0
Presolve terminated. Time: 0.06
Optimizer terminated. Time: 0.19

Interior-point solution summary
Problem status : ILL_POSED
Solution status : DUAL_ILLPOSED_CER
Primal. obj: 0.0000000000e+00 nrm: 1e+00 Viol. con: 0e+00 var: 0e+00 cones: 0e+00
Optimizer summary
Optimizer - time: 0.19
Interior-point - iterations : 0 time: 0.09
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: Failed
Optimal value (cvx_optval): NaN

++++++++++++++++++++++++++++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++

Using SeDuMi with CVX’s Successive Approximation method, resulted in

Status: Inaccurate/Solved
Optimal value (cvx_optval): +239.48

with s = matrix of all zeros.

Changing s from variable to input data of a matrix of all zeros, Mosek still declared the problem to be dual ill-posed.

J

thank you, when i use SeDuMi to solve this problem, the solution does not satisify some constraints. How to deal with this problem?

M
Replying to #3

It seems your problem formulation is not very good. Wait for someone from Mosek to post. But you may have to wait until Monday morning in Europe.

M
Replying to #3

It looks clearly unbounded because you can make u arbitrarily large in the correct entries and therefore also a arbitrarily large. It has some large coefficients so it poses problems and that’s why you may see failure/infeasibilty certificate/illposedness certificate depending on how it gets presolved etc.

J
Replying to #5

yes, you are right. some variables are too large or too small, which causes numerical problem. can i set the region of this variables to avoid numerical problem?

M
Replying to #6

This is your model, so you decide. We don’t know what you want to achieve. You are probably missing something since currently it is a bit weird: the u and s are completely decoupled, the optimal s is zero and the problem is unbounded in u.