|
- clc;
- clear all;
-
- gamma_tot=1e-4;
-
-
- % N_0=1;%% Channel noise covariance
-
- %%% Data Generation
- load Channel_1023_R0 %H_start T %%%(K,T,channel run)
- N=30;
- gamma_tot=1e-3;
- max_w=5;
- K=20;
- load D_Sample500_1025
- Dtot_num=size(X,1);
- D=[ones(1,K-1)*floor(Dtot_num/K),Dtot_num-floor(Dtot_num/K)*(K-1)];
-
- P_L =0.2;
- P_step =0.2;
- P_H =1;
- P_num = length([P_L:P_step:P_H]);
- P_peak_v=5;
-
- lambda=5*10^(-5);
-
-
-
- Pre_air=zeros(N,P_num,r_run);
- Pre_fix=zeros(N,P_num,r_run);
- Pre_tru=zeros(N,P_num,r_run);
-
- r_run=1;
- p=ones(K,N); %Optimization variable: Power Control
- h=ones(K,N);
- sigma=ones(1,d);%% Gradient noise covariance
- % eta=mu/(K*L);%% Learning rate
-
- N_0=0.1;%% Channel noise covariance
- noise_c=N_0.*noise_cell;
-
-
- ii=zeros(r_run,1);
- F_P1_cell=zeros(r_run,100);
- M_t=zeros(r_run,100);
- F_P1_cell_bar=zeros(r_run,P_num);
- F_tilde_p_i_cell=zeros(r_run,100);
- w_aircomp_cell=ones(d,N+1,r_run);
- F_Loss_sum=ones(N,P_num,r_run);
- p_opt_cell=ones(K,N,r_run);
-
- F_Final_AirCpmp=ones(P_num,r_run);
- OG_AirCpmp=ones(P_num,r_run);
- F_Final_fix=ones(P_num,r_run);
- OG_fix=ones(P_num,r_run);
- F_Final_tru=ones(P_num,r_run);
- OG_tru=ones(P_num,r_run);
-
- eta_opt_cell=ones(r_run,P_num);
-
- F_P1_opt_cell=ones(r_run,P_num);
- w_n_cell_fix=ones(d,N+1,r_run);
- F_Loss_fix_sum=ones(N,P_num,r_run);
-
- w_n_cell_tru=ones(d,N+1,r_run);
- F_Loss_tru_sum=ones(N,P_num,r_run);
-
- w_aircomp_opt=ones(d,P_num,r_run);
- w_fix_opt=ones(d,P_num,r_run);
- w_tru_opt=ones(d,P_num,r_run);
-
-
-
-
- FP_P1_cell=ones(r_run,P_num);
- FP_eta_opt_cell=ones(r_run,P_num);
-
- CI_eta_opt_cell=ones(r_run,P_num);
- CI_P1_opt_cell=ones(r_run,P_num);
-
- aa=8;
- eta_search1=[0.1:0.02:0.24];
- F_P1_s_cell=ones(aa,P_num,r_run);
- F_P1_CI_cell=ones(aa,P_num,r_run);
- F_P1_FP_cell=ones(aa,P_num,r_run);
- % F_1= F_ini ;% Initial loss function
- % Opti_G_ini=F_1-F_star;% Initial optimality gap
- for idx_ch_run = 1:r_run
- tic
- for idx_P=1:P_num
- P_bar_value=(P_L+(idx_P-1)*P_step);
- P_peak=P_peak_v.*ones(K,1);
- P_bar=P_bar_value*ones(K,1);%% Power budget at different devices
- h=H_start(1:K,1:N,5);
- p_i=ones(K,N); %% intialize the power control;
- for k=1:K
- p_i(k,:)=P_bar_value*ones(1,N);
- end
- eta_search=eta_search1;
- gamma=1;
- gamma_tot=1e-3;
- %% joint optimize eta and power control
- %% Proposed power control
- % eta_search=[0.2:0.05:0.6];
- [F_P1_opt,eta_opt,p_opt,F_P1_s] = func_eta_SCA_PowercControl1026(N,K,h,p_i,P_bar,eta_search,P_peak,Opti_G_ini,L,mu,N_0,gamma_tot,sigma,d);
- eta_opt_cell(idx_ch_run,idx_P)=eta_opt;
- F_P1_opt_cell(idx_ch_run,idx_P)= F_P1_opt;
- F_P1_s_cell(:,idx_P,idx_ch_run)=F_P1_s;
- % eta_search=[0.1:0.1:1];
- %% Fixed power control
- [FP_P1_opt,FP_eta_opt,F_P1_FP] = func_eta_FixedPower(N,K,h,P_bar_value,eta_search,Opti_G_ini,L,mu,N_0,sigma,d);
- FP_P1_cell(idx_ch_run,idx_P)=FP_P1_opt;
- FP_eta_opt_cell(idx_ch_run,idx_P)=FP_eta_opt;
- F_P1_FP_cell(:,idx_P,idx_ch_run)=F_P1_FP;
- %% Channel Inversion
- [CI_P1_opt,CI_eta_opt,p_tru,F_P1_CI] = func_eta_CI(N,K,h,P_bar_value,eta_search,Opti_G_ini,L,mu,N_0,sigma,d);
- CI_eta_opt_cell(idx_ch_run,idx_P)=CI_eta_opt;
- CI_P1_opt_cell(idx_ch_run,idx_P)= CI_P1_opt;
- F_P1_CI_cell(:,idx_P,idx_ch_run)=F_P1_CI;
-
- noise=noise_c(:,:,5);
- %% Optimality gap in Federated Learning system---Gradient Decent Algorithm
- w_ini=zeros(d,1);
- aircomp_idexN=1;
- w_aircomp_cell(:,1,idx_ch_run)=w_ini;
- Local_Gra=zeros(d,K);
- Trans_Gra=zeros(d,K);
- grad_inv=zeros(Dtot_num,d);
- while(aircomp_idexN<=N)
- w_aircomp_n=w_aircomp_cell(:,aircomp_idexN,idx_ch_run);
- for j=1:d
- grad_inv(:,j)=(Y-X*w_aircomp_n).*(-X(:,j));
- end
-
- for i=1:K
- % F_Loss(i,aircomp_idexN)=norm( X(sum(D(1:i))-D(i)+1:sum(D(1:i)),:)*w_aircomp_n-Y(sum(D(1:i))-D(i)+1:sum(D(1:i))))^2./2/D(i)+lambda*norm(w_aircomp_n)^2;
- Local_Gra(:,i)=sum(grad_inv(sum(D(1:i))-D(i)+1:sum(D(1:i)),:),1)'/D(i)+ lambda*2*w_aircomp_n;
- Trans_Gra(:,i)=p_opt(i,aircomp_idexN)*h(i,aircomp_idexN).*Local_Gra(:,i);
- end
- F_Loss_sum(aircomp_idexN,idx_P,idx_ch_run)=sum((X*w_aircomp_n-Y).^2)/2/Dtot_num+lambda*norm(w_aircomp_n)^2;%sum(Dk_num.*F_Loss(:,aircomp_idexN))/Dtot_num;
- Pre_air(aircomp_idexN,idx_P,idx_ch_run)=sum((Pre_X*w_aircomp_n-Pre_Y).^2)/2/Pre_NUM+lambda*norm(w_aircomp_n)^2;
-
- Glo_Gra=mean(Trans_Gra,2)+noise(:,aircomp_idexN)./K;
- aircomp_idexN=aircomp_idexN+1;
- w_aircomp=w_aircomp_n-eta_opt.*Glo_Gra;
-
- if norm(w_aircomp)>max_w
- mark_aircomp=1
- w_aircomp=w_aircomp/norm(w_aircomp)*max_w;
- end
- w_aircomp_cell(:,aircomp_idexN,idx_ch_run)=w_aircomp;
- end
- F_Final_AirCpmp(idx_P,idx_ch_run)=sum((X*w_aircomp-Y).^2)/2/Dtot_num+lambda*norm(w_aircomp)^2;%=norm(V_ini-U_ini*w_aircomp)^2/2/Dtot_num+lambda*norm(w_aircomp)^2;
- OG_AirCpmp(idx_P,idx_ch_run)=(sum((X*w_aircomp-Y).^2)/2/Dtot_num+lambda*norm(w_aircomp)^2-F_star)/F_star;
- w_aircomp_opt(:,idx_P,idx_ch_run)=w_aircomp;
-
-
-
- %% Fixed power control
- fix_idexN=1;
- p_fix=P_bar_value*ones(K,N);
- w_n_cell_fix(:,1,idx_ch_run)=w_ini;
-
- Local_Gra_fix=zeros(d,K);
- Trans_Gra_fix=zeros(d,K);
- grad_fix_inv=zeros(Dtot_num,d);
- while(fix_idexN<=N)
-
- w_n_fix=w_n_cell_fix(:,fix_idexN,idx_ch_run);
- for j=1:d
- grad_fix_inv(:,j)=(Y-X*w_n_fix).*(-X(:,j));
- end
-
- for i=1:K
- % F_Loss_fix(i,fix_idexN)=norm( X(sum(D(1:i))-D(i)+1:sum(D(1:i)),:)*w_n_fix-Y(sum(D(1:i))-D(i)+1:sum(D(1:i))))^2./2/D(i)+lambda*norm(w_n_fix)^2;
- Local_Gra_fix(:,i)=sum(grad_fix_inv(sum(D(1:i))-D(i)+1:sum(D(1:i)),:),1)'/D(i)+ lambda*2*w_n_fix;
- Trans_Gra_fix(:,i)=p_fix(i,fix_idexN)*h(i,fix_idexN).*Local_Gra_fix(:,i);
- end
- F_Loss_fix_sum(fix_idexN,idx_P,idx_ch_run)=sum((X*w_n_fix-Y).^2)/2/Dtot_num+lambda*norm(w_n_fix)^2;%sum(Dk_num.*F_Loss(:,aircomp_idexN))/Dtot_num;
- Pre_fix(fix_idexN,idx_P,idx_ch_run)=sum((Pre_X*w_n_fix-Pre_Y).^2)/2/Pre_NUM+lambda*norm(w_n_fix)^2;
-
- Glo_Gra_fix=mean(Trans_Gra_fix,2)+noise(:,fix_idexN)./K;
- fix_idexN=fix_idexN+1;
- w_n_fix=w_n_fix-FP_eta_opt.*Glo_Gra_fix;
-
- if norm(w_n_fix)>max_w
- mark_fix=1
- w_n_fix=w_n_fix/norm(w_n_fix)*max_w;
- end
- w_n_cell_fix(:,fix_idexN,idx_ch_run)=w_n_fix;
- end
- w_fix_opt(:,idx_P,idx_ch_run)=w_n_fix;
- F_Final_fix(idx_P,idx_ch_run)=sum((X*w_n_fix-Y).^2)/2/Dtot_num+lambda*norm(w_n_fix)^2;
- OG_fix(idx_P,idx_ch_run)=(sum((X*w_n_fix-Y).^2)/2/Dtot_num+lambda*norm(w_n_fix)^2-F_star)/F_star;
-
-
-
- %% Truncated channel inversion
- tru_idexN=1;
- w_n_cell_tru(:,1,idx_ch_run)=w_ini;
- Local_Gra_tru=zeros(d,K);
- Trans_Gra_tru=zeros(d,K);
- grad_tru_inv=zeros(Dtot_num,d);
- while(tru_idexN<=N)
- w_n_tru=w_n_cell_tru(:,tru_idexN,idx_ch_run);
- for j=1:d
- grad_tru_inv(:,j)=(Y-X*w_n_tru).*(-X(:,j));
- end
-
- for i=1:K
- % F_Loss_fix(i,fix_idexN)=norm( X(sum(D(1:i))-D(i)+1:sum(D(1:i)),:)*w_n_tru-Y(sum(D(1:i))-D(i)+1:sum(D(1:i))))^2./2/D(i)+lambda*norm(w_n_tru)^2;
- Local_Gra_tru(:,i)=sum(grad_tru_inv(sum(D(1:i))-D(i)+1:sum(D(1:i)),:),1)'/D(i)+ lambda*2*w_n_tru;
- Trans_Gra_tru(:,i)=p_tru(i,tru_idexN)*h(i,tru_idexN).*Local_Gra_tru(:,i);
- end
- F_Loss_tru_sum(tru_idexN,idx_P,idx_ch_run)=sum((X*w_n_tru-Y).^2)/2/Dtot_num+lambda*norm(w_n_tru)^2;%sum(Dk_num.*F_Loss(:,aircomp_idexN))/Dtot_num;
-
- Pre_tru(tru_idexN,idx_P,idx_ch_run)=sum((Pre_X*w_n_tru-Pre_Y).^2)/2/Pre_NUM+lambda*norm(w_n_tru)^2;
- Glo_Gra_tru=mean(Trans_Gra_tru,2)+noise(:,tru_idexN)./K;
- tru_idexN=tru_idexN+1;
- w_n_tru=w_n_tru-CI_eta_opt.*Glo_Gra_tru;
-
- if norm(w_n_tru)>max_w
- mark_tru=1
- w_n_tru=w_n_tru/norm(w_n_tru)*max_w;
- end
- w_n_cell_tru(:,tru_idexN,idx_ch_run)=w_n_tru;
- end
- w_tru_opt(:,idx_P,idx_ch_run)=w_n_tru;
- F_Final_tru(idx_P,idx_ch_run)=sum((X*w_n_tru-Y).^2)/2/Dtot_num+lambda*norm(w_n_tru)^2;
- OG_tru(idx_P,idx_ch_run)=(sum((X*w_n_tru-Y).^2)/2/Dtot_num+lambda*norm(w_n_tru)^2-F_star)/F_star;
-
-
-
-
- end
-
- end
-
-
- save P1026_K20_N30_run5
-
- P_x=[P_L:P_step:P_H];
- figure(1)
- K0=semilogy(P_x,mean(F_Final_AirCpmp,2)-F_star,'r-');hold on;
- k1=semilogy(P_x,mean(F_Final_fix,2)-F_star,'k-.');hold on;
- k2=semilogy(P_x,mean(F_Final_tru,2)-F_star,'b--');hold on;
-
- grid on;
- h_le=legend([K0,k1,k2],'Proposed power control','Fixed power transmission','Traditional channel inversion','Location','northwest');
- set(h_le,'Fontsize',12,'FontName','Times New Roman');
- xlabel('Average power budget','FontSize',15,'FontName','Times New Roman');
- ylabel('Optimality gap','FontSize',15,'FontName','Times New Roman');
-
- Pre_air=zeros(P_num,r_run);
- Pre_fix=zeros(P_num,r_run);
- Pre_tru=zeros(P_num,r_run);
- for idx_ch_run = 1:r_run
- tic
- for idx_P=1:P_num
- w_air_pre=w_aircomp_opt(:,idx_P,idx_ch_run);
- Pre_air(idx_P,idx_ch_run)=sum((Pre_X*w_air_pre-Pre_Y).^2)/2/Pre_NUM+lambda*norm(w_air_pre)^2;
-
- w_fix_pre=w_fix_opt(:,idx_P,idx_ch_run);
- Pre_fix(idx_P,idx_ch_run)=sum((Pre_X*w_fix_pre-Pre_Y).^2)/2/Pre_NUM+lambda*norm(w_fix_pre)^2;
-
- w_tru_pre=w_tru_opt(:,idx_P,idx_ch_run);
- Pre_tru(idx_P,idx_ch_run)=sum((Pre_X*w_tru_pre-Pre_Y).^2)/2/Pre_NUM+lambda*norm(w_tru_pre)^2;
- end
- end
-
-
- figure(3)
- K30=semilogy(P_x,mean(Pre_air,2),'r-');hold on;
- k31=semilogy(P_x,mean(Pre_fix,2),'k-.');hold on;
- k32=semilogy(P_x,mean(Pre_tru,2),'b--');hold on;
-
- grid on;
- h_le=legend([K30,k31,k32],'Proposed power control','Fixed power transmission','Traditional channel inversion','Location','northwest');
- set(h_le,'Fontsize',12,'FontName','Times New Roman');
- xlabel('Average power budget','FontSize',15,'FontName','Times New Roman');
- ylabel('Prediction error','FontSize',15,'FontName','Times New Roman');
-
-
|