Professional Documents
Culture Documents
Multi Chain Pegasis
Multi Chain Pegasis
EDA=5*10^(-9);
%Data Aggregation
DA=0.6;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
datanum1=DA*datanum;%%%%%%%%%%%%%%%%%%
rmax=5000;
do=sqrt(Efs/Emp);
E1=0.75;
STATISTICS3(r3+1).ALLIVE5=(STATISTICS3(r3+1).ALLIVE1+STATISTICS3(r3+1).ALLIVE2+STAT
ISTICS3(r3+1).ALLIVE3+STATISTICS3(r3+1).ALLIVE4);
for ii=1:1:25
if (S3(ii).E>0)
STATISTICS3(r3+1).Et1=STATISTICS3(r3+1).Et1 + S3(ii).E;
end
end
if (STATISTICS3(r3+1).ALLIVE1>0)
STATISTICS3(r3+1).Eavg1=STATISTICS3(r3+1).Et1/(25*Eo);
else
STATISTICS3(r3+1).Eavg1=0;
end
for ii=26:1:50
if (S3(ii).E>0)
STATISTICS3(r3+1).Et2=STATISTICS3(r3+1).Et2 + S3(ii).E;
end
end
if (STATISTICS3(r3+1).ALLIVE2>0)
STATISTICS3(r3+1).Eavg2=STATISTICS3(r3+1).Et2/(25*Eo);
else
STATISTICS3(r3+1).Eavg2=0;
end
for ii=51:1:75
if (S3(ii).E>0)
STATISTICS3(r3+1).Et3=STATISTICS3(r3+1).Et3 + S3(ii).E;
end
end
if (STATISTICS3(r3+1).ALLIVE3>0)
STATISTICS3(r3+1).Eavg3=STATISTICS3(r3+1).Et3/(25*Eo);
else
STATISTICS3(r3+1).Eavg3=0;
end
for ii=76:1:100
if (S3(ii).E>0)
STATISTICS3(r3+1).Et4=STATISTICS3(r3+1).Et4 + S3(ii).E;
end
end
if (STATISTICS3(r3+1).ALLIVE4>0)
STATISTICS3(r3+1).Eavg4=STATISTICS3(r3+1).Et4/(25*Eo);
else
STATISTICS3(r3+1).Eavg4=0;
end
STATISTICS3(r3+1).Eavg5=(STATISTICS3(r3+1).Eavg1+STATISTICS3(r3+1).Eavg2+STATISTICS
3(r3+1).Eavg3+STATISTICS3(r3+1).Eavg4)/4;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%allignment of allive nodes for the
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%formation of chains%%%%%%%%%%%%%%%%%%%%%%%%
A=zeros(1,STATISTICS3(r3+1).ALLIVE1);
for ii=1:1:25
if S3(ii).E>0
A(1)=ii;
break;
end
end
for ii=2:STATISTICS3(r3+1).ALLIVE1
for j=(A(ii-1)+1):25,
if S3(j).E>0
A(ii)=j;
break;
end
end
end
B=zeros(1,STATISTICS3(r3+1).ALLIVE2);
for ii=26:1:50
if S3(ii).E>0
B(1)=ii;
break;
end
end
for ii=2:(STATISTICS3(r3+1).ALLIVE2)
for j=(B(ii-1)+1):50,
if S3(j).E>0
B(ii)=j;
break;
end
end
end
C=zeros(1,STATISTICS3(r3+1).ALLIVE3);
for ii=51:1:75
if S3(ii).E>0
C(1)=ii;
break;
end
end
for ii=2:(STATISTICS3(r3+1).ALLIVE3)
for j=(C(ii-1)+1):75,
if S3(j).E>0
C(ii)=j;
break;
end
end
end
D=zeros(1,STATISTICS3(r3+1).ALLIVE4);
for ii=76:1:100
if S3(ii).E>0
D(1)=ii;
break;
end
end
for ii=2:(STATISTICS3(r3+1).ALLIVE4)
for j=(D(ii-1)+1):100,
if S3(j).E>0
D(ii)=j;
break;
end
end
end
hold off;
% figure(1);%%%%%%%%%%%%%%%%%movement of sink for region 1 chain formation%%%%%
%%%%%
x=x+33;
sink.x=x;
sink.y=25;
% plot(sink.x,sink.y,'ko')
hold on;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%
distance1=zeros(1,STATISTICS3(r3+1).ALLIVE1);
max_distance1=0;
max_node1=0;
distance2=zeros(1,STATISTICS3(r3+1).ALLIVE2);
max_distance2=0;
max_node2=0;
distance3=zeros(1,STATISTICS3(r3+1).ALLIVE3);
max_distance3=0;
max_node3=0;
distance4=zeros(1,STATISTICS3(r3+1).ALLIVE4);
max_distance4=0;
max_node4=0;
for ii=1:STATISTICS3(r3+1).ALLIVE1%%%calculating sink distance from all nodes
and finding farthest node
S3(A(ii)).distance1=sqrt((S3(A(ii)).xd - sink.x)^2+(S3(A(ii)).yd -
sink.y)^2);
if max_distance1<S3(A(ii)).distance1
max_distance1=S3(A(ii)).distance1;%%%%
max_node1=(A(ii));
end
end
for ii=1:STATISTICS3(r3+1).ALLIVE2%%%calculating sink distance from all nodes
and finding farthest node
S3(B(ii)).distance2=sqrt((S3(B(ii)).xd - sink.x)^2+(S3(B(ii)).yd -
sink.y)^2);
if max_distance2<S3(B(ii)).distance2
max_distance2=S3(B(ii)).distance2;%%%%
max_node2=(B(ii));
end
end
for ii=1:STATISTICS3(r3+1).ALLIVE3%%%calculating sink distance from all nodes
and finding farthest node
S3(C(ii)).distance3=sqrt((S3(C(ii)).xd - sink.x)^2+(S3(C(ii)).yd -
sink.y)^2);
if max_distance3<S3(C(ii)).distance3
max_distance3=S3(C(ii)).distance3;%%%%
max_node3=(C(ii));
end
end
for ii=1:STATISTICS3(r3+1).ALLIVE4%%%calculating sink distance from all nodes
and finding farthest node
S3(D(ii)).distance4=sqrt((S3(D(ii)).xd - sink.x)^2+(S3(D(ii)).yd -
sink.y)^2);
if max_distance4<S3(D(ii)).distance4
max_distance4=S3(D(ii)).distance4;%%%%
max_node4=(D(ii));
end
end
% % chain of nodes 1
connect_distance1=zeros(1,STATISTICS3(r3+1).ALLIVE1);%
connect_node1=zeros(1,STATISTICS3(r3+1).ALLIVE1);%
connect_node1(1)=max_node1;
connect_distance1(1)=0;
connect_distance1(ii)=temp_min_distance1;
connect_node1(ii)=temp_node1;
A1(connect_node1(ii),connect_node1(ii-1))=1;%if calculated minimum distance
is less than threshold
A1(connect_node1(ii-1),connect_node1(ii))=1;
% plot([S3(connect_node1(ii-1)).xd S3(connect_node1(ii)).xd],
[S3(connect_node1(ii-1)).yd S3(connect_node1(ii)).yd],'-o');
hold on;
end
k1=zeros(1,25); %
k1(1)=temp_L_node1; % placing the leader in each round at the start of
chain array
f1=zeros(1,(25+1)); %
for j0=1:25
if A1(k1(1),j0)==1 %
f1(2)=f1(2)+1; %
k1(f1(2)+1)=j0; %
S3(k1(1)).children(f1(2))=j0;
end
end
for j1=2:(25+1) %
if f1(j1)~=0 %
for t1=1:f1(j1)
t=sum(f1(1:(j1-1)))+t1+1; %
S3(k1(t)).parent=k1(j1-1); %
for j2=1:25
if A1(k1(t),j2)==1 %
if S3(k1(t)).parent~=j2 %
f1(t+1)=f1(t+1)+1; %f1(t+1)
k1(sum(f1(1:t))+1+f1(t+1))=j2; %sum(f1(1:t))
S3(k1(t)).children(f1(t+1))=j2;
end
end
end
end
end
end
%%%%%%%%%%%%%%%%%%%
distance_send1=zeros(1,100);
distance_send2=zeros(1,100);
child_count1=zeros(1,100);%%counter for child nodes of all nodes
for ii=1:25
if S3(ii).E>0%%%%%selection of secondary leader node in region 1%%%%%%%
if S3(ii).parent~=0
distance_send1(ii)=sqrt((S3(ii).xd-S3(S3(ii).parent).xd)^2+
(S3(ii).yd-S3(S3(ii).parent).yd)^2);
distance_send2(ii)=sqrt((S3(ii).xd-sink.x)^2+(S3(ii).yd-sink.y)^2);
if distance_send1(ii)>distance_send2(ii)
distance_send1(ii)=distance_send2(ii);
S3(ii).parent=0;
if f1(find(k1>(ii-1)&k1<(ii+1)))==1,
f1(find(k1>(ii-1)&k1<(ii+1)))=0;
else
f1(find(k1>(ii-1)&k1<(ii+1)))=1;
end
end
else
distance_send1(ii)=sqrt((S3(ii).xd-sink.x)^2+(S3(ii).yd-sink.y)^2);
%%finding distance between leader and sink
end
end
end
for ii=1:25
if S3(ii).E>0
child_count1(ii)=f1(find(k1>(ii-1)&k1<(ii+1))+1);
end
end
connect_distance2(ii)=temp_min_distance2;
connect_node2(ii)=temp_node2;
B1(connect_node2(ii),connect_node2(ii-1))=1;%if calculated minimum distance
is less than threshold
B1(connect_node2(ii-1),connect_node2(ii))=1;
% plot([S3(connect_node2(ii-1)).xd S3(connect_node2(ii)).xd],
[S3(connect_node2(ii-1)).yd S3(connect_node2(ii)).yd],'-+');
hold on;
end
%
% % %energy calculation for nodes in region 2
Q_max1=0;
L_node2(r3+1)=temp_L_node2;%temorary leader node
for ii=1:STATISTICS3(r3+1).ALLIVE2%%chain leader selection
distance_to_bs2(B(ii))=sqrt((S3(B(ii)).xd-sink.x)^2+(S3(B(ii)).yd-
sink.y)^2);%%
S3(B(ii)).Q=S3(B(ii)).E/distance_to_bs2(B(ii));%%ratio between the energy
and distance of each node to BS
if Q_max1<S3(B(ii)).Q
Q_max1=S3(B(ii)).Q;
L_node2(r3+1)=B(ii);%finding most optimal leader with highest weight
end
end
temp_L_node2=L_node2(r3+1);
k2=zeros(1,25); %
k2(1)=temp_L_node2; % placing the leader in each round at the start of
chain array
f2=zeros(1,(25+1)); %
for j0=26:1:50
if B1(k2(1),j0)==1 %
f2(2)=f2(2)+1; %
k2(f2(2)+1)=j0; %
S3(k2(1)).children(f2(2))=j0;
end
end
for j1=2:(25+1) %
if f2(j1)~=0 %
for t1=1:f2(j1)
t=sum(f2(1:(j1-1)))+t1+1; %
S3(k2(t)).parent=k2(j1-1); %
for j2=26:50
if B1(k2(t),j2)==1 %
if S3(k2(t)).parent~=j2 %
f2(t+1)=f2(t+1)+1; %f2(t+1)
k2(sum(f2(1:t))+1+f2(t+1))=j2; %sum(f2(1:t))
S3(k2(t)).children(f2(t+1))=j2;
end
end
end
end
end
end
hold on
%%%%%%%%%%%%%%%%%%
for ii=26:1:50
if S3(ii).E>0%%%%%secondary leader selection in region 2
if S3(ii).parent~=0
distance_send1(ii)=sqrt((S3(ii).xd-S3(S3(ii).parent).xd)^2+
(S3(ii).yd-S3(S3(ii).parent).yd)^2);
distance_send2(ii)=sqrt((S3(ii).xd-sink.x)^2+(S3(ii).yd-sink.y)^2);
if distance_send1(ii)>distance_send2(ii),
distance_send1(ii)=distance_send2(ii);
S3(ii).parent=0;
if f2(find(k2>(ii-1)&k2<(ii+1)))==1,
f2(find(k2>(ii-1)&k2<(ii+1)))=0;
else
f2(find(k2>(ii-1)&k2<(ii+1)))=1;
end
end
else
distance_send1(ii)=sqrt((S3(ii).xd-sink.x)^2+(S3(ii).yd-sink.y)^2);
%%finding distance between leader and sink
end
end
end
for ii=26:1:50
if S3(ii).E>0
child_count1(ii)=f2(find(k2>(ii-1)&k2<(ii+1))+1);
end
end
for ii=1:STATISTICS3(r3+1).ALLIVE2%%energy calculation on the basis of child
nodes of each node
if child_count1(B(ii))==0 %if only 1 child node
if distance_send1(B(ii))>do
S3(B(ii)).E=S3(B(ii)).E-
(ETX*datanum+datanum*Emp*((distance_send1(B(ii)))^4));
else
S3(B(ii)).E=S3(B(ii)).E-
(ETX*datanum+datanum*Efs*((distance_send1(B(ii)))^2));
end
else %if more than 1 child nodes
if distance_send1(B(ii))>do
S3(B(ii)).E=S3(B(ii)).E-
((child_count1(B(ii))*(ETX+EDA)*(datanum*DA))+
(ETX*datanum+datanum*Emp*((distance_send1(B(ii)))^4)));
else
S3(B(ii)).E=S3(B(ii)).E-
((child_count1(B(ii))*(ETX+EDA)*(datanum*DA))+
(ETX*datanum+datanum*Efs*((distance_send1(B(ii)))^2)));
end
end
end
for ii=1:STATISTICS3(r3+1).ALLIVE2%any node having child consumes ERX equal to
childs
S3(B(ii)).E=S3(B(ii)).E-(child_count1(B(ii))*ERX*datanum);
end
connect_distance3(ii)=temp_min_distance3;
connect_node3(ii)=temp_node3;
C1(connect_node3(ii),connect_node3(ii-1))=1;%if calculated minimum distance
is less than threshold
C1(connect_node3(ii-1),connect_node3(ii))=1;
% plot([S3(connect_node3(ii-1)).xd S3(connect_node3(ii)).xd],
[S3(connect_node3(ii-1)).yd S3(connect_node3(ii)).yd],'-o');
hold on;
end
k3=zeros(1,25); %
k3(1)=temp_L_node3; % placing the leader in each round at the start of chain
array
f3=zeros(1,(25+1)); %
for j0=51:75
if C1(k3(1),j0)==1 %
f3(2)=f3(2)+1; %
k3(f3(2)+1)=j0; %
S3(k3(1)).children(f3(2))=j0;
end
end
for j1=2:(25+1) %
if f3(j1)~=0 %
for t1=1:f3(j1)
t=sum(f3(1:(j1-1)))+t1+1; %
S3(k3(t)).parent=k3(j1-1); %
for j2=51:75
if C1(k3(t),j2)==1 %
if S3(k3(t)).parent~=j2 %
f3(t+1)=f3(t+1)+1; %f3(t+1)
k3(sum(f3(1:t))+1+f3(t+1))=j2; %sum(f3(1:t))
S3(k3(t)).children(f3(t+1))=j2;
end
end
end
end
end
end
%%%%%%%%%%%%%
for ii=51:75
if S3(ii).E>0
if S3(ii).parent~=0%%%%%secondary leader selection in region 3
distance_send1(ii)=sqrt((S3(ii).xd-S3(S3(ii).parent).xd)^2+(S3(ii).yd-
S3(S3(ii).parent).yd)^2);
distance_send2(ii)=sqrt((S3(ii).xd-sink.x)^2+(S3(ii).yd-sink.y)^2);
if distance_send1(ii)>distance_send2(ii),
distance_send1(ii)=distance_send2(ii);
S3(ii).parent=0;
if f3(find(k3>(ii-1)&k3<(ii+1)))==1,
f3(find(k3>(ii-1)&k3<(ii+1)))=0;
else
f3(find(k3>(ii-1)&k3<(ii+1)))=1;
end
end
else
distance_send1(ii)=sqrt((S3(ii).xd-sink.x)^2+(S3(ii).yd-sink.y)^2);%
%finding distance between leader and sink
end
end
end
for ii=51:75
if S3(ii).E>0
child_count1(ii)=f3(find(k3>(ii-1)&k3<(ii+1))+1);
end
end
for ii=1:STATISTICS3(r3+1).ALLIVE3%%energy calculation on the basis of child nodes
of each node
if child_count1(C(ii))==0 %if only 1 child node
if distance_send1(C(ii))>do
S3(C(ii)).E=S3(C(ii)).E-
(ETX*datanum+datanum*Emp*((distance_send1(C(ii)))^4));
else
S3(C(ii)).E=S3(C(ii)).E-
(ETX*datanum+datanum*Efs*((distance_send1(C(ii)))^2));
end
else %if more than 1 child nodes
if distance_send1(C(ii))>do
S3(C(ii)).E=S3(C(ii)).E-((child_count1(C(ii))*(ETX+EDA)*(datanum*DA))+
(ETX*datanum+datanum*Emp*((distance_send1(C(ii)))^4)));
else
S3(C(ii)).E=S3(C(ii)).E-((child_count1(C(ii))*(ETX+EDA)*(datanum*DA))+
(ETX*datanum+datanum*Efs*((distance_send1(C(ii)))^2)));
end
end
end
for ii=1:STATISTICS3(r3+1).ALLIVE3%any node having child consumes ERX equal to
childs
S3(C(ii)).E=S3(C(ii)).E-(child_count1(C(ii))*ERX*datanum);
end
connect_distance4(ii)=temp_min_distance4;
connect_node4(ii)=temp_node4;
D1(connect_node4(ii),connect_node4(ii-1))=1;%if calculated minimum distance
is less than threshold
D1(connect_node4(ii-1),connect_node4(ii))=1;
% plot([S3(connect_node4(ii-1)).xd S3(connect_node4(ii)).xd],
[S3(connect_node4(ii-1)).yd S3(connect_node4(ii)).yd],'-o');
hold on;
end
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%energy calculation for nodes 4
Q_max3=0;
L_node4(r3+1)=temp_L_node4;%temorary leader node
for ii=1:STATISTICS3(r3+1).ALLIVE4%%chain leader selection
distance_to_bs1(D(ii))=sqrt((S3(D(ii)).xd-sink.x)^2+(S3(D(ii)).yd-sink.y)^2);%%
S3(D(ii)).Q=S3(D(ii)).E/distance_to_bs1(D(ii));%%ratio between the energy and
distance of each node to BS
if Q_max3<S3(D(ii)).Q
Q_max3=S3(D(ii)).Q;
L_node4(r3+1)=D(ii);%finding most optimal leader with highest weight
end
end
temp_L_node4=L_node4(r3+1);
k4=zeros(1,25); %
k4(1)=temp_L_node4; % placing the leader in each round at the start of chain
array
f4=zeros(1,(25+1)); %
for j0=76:100
if D1(k4(1),j0)==1 %
f4(2)=f4(2)+1; %
k4(f4(2)+1)=j0; %
S3(k4(1)).children(f4(2))=j0;
end
end
for j1=2:(25+1) %
if f4(j1)~=0 %
for t1=1:f4(j1)
t=sum(f4(1:(j1-1)))+t1+1; %
S3(k4(t)).parent=k4(j1-1); %
for j2=76:100
if D1(k4(t),j2)==1 %
if S3(k4(t)).parent~=j2 %
f4(t+1)=f4(t+1)+1; %f4(t+1)
k4(sum(f4(1:t))+1+f4(t+1))=j2; %sum(f4(1:t))
S3(k4(t)).children(f4(t+1))=j2;
end
end
end
end
end
end
%%%%%%%%%%%%%%%%%%%
for ii=76:100
if S3(ii).E>0
if S3(ii).parent~=0
distance_send1(ii)=sqrt((S3(ii).xd-S3(S3(ii).parent).xd)^2+(S3(ii).yd-
S3(S3(ii).parent).yd)^2);
distance_send2(ii)=sqrt((S3(ii).xd-sink.x)^2+(S3(ii).yd-sink.y)^2);
if distance_send1(ii)>distance_send2(ii),
distance_send1(ii)=distance_send2(ii);
S3(ii).parent=0;
if f4(find(k4>(ii-1)&k4<(ii+1)))==1,
f4(find(k4>(ii-1)&k4<(ii+1)))=0;
else
f4(find(k4>(ii-1)&k4<(ii+1)))=1;
end
end
else
distance_send1(ii)=sqrt((S3(ii).xd-sink.x)^2+(S3(ii).yd-sink.y)^2);%
%finding distance between leader and sink
end
end
end
for ii=76:100
if S3(ii).E>0
child_count1(ii)=f4(find(k4>(ii-1)&k4<(ii+1))+1);
end
end
for ii=1:STATISTICS3(r3+1).ALLIVE4%%energy calculation on the basis of child nodes
of each node
if child_count1(D(ii))==0 %if only 1 child node
if distance_send1(D(ii))>do
S3(D(ii)).E=S3(D(ii)).E-
(ETX*datanum+datanum*Emp*((distance_send1(D(ii)))^4));
else
S3(D(ii)).E=S3(D(ii)).E-
(ETX*datanum+datanum*Efs*((distance_send1(D(ii)))^2));
end
else %if more than 1 child nodes
if distance_send1(D(ii))>do
S3(D(ii)).E=S3(D(ii)).E-((child_count1(D(ii))*(ETX+EDA)*(datanum*DA))+
(ETX*datanum+datanum*Emp*((distance_send1(D(ii)))^4)));
else
S3(D(ii)).E=S3(D(ii)).E-((child_count1(D(ii))*(ETX+EDA)*(datanum*DA))+
(ETX*datanum+datanum*Efs*((distance_send1(D(ii)))^2)));
end
end
end
for ii=1 :STATISTICS3(r3+1).ALLIVE4%any node having child consumes ERX equal to
childs
S3(D(ii)).E=S3(D(ii)).E-(child_count1(D(ii))*ERX*datanum);
end
if (x==66)
x=0;
end
% hold off
end
r3=0:rmax;
figure(2);
plot(r3,RENERGY1,'-g');
legend('4 chains with Mobile sink at center of 4 chains');
xlabel('Number of Round');
ylabel('Residual Energy');
% title('Heterogeneous nodes');
figure(3);
for j = 1:rmax
eav(j+1) = STATISTICS3(j+1).Eavg5;
end
plot(r3,eav,'-g');
legend('4 chains with Mobile sink at center of 4 chains');
xlabel('Number of Round');
ylabel('Normalized Average Energy per Round (J)');
% title('\bf Heterogeneous nodes');
figure(4);
for ii = 0:rmax
nodes(ii+1) = STATISTICS3(ii+1).ALLIVE5;
end
plot(r3,nodes,'-g');
legend('4 chains with Mobile sink at center of 4 chains');
xlabel('Number of Round');
ylabel('Number of Alive Nodes per Rounds');
% title('\bf Heterogeneous nodes');
figure(5);
for ii = 0:rmax
nodes1(ii+1) = STATISTICS3(ii+1).DEAD5;
end
plot(r3,nodes1,'-g');
legend('4 chains with Mobile sink at center of 4 chains');
xlabel('x(Number of Round)');
ylabel('Number of Dead Nodes per Rounds');
% title('\bf Heterogeneous nodes');