问题遇到的现象和发生背景
问题相关代码,请勿粘贴截图
clc
clear all
close all
%初始化
H=50;
M=2; %无人机数目
J=6;
K=2;
T=25;
L=50;
Vmax=30;
Tsum=T/L;
% P0=10;
eta=0.8;
rou=10^(0.3);
deta = 10^(-12);
epsilon=10^(-4);
Pm=0.1;%每个无人机在每个时隙下的功率·
%用户坐标
wx=[50,9,110,261,290,110,50,90,230,180,170,220];
wy=[80,117,80,110,243,20.6,175,150,170,130,230,80];
% wx = 300*rand(1,K*N);
% wy = 300*rand(1,K*N);%在200*200区域内,产生用户随机位置
w=zeros(J*K,2);
for i=1:J*K
w(i,1)=wx(i);
w(i,2)=wy(i);
end %用w表示用户坐标
scatter(w(:,1),w(:,2),'r' ,'filled');
hold on
%%%%无人机位置初始化
cini=[sum(w)/(J*K)];%用户重心坐标
r_ini=0;
for i=1:J*K
if norm(cini-w(i,:))>r_ini
r_ini=norm(cini-w(i,:));%初始化无人机圆的半径为圆心到最远的用户距离
end
end
Rcp= r_ini/M;%中圆半径
Ctrj1=[cini(1),cini(2)-Rcp];
Ctrj2=[cini(1),cini(2)+Rcp];
Rmax=Vmax*T/(2*pi);
Rtrj=Rcp;%小圆半径
jd=zeros(1,L);%角度
q=zeros(M,L,2);%两个无人机的坐标,三维变量,生成两个m*n的矩阵
for l=1:L
jd(l)=2*pi*(l-1)/(L-1);
q(1,l,:)=[Ctrj1(1)+Rtrj*cos(jd(l)),Ctrj1(2)+Rtrj*sin(jd(l))];
q(2,l,:)=[Ctrj2(1)+Rtrj*cos(jd(l)),Ctrj2(2)+Rtrj*sin(jd(l))];
end
q0=q;
scatter(q(1,:,1),q(1,:,2),50,'b','filled');
scatter(q(2,:,1),q(2,:,2),50,'g','filled');
scatter(q(1,1,1),q(1,1,2),60,'r','filled');
scatter(q(2,1,1),q(2,1,2),60,'c','filled');
hold on;
% Rmax=Vmax*T/(2*pi);
% Rtrj=min(cini/2,Rmax);%半径
% q=zeros(L,2);
% jd=zeros(1,L);
% for l=1:L
% jd(l)=2*pi*((l-1)/(L-1));
% q(l,:)=[cini(1)+Rtrj*cos(jd(l)),cini(2)+Rtrj*sin(jd(l))];
% end
% q0=q;
%
% scatter(q(:,1),q(:,2),50,'b','filled');
% hold on;
% theta(1) = 0;
% theta(L) = 2*pi;
% for l=2:L-1
% theta(l) = 2*pi*(l-1)/(L-1);
%
% end %初始化时,第m时隙的角度theta(l)
%
% for l=1:L
% q(l,:)=[cini(1)+r_ini*cos(theta(l)),cini(2)+r_ini*sin(theta(l))];
% end %初始化无人机轨迹的l个坐标
%初始化变量
h1=zeros(J,M,L);
% beta_0_dB=-30;%1m的衰减
beta_0_dB=-20;%单位是dB
beta_0=10^(beta_0_dB/10);
%无人机对用户的信道增益
for l=1:L %M=2是无人机的数量
for m=1:M
for i=1:J*K
d(i)=(w(i,1)-q(m,l,1))^2+(w(i,2)-q(m,l,2))^2+H^2;%无人机m与用户i在时隙n下的距离的平方
h1(i,m,l)= (beta_0)/d(i); %信道增益
end
end
end
%%--------------固定无人机轨迹,开始进行资源分配-----------------
beta_0_dB=-20;%单位是dB
beta_0=10^(beta_0_dB/10);
I=4;
deta=0.05;
for opt=1:I
for l=1:L
for m=1:M
for i=1:J*K
h(i)= h1(i,m,l);%信道增益
end
%%--------------开始分簇-----------------
H_zuhe=zeros(15,12);
H_zuhe=[h(1),h(2),h(3),h(4),h(5),h(6),h(7),h(8),h(9),h(10),h(11),h(12);h(1),h(2),h(3),h(5),h(4),h(6),h(7),h(8),h(9),h(11),h(10),h(12);h(1),h(2),h(3),h(6),h(4),h(5),h(7),h(8),h(9),h(12),h(10),h(11);h(1),h(3),h(2),h(4),h(5),h(6),h(7),h(9),h(8),h(10),h(11),h(12);h(1),h(3),h(2),h(5),h(4),h(6),h(7),h(9),h(8),h(11),h(10),h(12);h(1),h(3),h(2),h(6),h(5),h(4),h(7),h(9),h(8),h(12),h(10),h(11);h(1),h(4),h(2),h(3),h(5),h(6),h(7),h(10),h(8),h(9),h(11),h(12);h(1),h(4),h(2),h(5),h(3),h(6),h(7),h(10),h(8),h(11),h(9),h(12);
h(1),h(4),h(2),h(6),h(3),h(5),h(7),h(10),h(8),h(12),h(9),h(11);h(1),h(5),h(2),h(3),h(4),h(6),h(7),h(11),h(8),h(9),h(10),h(12);h(1),h(5),h(2),h(4),h(3),h(6),h(7),h(11),h(8),h(10),h(9),h(12);h(1),h(5),h(2),h(6),h(3),h(4),h(7),h(11),h(8),h(12),h(9),h(10);h(1),h(6),h(2),h(3),h(4),h(5),h(7),h(12),h(8),h(9),h(10),h(11);h(1),h(6),h(2),h(4),h(3),h(5),h(7),h(12),h(8),h(10),h(9),h(11);h(1),h(6),h(2),h(5),h(3),h(4),h(7),h(12),h(8),h(11),h(9),h(10);];
D=zeros(1,15);
for js=1:15 %js为计数的意思,为与j区分
D(js)=0;
for ii=1:2:12
D(js)=D(js)+abs((H_zuhe(js,ii+1))-(H_zuhe(js,ii)));%计算15种方案的所有簇信道增益差异之和
end
end
MAX=max(D);%取信道增益差异和的最大值
W=find(D==MAX);%找到信道增益差异和最大值所对应的方案号
LL=length(W);
d=zeros(LL,6);
for l=1:LL
for ii=1:2:12
d(l,(ii+1)/2)=abs((H_zuhe(W(l),ii+1))-(H_zuhe(W(l),ii)));%计算增益差异和最大方案对应的d1,d2,d3,d4,d5,d6,
end
end
F=zeros(1,LL);
for l=1:LL
ff(l)=mean(d(l,:));%取d1,d2,d3,d4,d5,d6的平均值
F(l)=((d(l,1)-ff(l))^2+(d(l,2)-ff(l))^2+(d(l,3)-ff(l))^2+(d(l,4)-ff(l))^2+(d(l,5)-ff(l))^2+(d(l,6)-ff(l))^2)/6;%计算增益差异和最大方案对应的方差
end
MIN=min(F);%取方差的最小值
Y=find(F==MIN);%找到方差取最小值所对应的位置
C=zeros(1,12);
C=H_zuhe(W(Y),:);%得到最终选择的分簇方案
CC1=[C(1),C(2)];%第一个簇中两个用户的信道增益
CC2=[C(3),C(4)];
CC3=[C(5),C(6)];
CC4=[C(7),C(8)];
CC5=[C(9),C(10)];
CC6=[C(11),C(12)];
C1=sort(CC1,'descend');
C2=sort(CC2,'descend');
C3=sort(CC3,'descend');
C4=sort(CC4,'descend');
C5=sort(CC5,'descend');
C6=sort(CC6,'descend');
hh=zeros(6,2);%存放每个用户的信道增益
hh(1,1)=C1(1);
hh(1,2)=C1(2);
hh(2,1)=C2(1);
hh(2,2)=C2(2);
hh(3,1)=C3(1);
hh(3,2)=C3(2);
hh(4,1)=C4(1);
hh(4,2)=C4(2);
hh(5,1)=C5(1);
hh(5,2)=C5(2);
hh(6,1)=C6(1);
hh(6,2)=C6(2);
HH(:,:,L)=hh; %HH为L个时隙下分簇后的信道增益矩阵
ww(1,:,1)=w(find(h==H_zuhe(W(Y),1)),:);
ww(2,:,1)=w(find(h==H_zuhe(W(Y),2)),:);
ww(1,:,2)=w(find(h==H_zuhe(W(Y),3)),:);
ww(2,:,2)=w(find(h==H_zuhe(W(Y),4)),:);
ww(1,:,3)=w(find(h==H_zuhe(W(Y),5)),:);
ww(2,:,3)=w(find(h==H_zuhe(W(Y),6)),:);
ww(1,:,4)=w(find(h==H_zuhe(W(Y),7)),:);
ww(2,:,4)=w(find(h==H_zuhe(W(Y),8)),:);
ww(1,:,5)=w(find(h==H_zuhe(W(Y),9)),:);
ww(2,:,5)=w(find(h==H_zuhe(W(Y),10)),:);
ww(1,:,6)=w(find(h==H_zuhe(W(Y),11)),:);
ww(2,:,6)=w(find(h==H_zuhe(W(Y),12)),:); %分簇后12个用户的位置ww(n,:,j)
end
end
end
%--------------分簇结束-----------------
%%%%%%%%初始化调度变量
AA=zeros(J,M,L);
for l=1:L
for m=1:M
[value,jj]=max(hh(:,2)); %[Y,U]=max(A):返回行向量Y和U,Y向量记录A的每列的最大值,U向量记录每列最大值的行号。
AA(jj,m,l)=1;
end
%%%保证同一个用户不会被分配给两个无人机
if AA(jj,1,l)==AA(jj,2,l)
[value,mm]=min(h(:,2));
AA(jj,mm,l)=0;
da=0;
for j=1:J
if j~=jj
if hh(j,:)>da;
da=hh(j,2);
% jj=j;
jjj=j;
end
end
end
% AA(j,mm,l)=1;
AA(jjj,mm,l)=1;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%
for l=1:L
for j=1:J
if sum(AA(j,:,l))==0;
% R_chu(k,n)=0;
else
m=find(AA(j,:,l)==1);
mm=3-m;
jj=find(AA(:,mm,l)==1);
% R_chu(k,n)=delta_I(n)*log2(1+P(k,n)*h(k,m,n)/(P(kk,n)*h(kk,m,n)+N0));
end
end
end
% for k=1:K
% R_optimal(k)=(1/N)*sum(R_chu(k,:));
% end
% Ar=A;
Ar=AA;
% t0=ones(1,L);%初始化上下行时隙
% t1=ones(1,L);
P=zeros(J,K,L);%初始化上行功率
%%--------------开始优化时隙-----------------
N0_dBm=-75; %dBm/Hz;
N0=(10^(N0_dBm/10))*(10^(-3));
% A=zeros(J,L);
for j=1:J
A(j,l)=0;
for k=1:K
A(j,l)=A(j,l)+((HH(j,k,l))^2*Pm*eta)/N0;
end
end
%二分法求得最优的T0,T1
f=@(T0)(1/log(2))*((A(1,l)*Tsum*2)/((Tsum-T0)+A(1,l)*T0*2)+(A(2,l)*Tsum*2)/((Tsum-T0)+A(2,l)*T0*2)+(A(3,l)*Tsum*2)/((Tsum-T0)+A(3,l)*T0*2)+(A(4,l)*Tsum*2)/((Tsum-T0)+A(4,l)*T0*2)+(A(5,l)*Tsum*2)/((Tsum-T0)+A(5,l)*T0*2)+(A(6,l)*Tsum*2)/((Tsum-T0)+A(6,l)*T0*2))-(log2(1+(A(1,l)*T0*2)/(Tsum-T0))+log2(1+(A(2,l)*T0*2)/(Tsum-T0))+log2(1+(A(3,l)*T0*2)/(Tsum-T0))+log2(1+(A(4,l)*T0*2)/(Tsum-T0))+log2(1+(A(5,l)*T0*2)/(Tsum-T0))+log2(1+(A(6,l)*T0*2)/(Tsum-T0)));
a=0.0001;
b=Tsum-0.0001;
g=0.00001;
e=b-a;
j=0;
while e>g
c=(a+b)/2;
if f(a)*f(c)<0
b=c;
elseif f(a)*f(c)>0
a=c;
else
a=c;b=c;
end
e=e/2;
j=j+1;
end
T0=(a+b)/2;
T1=Tsum-T0;
t0(l)=T0;
t1(l)=T1;
P=zeros(J,K,L);%初始化上行功率
for l=1:L
for j=1:J
for k=1:K
for m=1:M
% jj=find(A(:,m,l));
P(j,k,l)=(eta*HH(j,k,l)*Pm*t0(l))/t1(l);
end
end
end
end
%%--------------时隙优化完毕-----------------
%%%%%%%%%%优化无人机-用户调度%%%%%%%%%%%%%%
cvx_begin
variables s0;
variables AAA(J,K,L) tao(J,M,L) ;
% expression pj,pjj;
% expression P(J,K,L);
% P=zeros(J,K,L);%初始化上行功率
for l=1:L
for j=1:J
for k=1:K
% % for m=1:M
% P(j,k,l)=(eta*HH(j,k,l)*Pm*t0(l))/t1(l);
% % end
% end
% for k=1:K
pr=0;
pj=0;
ii=1;
iii=1;
for jj=1:J
m=1:M
kk=k+1:K;
mm=3-m;
% pj=pj+P(j,kk,l);
pr(ii)=P(jj,kk,l);
% pj=sum(P(jj,kk,l).*AA(jj,mm,l));
% pjj=pjj+P(j,k,l);
pj(iii)=P(jj,k,l)*AA(jj,mm,l);
% pj(iii)=P(jj,k,l);
ii=ii+1;
% pjj=pjj+P(jj,k,l).*AA(jj,mm,l);
end
IN=sum(pr)+sum(pj)+N0;
% IN=pj*HH(jj,kk,l)+pjj*HH(jj,k,l)+N0;
% isNan( P);
S = P(j,k,l)*HH(j,k,l);
% taor(j,m,l)=log(1+S*inv_pos(IN))/log(2);
taor(j,m,l)=log(1+S/IN)/log(2);
rou(j,m,l)=(Ar(j,m,l)+taor(j,m,l)).^2+2*(Ar(j,m,l)+taor(j,m,l)).*(AAA(jj,m,l)-Ar(j,m,l))+2*(Ar(jj,m,l)+taor(j,m,l)).*(tao(j,m,l)-taor(j,m,l));
% rou(k,m,n)=(Ar(k,m,n)+taor(k,m,n))^2+2*(Ar(k,m,n)+taor(k,m,n))*(AA(k,m,n)-Ar(k,m,n))+2*(Ar(k,m,n)+taor(k,m,n))*(tao(k,m,n)-taor(k,m,n));
R0(j,m,l)=t1(l)*(rou(j,m,l)-(AAA(j,m,l)^2+tao(j,m,l)^2))/2;
end
R00(j,l)=sum(R0(j,:,l));
end
end
运行结果及报错内容
m =
1 2
无法执行赋值,因为左侧和右侧的元素数目不同。
出错 cyclemotive (line 321)
pj(iii)=P(jj,k,l)*AA(jj,mm,l);
我的解答思路和尝试过的方法
已经卡到这里好几天了