-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathTwoStageAlgorithm.m
More file actions
126 lines (125 loc) · 5.11 KB
/
Copy pathTwoStageAlgorithm.m
File metadata and controls
126 lines (125 loc) · 5.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
%-----------------------函数TwoStageAlgorithm----------------------
%功能:部分卸载模式下的优化算法
%输入:
% M: 用户数量
% W_m: 用户权重向量
% Q_m: 用户位置向量
%输出:
% f_opt: 各时隙最优CPU周期数
% P_opt: 各时隙最优传输功率
% t_opt: 各时隙最优卸载时间
% qu_opt: 各时隙无人机最优位置
% R_opt: 最优总计算量
function[f_opt,P_opt,t_opt,Qu_opt,R_opt] = TwoStageAlgorithm(M,W_m,Q_m)
global N;
global T;
global Height;
global C;
global Eta_0;
global B;
global Sigma;
global Gamma_c;
global Beta;
global Epsilon;
global V_max;
global P_0;
global vm;
f_opt = zeros(M,N);
P_opt = zeros(M,N);
t_opt = zeros(M,N);
Qu_opt = zeros(N,2);
diamet = norm(Q_m(M,:)-Q_m(1,:))/2;
theta = pi:-pi/(N-1):0;
Qu_opt(:,1) = diamet*cos(theta)'+(Q_m(M,1)-Q_m(1,1))/2;
Qu_opt(:,2) = diamet*sin(theta)'+(Q_m(M,2)-Q_m(1,2))/2;
% Qu_opt(:,1) = Q_m(1,1):(Q_m(M,1)-Q_m(1,1))/(N-1):Q_m(M,1);
H_mn = zeros(M,N);
R_sum_last = 0;
while(1)
cvx_begin
cvx_expert true
variable f_temp(M,N)
variable Z_temp(M,N)
variable t_temp(M,N)
expression p2_obj(M,N)
expression c5_left(M,N)%约束条件C5等式左
c5_right = zeros(M,N);%约束条件C5等式右
for user = 1:M
for slot = 1:N
H_mn(user,slot) = Beta/(Height^2+norm(Qu_opt(slot,:)-Q_m(user,:))^2);
p2_obj(user,slot) = W_m(user)*...
(T*f_temp(user,slot)/N/C+...
B*T*(-rel_entr(t_temp(user,slot),t_temp(user,slot)+H_mn(user,slot)/Sigma*Z_temp(user,slot)))/(log(2)*vm*N));
end
end
c5_right(:,1) = Eta_0*T/N*P_0*H_mn(:,1);
for slot = 2:N
c5_right(:,slot) = c5_right(:,slot-1)+Eta_0*T/N*P_0*H_mn(:,slot);
end
maximize sum(sum(p2_obj))
subject to
c5_left(:,1) = Gamma_c*pow_p(f_temp(:,1),3)+Z_temp(:,1);
for slot = 2:N
c5_left(:,slot) = c5_left(:,slot-1)+Gamma_c*pow_p(f_temp(:,slot),3)+Z_temp(:,slot);
end
for slot = 1:N
for user = 1:M
f_temp(user,slot) >= 0;
Z_temp(user,slot) >= 0;
t_temp(user,slot) >= 0;
%每个时隙累积能量限制
% c5_left(user,slot)<= c5_right(user,slot);%Eta_0*T/N*P_0*H_mn(user,slot);
Gamma_c*pow_p(f_temp(user,slot),3)+Z_temp(user,slot) <= Eta_0*T/N*P_0*H_mn(user,slot);
end
sum(t_temp(:,slot)) <= 1;
end
cvx_end
f_opt = f_temp;
P_opt = Z_temp./t_temp;
t_opt = t_temp;
display(['轨迹优化中...................']);
%轨迹优化
while(1)
cvx_begin quiet
cvx_expert true
variable x_temp(N)
variable y_temp(N)
expression p4_obj(M)
for user = 1:M
for slot = 1:N
p4_obj(user) = W_m(user)*B*T*t_opt(user,slot)*...
(log(1+Beta*P_opt(user,slot)/Sigma/(Height^2+norm(Qu_opt(slot,:)-Q_m(user,:))^2))/log(2)...
-Beta*P_opt(user,slot)*log2(exp(1))/(Sigma*Height^2+Beta*P_opt(user,slot)+Sigma*norm(Qu_opt(slot,:))^2)/(Height^2+norm(Qu_opt(slot,:))^2)...
*(((Qu_opt(slot,1)-x_temp(slot))^2)+(Qu_opt(slot,2)-y_temp(slot))^2))...
/vm/N;
end
end
maximize sum(p4_obj)
subject to
norms([[x_temp',Q_m(M,1)]-[Q_m(1,1),x_temp'];[y_temp',Q_m(M,2)]-[Q_m(M,2),y_temp']],2,1)<=V_max*T/N;
for user = 1:M
for slot = 1:N
Gamma_c*f_opt(user,slot)^3+t_opt(user,slot)*P_opt(user,slot)...
<= Eta_0*P_0*Beta*(Height^2+2*norm(Qu_opt(slot,:)-Q_m(user,:))^2-...
((x_temp(slot)-Q_m(user,1))^2+(y_temp(slot)-Q_m(user,2))^2))...
/(Height^2+norm(Qu_opt(slot,:)-Q_m(user,:))^2)^2;
end
end
cvx_end
location_var = sum((x_temp-Qu_opt(:,1)).^2+(y_temp-Qu_opt(:,2)).^2);
display(['路径差',num2str(location_var)]);
if location_var<10^-2 %Epsilon
break
end
Qu_opt = [x_temp y_temp];
end
%计算总数据量
R_sum = sum(p4_obj);
display(['总数据量',num2str(R_sum)]);
if (R_sum-R_sum_last) <= Epsilon
R_opt = R_sum;
break;
end
R_sum_last = R_sum;
end
end