clc;
clear all;
close all;
K = 5; % WDS
H = 100; % m
B = 1*10^6; %Hz
sigma_2 = 10^(-14); % -110dB
C = 800; %cycles/bit,
beta_0 = 10^(-6);
F_max = 2 * 10^(9);
R_min = 1 * 10^(6);
r_e = 10;
a = randi([0, 1], 1, 5);%卸载决策变量
q_k1 = [100; 200];
q_k2 = [100; 600];
q_k3 = [300; 300];
q_k4 = [300; 500];
q_k5 = [200; 400];
q_k = [q_k1, q_k2, q_k3, q_k4, q_k5];
q0 = [400;400];
q_e = [800; 800];
q_b = [200; 200];
qi_u = q0;
P = 0.2 ;
Pu = 1;
for k = 1 : K
L(k) = 2 * 10^(5);
end
for k = 1 : K
d_ku(k) = (sum((q_k(:,k) - qi_u).^2)) + H^2;
h_ku(k) = beta_0/d_ku(k);
d_ke(k) = (norm(q_k(:,k) - q_e) - r_e)^2 + H^2;
h_ke_max(k) = beta_0/d_ke(k) ;
end
d_ub = sum((qi_u - q_b).^2) + H^2;
h_ub = beta_0/d_ub;
d_ue_max = (norm(qi_u - q_e) - r_e)^2 ;
Q = Pu * beta_0 / sigma_2;
iteration = 0;
result = ;
while 1
cvx_begin
variables T(1, K) q_u(2, 1) f(1, K) gama1 gama2 gama3 lamda
expressions Ri_ku(1, K) Ri_ub
Ri_ub = B * log(1 + Pu * h_ub / sigma_2) / log(2) - ...
B * ((Pu * h_ub / sigma_2) * (sum((q_u - q_b).^2) - sum((qi_u - q_b).^2)))/...
(d_ub) / ((1+Pu * h_ub / sigma_2) * log(2));
% R_ue_max = (B / Q) * (rel_entr(lamda,lamda + Q) + rel_entr(lamda + Q,lamda));
R_ue_max = B * log(1 + Q * inv_pos(lamda)) / log(2);
for k = 1 : K
Ri_ku(k) = B * log(1 + P * h_ku(k) / sigma_2) / log(2) - ...
B * ((P * h_ku(k) / sigma_2) * (sum((q_k(:,k) - q_u).^2) -...
sum((q_k(:,k) - qi_u).^2)))/ (d_ku(k)) / ((1+P * h_ku(k) / sigma_2) * log(2));
R_ke_max(k) = B * log(1 + P * h_ke_max(k) / sigma_2) / log(2);
end
minimize sum(T(1 : K))
subject to
for k = 1 : K
a(k) * (L(k) * inv_pos(gama1) + L(k) * C * inv_pos(f(k))) + (1 - a(k)) * ...
(L(k) * inv_pos(gama1) + L(k) * C * inv_pos(f(k)) + L(k) * inv_pos(gama2)) <= T(k); % C1
R_min - Ri_ku(k) + R_ke_max(k) <= 0; %C2
(1 - a(k)) * R_min - (1 - a(k)) * Ri_ub + B * (1 - a(k)) * gama3 <= 0; %C3
end
Ri_ku(1,:) >= gama1; %C4
Ri_ub >= gama2; %C5
R_ue_max <= gama3; %C6
gama3 >= 0;
lamda <= d_ue_max + 2 * (norm(qi_u - q_e) - r_e) * (qi_u - q_e)' * ...
(q_u - qi_u) /(norm(qi_u - q_e)); %C7
F_max >= sum(f(1:K)); %C8
q_u(1,1) <= 800; %C9
q_u(1,1) >= 0;
q_u(2,1) <= 800; %C10
q_u(2,1) >= 0;
cvx_end
result = [result,sum(T(1 : K))];
iteration = iteration +1;
qi_u = q_u;
if (length(result) >= 5) && (abs((result(end) - result(end-1))/result(end-1)) < 1e-4)
break;
end
figure(1)
plot(result, '-*')
% xlabel(‘iteration’)
% ylabel(‘T’)
end
错误使用 cvx/log (line 64)
Disciplined convex programming error:
Illegal operation: log( {convex} ).
出错 SolveQF (line 70)
R_ue_max = B * log(1 + Q * inv_pos(lamda)) / log(2);