Hi Rohan,
Here is the code for solving 10D problem.
function [] = gp_srcs_test()
rx = 0;
ry = 3;
dx = 0;
dy = 6;
relay_dst_dist = sqrt((rx - dx)^2 + (ry-dy)^2);
sx = [-2;-1;0;1;2];
sy = [1;1;1;1;1;1];
num_srcs = length(sx);
srcs_relay_rayleigh = zeros(num_srcs, 1);
srcs_relay_rayleigh(:, 1) = 1.4;
relay_dst_rayleigh = 1.4;
srcs_dst_rayleigh = zeros(num_srcs, 1);
srcs_dst_rayleigh(:, 1) = 1.4;
srcs_relay_dist = zeros(num_srcs, 1);
srcs_dst_dist = zeros(num_srcs, 1);
srcs_relay_snr = zeros(num_srcs, 1);
srcs_dst_snr = zeros(num_srcs, 1);
for i=1:num_srcs
srcs_relay_dist(i, 1) = sqrt((sx(i, 1) - rx)^2 + (sy(i, 1) - ry)^2);
srcs_dst_dist(i, 1) = sqrt((sx(i, 1) - dx)^2 + (sy(i, 1) - dy)^2);
srcs_relay_snr(i, 1) = calculateSNR(srcs_relay_dist(i, 1)/10, srcs_relay_rayleigh(i, 1));
srcs_dst_snr(i, 1) = calculateSNR(srcs_dst_dist(i, 1)/10, srcs_dst_rayleigh(i, 1));
end
relay_dst_snr = calculateSNR(relay_dst_dist/10, relay_dst_rayleigh);
sdpvar Es1 Es2 Es3 Es4 Es5 Er1 Er2 Er3 Er4 Er5 t1 t2 t3 t4 t5 y1 y2 y3 y4 y5
%sdpvar Es1 Es2 Er1 Er2 t1 t2 y1 y2
%obj = t1*t2*t3*t4*t5;
F = y1 + Es1*srcs_dst_snr(1)*y1 + Es1*srcs_relay_snr(1)*Er1*relay_dst_snr == y1*t1;
F = [F, Es1*srcs_relay_snr(1) + Er1*relay_dst_snr + 1 == y1];
F = [F, y2 + Es2*srcs_dst_snr(2)*y2 + Es2*srcs_relay_snr(2)*Er2*relay_dst_snr == y2*t2];
F = [F, Es2*srcs_relay_snr(2) + Er2*relay_dst_snr + 1 == y2];
F = [F, y3 + Es3*srcs_dst_snr(3)*y3 + Es3*srcs_relay_snr(3)*Er3*relay_dst_snr == y3*t3];
F = [F, Es3*srcs_relay_snr(3) + Er3*relay_dst_snr + 1 == y3];
F = [F, y4 + Es4*srcs_dst_snr(4)*y4 + Es4*srcs_relay_snr(4)*Er4*relay_dst_snr == y4*t4];
F = [F, Es4*srcs_relay_snr(4) + Er4*relay_dst_snr + 1 == y4];
F = [F, y5 + Es5*srcs_dst_snr(5)*y5 + Es5*srcs_relay_snr(5)*Er5*relay_dst_snr == y5*t5];
F = [F, Es5*srcs_relay_snr(5) + Er5*relay_dst_snr + 1 == y5];
% F = [F, Er1+Er2 <= 20, Es1 <= 20, Es2 <= 20, Es1+Es2+Er1+Er2 <= 50];
% F = [F,0 <= [Es1 Es2 Er1 Er2 t1 t2 y1 y2] <= 1000];
F = [F, Er1+Er2+Er3+Er4+Er5 <= 50, Es1 <= 20, Es2 <= 20, Es3 <= 20, Es4 <= 20, Es5 <= 20, Es1+Es2+Es3+Es4+Es5+Er1+Er2+Er3+Er4+Er5 <= 125];
F = [F,0 <= [Es1 Es2 Es3 Es4 Es5 Er1 Er2 Er3 Er4 Er5 t1 t2 t3 t4 t5 y1 y2 y3 y4 y5] <= 1000];
s = solvesdp(F, -t1*t2*t3*t4*t5, sdpsettings('solver','bmibnb'))
double(Es1)
double(Es2)
double(Es3)
double(Es4)
double(Es5)
double(Er1)
double(Er2)
double(Er3)
double(Er4)
double(Er5)
end
function [snr] = calculateSNR(dist, rayleighFading)
lambda = 3.76;
constK = 20.1; %28.1
logNShadPower = getLogNormalShadowingPower();
Hki = (-constK - 10 * lambda * log10(dist)) - logNShadPower + 10*log10(rayleighFading);
snr = 10^(Hki/10);
end
function logNShadPower = getLogNormalShadowingPower()
logNShadPower = 10.5;
end
function [tot_thrput] = calc_thrput(Es, srcs_dst_snr, srcs_relay_snr, Er, relay_dst_snr, sigma_2)
num_srcs = length(Es);
tot_thrput = 0;
for i=1:num_srcs
tmp1 = Es(i, 1)*srcs_dst_snr(i, 1)/sigma_2;
tmp2 = (Es(i)*Er*srcs_relay_snr(i)*relay_dst_snr)/(sigma_2*(sigma_2 + Es(i)*srcs_relay_snr(i) + Er*relay_dst_snr));
tmp = log2(1 + tmp1 + tmp2);
tot_thrput = tot_thrput + tmp;
end
end
While running the code, i get the following error:
??? Error using ==> t1
Too many output arguments.
Error in ==> gp_srcs_test at 38
F = y1 + Es1*srcs_dst_snr(1)*y1 + Es1*srcs_relay_snr(1)*Er1*relay_dst_snr ==
y1*t1;
Please help me in solving this out.
Regards
Ruby