This is my code:
clear all
c0 = 0.6;
d0 = 0.11;
LoS = 1;
NLoS = 20;
%hmin = 350;
L = 1000;
N = 3; %
APs = [-84.5, -21.6, 0; 250.3, 5.9, 0; -331.5, 62.7, 0];
UAV = [0, 0, 0];
dud = [L, 0, 0];
Pmax = 1;
Bt = 1e6;
N_0 = 10^((-169 - 30) / 10);
P_s=1;
beta1 = 0.5; %
beta2 = 0.5; %
P_u=1;%P_u=Pmax
%
%rho0 = -0.011;
rho0=10^(-80/10); %
Omega_NLoS = 20;
Omega_LoS = 1;
%
A = rho0 * 10^(-0.1 * Omega_NLoS);
B = rho0 * (10^(-0.1 * Omega_LoS) - 10^(-0.1 * Omega_NLoS));
%
dm1 = norm(UAV - APs(1, :));
dm2 = norm(UAV - APs(2, :));
dm3 = norm(UAV - APs(3, :));
dm4 = L; %1000
hmin=max([dm1, dm2,dm3, dm4])/tan(pi/12);
%
alpha_var1_l=1.4e-16;alpha_var2_l=1.2e-18;
alpha_var3_l=1.2e-17;alpha_var4_l=1.e-19;
t_l=0.32;
h_u_l=300;
tau_var1_l=14.4e-12;tau_var2_l=13.24e-12;tau_var3_l=13.2e-12;
%
theta_mn = @(hu, dm) atan(hu / dm);
%
PLoS_mn = @(theta_mn) c0 * ( (180/pi * theta_mn) - 15 )^d0;
%
D_mn = @(dm, hu) sqrt(dm^2 + hu^2);
%
PNLoS_mn = @(PLoS_mn) 1 - PLoS_mn;
%
g_mn = @(dm, hu, PLoS_mn, PNLoS_mn) rho0 * D_mn(dm, hu)^(-2) * ( PLoS_mn * 10^(-0.1Omega_LoS) + PNLoS_mn * 10^(-0.1Omega_NLoS) );
%
rsu = @(Ps, giu, gsu) Bt * beta1 * log2(1 + (Ps * giu) / (sum(Ps * gsu) + Bt * beta1 * N_0));
cvx_begin
cvx_solver sedumi
cvx_precision medium
variables h_u pi_var ;
expressions s(4) alpha_var(4) tau_var(3) theta t ;
theta1 = theta_mn(h_u_l, dm1);
theta2 = theta_mn(h_u_l, dm2);
theta3 = theta_mn(h_u_l, dm3);
theta4 = theta_mn(h_u_l, dm4);
PLoS1 = PLoS_mn(theta1);
PLoS2 = PLoS_mn(theta2);
PLoS3 = PLoS_mn(theta3);
PLoS4 = PLoS_mn(theta4);
%
g1 = g_mn(dm1, h_u_l, PLoS1, PNLoS_mn(PLoS1));
g2 = g_mn(dm2, h_u_l, PLoS2, PNLoS_mn(PLoS2));
g3 = g_mn(dm3, h_u_l, PLoS3, PNLoS_mn(PLoS3));
g4 = g_mn(dm4, h_u_l, PLoS4, PNLoS_mn(PLoS4));
%
rsu1 = rsu(P_s, g1, [g2, g3, g4]);
rsu2 = rsu(P_s, g2, [g3, g4]);
rsu3 = rsu(P_s, g3, g4);
rsu4 = rsu(P_s, g4, );
%
alpha_var(1)=g1;alpha_var(2)=g2;alpha_var(3)=g3;alpha_var(4)=g4;
tau_var(1)=g1;tau_var(2)=g2;tau_var(3)=g3;
s(1)=180/piatan(inv_pos(dm1t_l));s(2)=180/piatan(1/dm2t_l);s(3)=180/piatan(1/dm3t_l);s(4)=180/piatan(1/Lt_l);
t=1/h_u_l;
theta = min([rsu1, rsu2, rsu3, rsu4]);
maximize(pi_var)
subject to
%theta=-0.0214e10;
h_u >= hmin; % Constraint (6g) ok
% h_u<=1000;
pi_var <= Ntheta; % Constraint (8c) ok
%pi_var <= Btbeta2log2(1 + (P_u * alpha_var(4)) / (Btbeta2N_0)); % Constraint (14c) ok
pi_var <= Btbeta2*(-rel_entr(1,1 + (P_u * alpha_var(4)) / (Btbeta2N_0)) / log(2)); % Constraint (14c) ok
inv_pos(t) <= h_u; % Constraint (18) ok
% Constraint (28c)ok
%(D_su.^2)./(A + B*c0.*(s_s_u - 15).^d0) <= f_alpha_su
(dm1^2+h_u^2)/(A + B*c0*pow_p((s(1) - 15),d0)) <= 2/alpha_var1_l-alpha_var(1)/alpha_var1_l^2;%
(dm2^2+h_u^2)/(A + B*c0*pow_p((s(2) - 15),d0)) <= 2/alpha_var2_l-alpha_var(2)/alpha_var2_l^2;
(dm3^2+h_u^2)/(A + B*c0*pow_p((s(3) - 15),d0)) <= 2/alpha_var3_l-alpha_var(3)/alpha_var3_l^2;
% Constraint (28d)OK
15 <= s(1) ; s(1) <= (180*inv_pos(pi))*(atan(inv_pos(dm1*t_l))-dm1*inv_pos(1+dm1^2*t_l^2)*(t-t_l));
15 <= s(2) ; s(2) <= (180*inv_pos(pi))*(atan(inv_pos(dm2*t_l))-dm2/(1+dm2^2*t_l^2)*(t-t_l));
15 <= s(3) ; s(3) <= (180*inv_pos(pi))*(atan(inv_pos(dm3*t_l))-dm3/(1+dm3^2*t_l^2)*(t-t_l));
% Constraint (28e)ok
(L^2+h_u^2)/(A + B*c0*pow_p((s(4) - 15),d0)) <= (2/alpha_var4_l-alpha_var(4)/alpha_var4_l^2);
% Constraint (28f)ok
15 <= s(4) ; s(4) <= (180*inv_pos(pi))*(atan(inv_pos(L*t_l))-dm3/(1+L^2*t_l^2)*(t-t_l));
% Constraint (28g)
% log(tau_var(1)) + log(dm1^2+1/(t_l)^2)-(2*(t-t_l))/(dm1^2*(t_l)^3+t_l) >= ...
% log(A+B*c0*((180/pi_var)*atan(h_u_l/dm1) - 15)^d0) + (h_u-h_u_l) * (((180/pi_var)*B*c0*d0*((180/pi_var)*atan(h_u_l/dm1)-15)^(d0-1)*(dm1/(dm1^2+h_u_l^2))) ...
% /(A+B*c0*((180/pi_var)*atan(h_u_l/dm1)-15)^d0));
f41 = ((180*inv_pos(pi))*(B)*(c0)*(d0)*pow_p((180*inv_pos(pi)*atan(h_u_l/dm2)-15),(d0-1))*(dm2/(dm2^2+h_u_l^2)))...
/(A+B*c0*((180*inv_pos(pi))*atan(h_u_l/dm2)-15)^(d0));
-rel_entr(1,tau_var(2)) + -rel_entr(1,dm2^2+inv_pos((t_l)^2))-(2*(t-t_l))/(dm2^2*(t_l)^3+t_l) >= ...
-rel_entr(1,A+B*c0*pow_p((180*inv_pos(pi)*atan(h_u_l/dm2) - 15),d0))+ f41*h_u-f41*h_u_l ;%
-rel_entr(1,tau_var(3)) + -rel_entr(1,dm3^2+1/(t_l)^2)-(2*(t-t_l))/(dm3^2*(t_l)^3+t_l) >= ...
-rel_entr(1,A+B*c0*pow_p((180*inv_pos(pi)*atan(h_u_l/dm3) - 15),d0)) + (h_u-h_u_l) * ...
((180*inv_pos(pi))*B*c0*d0*pow_p((180*inv_pos(pi)*atan(h_u_l/dm3)-15),(d0-1))*(dm3/(dm3^2+h_u_l^2))) ...%
/(A+B*c0*((180*inv_pos(pi))*atan(h_u_l/dm3)-15)^(d0)) ;%
% Constraint (28h)
theta <= Bt*beta1*-rel_entr(1,sum(P_s*alpha_var(1)+P_s*alpha_var(2)+P_s*alpha_var(3))+Bt*beta1*N_0)/log(2)-Bt*beta1 ...
* (-rel_entr(1,sum(P_s*tau_var2_l+P_s*tau_var3_l)+Bt*beta1*N_0)/log(2)+(1/log(2))*(sum(P_s*(tau_var(2)-tau_var2_l)+P_s*(tau_var(3)-tau_var3_l))) ...
/(sum(P_s*tau_var2_l+P_s*tau_var3_l)+Bt*beta1*N_0)) ; %i=1
theta <= Bt*beta1*-rel_entr(1,sum(P_s*alpha_var(2)+P_s*alpha_var(3))+Bt*beta1*N_0)/log(2)-Bt*beta1 ...
* (-rel_entr(1,sum(P_s*tau_var3_l)+Bt*beta1*N_0)/log(2)+(1/log(2))*(sum(P_s*(tau_var(3)-tau_var3_l))) ...
/(sum(P_s*tau_var3_l)+Bt*beta1*N_0) ); %i=2
theta <= Bt*beta1*-rel_entr(1,sum(P_s*alpha_var(3))+Bt*beta1*N_0)/log(2)-Bt*beta1 ...
* (-rel_entr(1,Bt*beta1*N_0)/log(2)+(1/log(2))* 0); %i=3
cvx_end
The running result is:
CVX Warning:
Models involving “rel_entr” or other functions in the log, exp, and entropy
family are solved using an experimental successive approximation method.
This method is slower and less reliable than the method CVX employs for
other models. Please see the section of the user’s guide entitled
The successive approximation method
for more details about the approach, and for instructions on how to
suppress this warning message in the future.
Calling SeDuMi 1.3.4: 33 variables, 6 equality constraints
For improved efficiency, SeDuMi is solving the dual problem.
SeDuMi 1.3.4 by AdvOL, 2005-2008 and Jos F. Sturm, 1998-2003.
Alg = 2: xz-corrector, Adaptive Step-Differentiation, theta = 0.250, beta = 0.500
eqs m = 6, order n = 30, dim = 34, blocks = 5
nnz(A) = 18 + 0, nnz(ADA) = 14, nnz(L) = 10
it : by gap delta rate t/tP t/tD* feas cg cg prec
0 : 3.00E-11 0.000
1 : -1.48E+25 6.54E-26 0.000 0.0000 0.9900 0.9900 -0.60 2 1 7.8E+00
2 : -6.32E+25 1.54E-26 0.000 0.2358 0.9000 0.9000 -0.99 4 6 7.7E+00
3 : -2.41E+26 3.97E-27 0.000 0.2570 0.9000 0.9000 -1.00 5 5 7.5E+00
4 : -8.92E+26 1.04E-27 0.000 0.2633 0.9000 0.9000 -1.00 5 5 7.3E+00
5 : -3.30E+27 2.75E-28 0.000 0.2639 0.9000 0.9000 -1.00 5 5 7.2E+00
6 : -1.23E+28 7.26E-29 0.000 0.2635 0.9000 0.9000 -1.00 5 5 7.0E+00
7 : -4.62E+28 1.91E-29 0.000 0.2626 0.9000 0.9000 -1.00 6 6 6.9E+00
8 : -1.76E+29 4.97E-30 0.000 0.2607 0.9000 0.9000 -1.00 6 6 6.9E+00
9 : -6.82E+29 1.27E-30 0.000 0.2556 0.9000 0.9000 -1.00 6 7 6.8E+00
10 : -2.85E+30 3.02E-31 0.000 0.2381 0.9000 0.9000 -1.00 6 7 6.8E+00
11 : -1.13E+31 3.35E-32 0.000 0.1106 0.9155 0.9000 -1.00 6 7 6.7E+00
12 : -1.28E+32 6.73E-33 0.000 0.2013 0.9000 0.9000 -1.72 6 7 1.4E+01
13 : -2.47E+32 2.84E-33 0.000 0.4215 0.9000 0.6106 -1.53 9 9 1.3E+01
Dual infeasible, primal improving direction found.
iter seconds |Ax| [Ay]_+ |x| |y|
13 0.4 1.4e-32 4.3e+14 2.0e-23 1.7e+23
Detailed timing (sec)
Pre IPM Post
6.800E-02 3.920E-01 1.001E-02
Max-norms: ||b||=1, ||c|| = 4.668225e+23,
Cholesky |add|=0, |skip| = 5, ||L.L|| = 1.
Status: Infeasible
Optimal value (cvx_optval): -Inf
Hope you all can help, thank you.