I am currently using the BCD algorith. In my previous subproblem, I optimized and obtained the variable R_B
,R_E
,lambda_B
, lambda_E
, xi
, alpha1
, beta1
and V
. In the current subproblem, given the optimized variable mentioned above, I want to optimize the variable W
and Z
. However, is it feasible to optimize the variable W
and Z
(both are hermitian semidefinite) with the target function given constant R_B - R_E
? Additionally, even if I define R_B
,R_E
as variables, the maximum secrecy rate obtained through optimization is at most R_B - R_E
from the optimization result in the previous subproblem. These two questions have been troubling me for a long time. Please help me!
This is my current subproblem:
This is my cvx code:
%% %%%%%%%%%% Given R_B,R_E,lambda_B,lambda_E,xi,alpha1,beta1and V, optimize W,Z %%%%%%%%%%
load Parameter20240102-2.all.mat % optimized R_B,R_E,lambda_B,lambda_E,xi,alpha1,beta1and V in the last sub-problem
RE_l = R_Eve;
TTP1 = [0]; tmp = 0; flag_1 = 0; idx_1 = 0;
while(flag_1 == 0)
cvx_begin
cvx_solver mosek
cvx_precision low
variables R_B R_E;
variable W(N,N) hermitian semidefinite;
variable Z(N,N) hermitian semidefinite;
expression mu;
expressions a11 a12 a21 a22 A;
% LHS Taylor expression
%mu = real(2^RE_l + 2^RE_l*log(2)*(R_E - RE_l));
mu = 2^RE_l + 2^RE_l*log(2)*(R_E - RE_l);
a11 = alpha1.*diag(ones(M, 1)) + lambda_E.*K_E.*K.*diag(diag(H_LOS*Z*H_LOS'))*V -...
K_E.*K.*diag(diag(H_LOS*W*H_LOS'))*V;
%a11 = real(a11);
a12 = (lambda_E.*K_E.*K.*g_hat*diag(diag(H_LOS*Z*H_LOS'))*V - ...
K_E.*K.*g_hat*diag(diag(H_LOS*W*H_LOS'))*V)';
%a12 = real(a12);
a21 = lambda_E.*K_E.*K.*g_hat*diag(diag(H_LOS*Z*H_LOS'))*V - ...
K_E.*K.*g_hat*diag(diag(H_LOS*W*H_LOS'))*V;
%a21 = real(a21);
a22 = (lambda_E.*K_E.*K.*real(trace(V*G_hat*Z*G_hat')) -...
K_E.*K.*real(trace(V*G_hat*W*G_hat')) +...
lambda_E.*K.*real(trace(H_LOS*Z*H_LOS')) -...
K.*real(trace(H_LOS*W*H_LOS')) +...
lambda_E*K_E*M*real(trace(Z)) + lambda_E*M*real(trace(Z)) -...
K_E*M*real(trace(W)) - M*real(trace(W)) - xi) - alpha1.*nu^2;
%a22 = real(a22);
A = [a11, a12; a21, a22];
% objective function
maximize (R_B - R_E)
%maximize (trace(W) + trace(Z))
% Constraints
subject to
% Constraint 1
exp(log(2)*R_B) <= lambda_B + 1;
% Constraint 2
mu >= lambda_E + 1;
% Constraint 3
trace(W) + trace(Z) <= p_D;
% Constraint 4
max(lambda_B, 2^r_B - 1).*(K_B*K*real(trace(V*H_B*Z*H_B')) + K_B*M*real(trace(Z)) +...
K*real(trace(H_LOS*Z*H_LOS')) + M*real(trace(Z)) + sigma_B) <=...
K_B*K*real(trace(V*H_B*W*H_B')) + K_B*M*real(trace(W)) +...
K*real(trace(H_LOS*W*H_LOS')) + M*real(trace(W));
% Constraint 5
%A == semidefinite(M + 1);
A == hermitian_semidefinite(M + 1);
cvx_end
% update
RE_l = R_E;
tmpN = R_B - R_E;
TTP1 = [TTP1 tmpN];
% convergence
if abs(tmpN - tmp)/abs(tmp) < 10^(-2)
flag_1 = 1;
break;
end
tmp = tmpN;
% maximum loop
idx_1 = idx_1 + 1;
if idx_1 >= 30
break;
end
end