Below I am sharing siplified code.
Clear_data_Keep_debug;
%% First model the users
User_type = [1 0 1 1 0 ; 1 1 0 1 0] ; % LU=2; NU=1, No users=0
My_Users= sum(User_type~=0,2)’;
LU_index=zeros(2,max(My_Users));
NU_index=zeros(1,max(My_Users));
for ii=1:2
m=1;
n=1;
for j=1:length(User_type)
if User_type(ii,j)==2
LU_index(ii,m) =1;
m=m+1;
else if User_type(ii,j)==1
NU_index(ii,m) =1;
m=m+1;
end
end
if User_type(ii,j)~=1
New_User_type(ii,n)=User_type(ii,j);
n=n+1;
end
end
end
%%%
My_operators=2;
Active_APs= [1 0 1 ; 1 0 1];
My_DAPs=sum((Active_APs==1)’); % Operator 1 and 2 APs
P_max_DAP=1; %%30 dBm
%%%%BS%%%
BW=100;%coherent BW
P_max_SAP=1; %% 42dBm
Tx_AN=2;
noise= 10^-8*ones(My_operators,1);%%% -143 dbW
channel_state=11;
%% USer-AP-locations-----------------
%radius of the cluster
R=75;
%Distance between static AP
%Dis_ST_Ap = 5;
max_Dynamic_AP = max(sum((Active_APs==1)’)) ;
ti = 0:pi/200:2*pi;
Cluster_1 = Rcos(ti);
Cluster_2 = Rsin(ti);
%Generate Static AP…
x_static=[0];
y_static=[0];
%Generate Dynamic AP…
x1_dynamic=[0 -30 40 ; 10 -50 60];
y1_dynamic=[40 -40 -35 ; 40 10 -35 ];
x_dynamic=zeros(2,max_Dynamic_AP);
y_dynamic=zeros(2,max_Dynamic_AP);
%Generate Users…
%User_type = [1 0 0 1 0; 0 0 0 1 0];
x1_Users=[20 -30 30 30 -20; 50 -20 62 10 -60];
y1_Users=[ 10 50 50 -20 -5; 25 40 -5 -40 -40];
x_Users=zeros(2,max(My_Users));
y_Users=zeros(2,max(My_Users));
for ii=1:2
mm=1;
nn=1;
for jj=1:3
if Active_APs(ii,jj)~=0;
x_dynamic(ii,mm)=x1_dynamic(ii,jj);
y_dynamic(ii,mm)=y1_dynamic(ii,jj);
mm=mm+1;
end
end
for jj=1:5
if User_type(ii,jj)~=0;
x_Users(ii,nn)=x1_Users(ii,jj);
y_Users(ii,nn)=y1_Users(ii,jj);
nn=nn+1;
end
end
end
for ii=1:2
for jj=1:max(My_Users)
dis_xm(ii,jj)=x_static-x_Users(ii, jj);
dis_ym(ii,jj)=y_static-y_Users(ii, jj);
distance_SAP_User(ii,jj)= sqrt(dis_xm(ii,jj)^2 + dis_ym(ii,jj)^2);
end
end
for mm=1:2
for ii=1:length(x_dynamic(1,:))
for nn=1:2
for jj=1:length(x_Users(1,:))
dis_xm(mm,ii,nn,jj)=x_dynamic(mm,ii)-x_Users(nn,jj);
dis_ym(mm,ii,nn,jj)=y_dynamic(mm,ii)-y_Users(nn,jj);
distance_DAP_User(mm,ii,nn,jj)= sqrt(dis_xm(mm,ii,nn,jj)^2 + dis_ym(mm,ii,nn,jj)^2);
distance_DAP_User(mm,ii,nn,jj)= sqrt(dis_xm(mm,ii,nn,jj)^2 + dis_ym(mm,ii,nn,jj)^2);
end
end
end
end
save location.mat;
%%
%% channel model-----------
%%%%%%%%%%%%%%%
%% channel model-----------
channel_state=channel_state+1;
%%% Here we write PL and Shadowing together
%%% Fixed randn seed if you want to regenerate the same value :
randn(‘state’, channel_state);
Path_loss_SAP_User_dB= 30log10(distance_SAP_User) + 8randn(My_operators, max(My_Users)); % Pathloss model
Path_loss_DAP_User_dB= 30log10(distance_DAP_User)+ 8randn(My_operators, max(My_DAPs), My_operators, max(My_Users)); % Pathloss model
rand(‘state’, channel_state);
%Ray_fading_SAP_AP = sqrt(1/2)(rand(My_operators,Tx_AN, My_operators, max(My_DAPs)))+ 1irand(My_operators,Tx_AN, My_operators, max(My_DAPs));
Ray_fading_SAP_User = sqrt(1/2)((rand(My_operators,Tx_AN, max(My_Users)))+ 1irand(My_operators,Tx_AN, max(My_Users)));
Ray_fading_DAP_User =sqrt(1/2)((rand(My_operators, max(My_DAPs), Tx_AN,My_operators, max(My_Users)))+ 1irand(My_operators, (max(My_DAPs)),Tx_AN, My_operators, max(My_Users)));
My_channel_SAP_User= Ray_fading_SAP_User.*permute (sqrt( 10.^( (repmat(-Path_loss_SAP_User_dB, [1 1 Tx_AN ]) )./10)), [1 3 2 ]);
My_channel_DAP_User= Ray_fading_DAP_User.*permute (sqrt( 10.^( (repmat(-Path_loss_DAP_User_dB, [1 1 1 1 Tx_AN]) )./10)), [1 2 5 3 4 ]); %sqrt( 10.^(-Path_loss_DAP_User_dB./10));
%% FInd feasible set
T_SAP=P_max_SAP / max(My_Users);
T_DAP=P_max_DAP / (max(My_Users*2));
W_mk_mj_ini= T_SAPrand(1,Tx_AN, max(My_Users))+ T_SAP1irand(1,Tx_AN, max(My_Users));
W_mk_ni_ini= T_DAPrand( max(My_DAPs), Tx_AN, My_operators, max(My_Users) ) + T_DAP1irand(max(My_DAPs), Tx_AN, My_operators, max(My_Users) ) ;
phi_mk_mj_next =[];
chi_mk_mj_next =[];
real_SAP_User_next=[];
imag_SAP_User_next =[];
imag_DAP_User_next =[];
real_DAP_User_next =[];
phi_mk_ni_next =[];
chi_mk_ni_next =[];
for m_oper=1:My_operators
if m_oper==1
opponent=2;
else
opponent=1;
end
W_mk_mj(1, :, find(NU_index(m_oper,:)==0))=0;
% % for k=1: My_DAPs(m_oper)
% % W_mk_ni(k, :, m_oper, find(NU_index(m_oper,:)==0) ) =0;
% % end
% % for k=1: My_DAPs(opponent)
% % W_mk_ni(k, :, opponent, find(NU_index(opponent,:)==0) ) =0;
% % end
for jUser=1:My_Users(m_oper)
real_SAP_User_next(m_oper,jUser)= real(sum( W_mk_mj_ini(1,:,jUser).*My_channel_SAP_User(m_oper,:,jUser)));
imag_SAP_User_next(m_oper,jUser)= imag(sum( W_mk_mj_ini(1,:, jUser).*My_channel_SAP_User(m_oper,:,jUser)));
end
% % for k=1: My_DAPs(m_oper)
% % for n_oper= 1:My_operators
% % for iUser=1: My_Users(n_oper)
% %
% % real_DAP_User_next(m_oper, k, n_oper,iUser)= real(sum (vec( My_channel_DAP_User(m_oper,k, :, n_oper,iUser))’.*W_mk_ni(k,:, n_oper,iUser)));
% % imag_DAP_User_next(m_oper, k, n_oper,iUser )= imag(sum (vec( My_channel_DAP_User(m_oper,k, :, n_oper,iUser))’.*W_mk_ni(k,:, n_oper,iUser)));
% % end
% % end
% % end
%%All interference terms:
Interference_mk_mj_xx=zeros(1,max(My_Users));
%Interference_mk_ni_xx=zeros(max(My_DAPs),My_operators, max(My_Users));
%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
for jUser=1:My_Users(m_oper)
%%%%%%%%%%%%%%%%% SAP-USer %%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for iUser=1: My_Users(m_oper)
if iUser~=jUser
Interference_mk_mj_xx(1, jUser) = Interference_mk_mj_xx(1, jUser) + …
sum_square_abs(My_channel_SAP_User(m_oper,:,jUser).*W_mk_mj_ini(1,:,iUser)); %% SAP-USer
end
end
% % for k=1: My_DAPs(m_oper)
% % for n_oper= 1:My_operators
% % for iUser=1: My_Users(n_oper)
% % Interference_mk_mj_xx(1, jUser) = Interference_mk_mj_xx(1, jUser)+ …
% % sum_square_abs(vec(My_channel_DAP_User(m_oper,k, :, m_oper,jUser))’.*(W_mk_ni(k,:, n_oper,iUser)) ); %%SAP-AP
% %
% % end
% % end
% % end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DAP - User %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% % % for k=1: My_DAPs(m_oper)
% % % for n_oper= 1:My_operators
% % % for iUser=1: My_Users(n_oper)
% % % if m_oper==n_oper
% % % for pUser=1: My_Users(m_oper)
% % % Interference_mk_ni_xx(k, m_oper, iUser) = Interference_mk_ni_xx(k, m_oper, iUser)+…
% % % sum_square_abs(My_channel_SAP_User(m_oper,:,iUser).W_mk_mj(1,:,pUser));
% % %
% % % end
% % % end
% % % for l_oper= 1:My_operators
% % % for pUser=1: My_Users(l_oper)
% % % if l_oper==n_oper & pUser==iUser
% % % Interference_mk_ni_xx(k, n_oper, iUser)=Interference_mk_ni_xx(k, n_oper, iUser)+ 0;
% % % else
% % % Interference_mk_ni_xx(k, n_oper, iUser)= Interference_mk_ni_xx(k, n_oper, iUser)+…
% % % sum_square_abs(vec(My_channel_DAP_User(m_oper,k, :, n_oper,iUser))’.(W_mk_ni(k,:, l_oper,pUser)) );
% % %
% % % end
% % % end
% % % end
% % % end
% % % end
% % % end
for jUser=1:My_Users(m_oper)
phi_mk_mj_next(m_oper,jUser) = Interference_mk_mj_xx(1, jUser)+ BW*noise(m_oper);
chi_mk_mj_next(m_oper,jUser) = (sum_square_abs(My_channel_SAP_User(m_oper,:,jUser)*W_mk_mj_ini(1,:,jUser)’)/ phi_mk_mj_next(m_oper,jUser)) +1 ;
end
% % for k=1:My_DAPs(m_oper)
% % for n_oper=1:My_operators
% % for iUser=1: My_Users(n_oper)
% % phi_mk_ni_next(m_oper, k, n_oper, iUser ) = Interference_mk_ni_xx(k, n_oper, iUser) + BW*noise(m_oper) ;
% % chi_mk_ni_next (m_oper, k, n_oper, iUser ) = (sum_square_abs(vec(My_channel_DAP_User(m_oper,k, :, m_oper,jUser))’.*W_mk_ni(k,:, n_oper,iUser)) / phi_mk_ni_next(m_oper, k, n_oper, iUser ))+1 ;
% % end
% % end
% % end
end
%%
%%% Final code…
run_count=1;
while (run_count==1)
cvx_solver mosek
cvx_begin quiet
cvx_precision low
expressions real_SAP_User(My_operators, max(My_Users)) imag_SAP_User(My_operators, max(My_Users))
expression Interference_mk_mj(My_operators, max(My_Users))
expressions real_DAP_User(My_operators, max(My_DAPs) , My_operators, max(My_Users) ) imag_DAP_User( My_operators, max(My_DAPs) , My_operators, max(My_Users) )
expression Interference_mk_ni(My_operators, max(My_DAPs), My_operators , max(My_Users) )
variable r_mk_mj(My_operators, max(My_Users))
variable r_mk_ni(My_operators, max(My_DAPs), My_operators, max(My_Users) )
%expression R_m(1,1)
variables chi_mk_mj(My_operators, max(My_Users)) phi_mk_mj(My_operators, max(My_Users))
variables chi_mk_ni(My_operators, max(My_DAPs), My_operators, max(My_Users) ) phi_mk_ni(My_operators, max(My_DAPs), My_operators, max(My_Users) )
variable W_mk_mj(My_operators, Tx_AN, max(My_Users)) complex
variable W_mk_ni(My_operators, max(My_DAPs), Tx_AN, My_operators, max(My_Users) ) complex
maximize ( sum( vec(r_mk_mj)) )
subject to
for m_oper=1:My_operators
W_mk_mj(m_oper, :, find( NU_index(m_oper,:)==0))==0;
for jUser=1:My_Users(m_oper)
Interference_mk_mj(m_oper, jUser)=0;
for iUser=1: My_Users(m_oper)
if iUser~=jUser
Interference_mk_mj(m_oper, jUser) = Interference_mk_mj(m_oper, jUser) + …
sum_square_abs(My_channel_SAP_User(m_oper,:,jUser).*W_mk_mj(m_oper,:,iUser)); %% SAP-USer
end
end
end
%%% We have only one SAP:
for jUser=1:My_Users(m_oper) %%% check matrix dimention for phi_mk_mjser
%find values for expressions............(real and imag)
real_SAP_User(m_oper,jUser)= real(sum( W_mk_mj(m_oper,:,jUser).*My_channel_SAP_User(m_oper,:,jUser)));
imag_SAP_User(m_oper,jUser)= imag(sum( W_mk_mj(m_oper,:, jUser).*My_channel_SAP_User(m_oper,:,jUser)));
%r_mk_mj(m_oper,jUser) <= BW* log(chi_mk_mj(1,jUser))/log(2);
r_mk_mj(m_oper,jUser) <=( BW*( -rel_entr(1,chi_mk_mj(m_oper,jUser)) )/log(2));
.25*(chi_mk_mj(m_oper, jUser)-1+ phi_mk_mj(m_oper, jUser))^2 <=...
(real_SAP_User_next(m_oper,jUser))^2 + 2real_SAP_User_next(m_oper,jUser)(real_SAP_User(m_oper,jUser)-real_SAP_User_next(m_oper,jUser))+…
(imag_SAP_User_next(m_oper,jUser))^2 + 2imag_SAP_User_next(m_oper,jUser)(imag_SAP_User(m_oper,jUser)-imag_SAP_User_next(m_oper,jUser))+…
.25*(chi_mk_mj_next(m_oper, jUser)-1 - phi_mk_mj_next(m_oper, jUser))^2 + …
.5*(chi_mk_mj_next(m_oper, jUser)-1 - phi_mk_mj_next(m_oper, jUser))*(chi_mk_mj(m_oper, jUser)-chi_mk_mj_next(m_oper, jUser)-phi_mk_mj(m_oper, jUser)+ phi_mk_mj_next(m_oper, jUser));
Interference_mk_mj(m_oper, jUser)+ BW*noise(m_oper) <= phi_mk_mj(m_oper,jUser);
phi_mk_mj(m_oper,jUser) >=0;
r_mk_mj(m_oper,jUser) >=0;
end
P_max_SAP >= sum_square_abs(vec(W_mk_mj(m_oper,:,:))) ;
end
cvx_end
cvx_status
% r_mk_mj(1,jUser)+ sum (r_mk_ni(:, m_oper, jUser ))’
if(strfind(cvx_status,‘Solved’))
phi_mk_mj_next =phi_mk_mj;
chi_mk_mj_next = chi_mk_mj;
real_SAP_User_next = real_SAP_User;
imag_SAP_User_next = imag_SAP_User;
r_mk_mj_all(iter, :,
= r_mk_mj;
r_mk_ni_all(iter, :, :, :,:)= r_mk_ni;
% % Interference_mk_mj
% % W_mk_mj
% % chi_mk_mj
% % Interference_mk_ni
% % W_mk_ni
R_m_all(iter)= optimal_output(iter+1)
r_mk_ni_final=r_mk_ni;
r_mk_mj_final=r_mk_mj;
W_mk_mj_all=W_mk_mj;
W_mk_ni_all=W_mk_ni;
else
iter=1;
iter;
run_count=0;
end
run_count=0;
end
%%% Update values for next round
I want to run above code till converge, now it is only for one iteration. This code works with sedumi and sdpt3, but I am not happy with the optimal values. So decide to use mosek. Mosek erro meassage is hard to decode. Anyway, this is simplified code and I have removed some of the things. When I debug the code, once I comment the below matrix and its dependents. Then mosek start to work fine. The matrix is
W_mk_ni_ini= T_DAPrand( max(My_DAPs), Tx_AN, My_operators, max(My_Users) ) + T_DAP1i*rand(max(My_DAPs), Tx_AN, My_operators, max(My_Users) )
Therefore, if you comment above line mosek will answer you without any error, but with above it will give below warning. Then I have to re-run the cvx setup to proceed.
This is the complete error messgae I get,
Warning: The following errors were issued when initializing the solvers:
Mosek: unexpected error:
Error using cvx_license
Invalid option: -4
vvvvvvvvvvvvvvvvvvvvvvvvv
Please check your installation and re-run CVX_SETUP.
These solvers are unavailable for this session.
In cvx_global (line 139)
In cvx_solver (line 36)
In All_in_one_erroe_codem (line 303)
Warning: The default solver has temporarily been changed to SDPT3.
In cvx_global (line 147)
In cvx_solver (line 36)
In All_in_one_erroe_codem (line 303)
Error using cvx_solver (line 49)
Solver unusable due to prior errors: mosek
Error in All_in_one_erroe_codem (line 303)
cvx_solver mosek
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%