【WSN通信】A星改进LEACH多跳传输协议附matlab代码
【WSN通信】A星改进LEACH多跳传输协议附matlab代码
TT_Matlab
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。
1 简介
OHILEACH(Optimized heuristic ILEACH)是一种新技术,它使用基于 AI 的启发式搜索来优化网络寿命。
2 部分代码
close
all;
clear;
clc;
%-------------------------------
%Number of Nodes in the field
n=
200
;
%n=input(
’Enter the number of nodes in the space : ’
);
%Energy Model (all
values
in Joules)
%Initial Energy
Eo=
0
.
1
;
%Eo=input(
’Enter the initial energy of sensor nJ : ’
);
%Field Dimensions -
x
and
y
maximum (in meters)
% xm=input(
’Enter x value for area plot : ’
);
% ym=input(
’Enter y value for area plot : ’
);
xm=
100
;
ym=
100
;
%x
and
y
Coordinates of the Sink
sink.x=
1.5
*xm;
sink.y=
0
.
5
*ym;
%Optimal Election Probability of a node
%to become cluster head
p=
0
.
2
;
%Eelec=Etx=Erx
ETX=
50
*
0
.
000000001
;
ERX=
50
*
0
.
000000001
;
%Transmit Amplifier types
Efs=
10
*
0
.
000000000001
;
Emp=
0
.
0013
*
0
.
000000000001
;
%Data Aggregation Energy
EDA=
5
*
0
.
000000001
;
%Values
for
Hetereogeneity
%Percentage of nodes than are advanced
m
=
0
.
5
;
%alpha
a=
1
;
%maximum number of rounds
%rmax=input(
’enter the number of iterations you want to run : ’
);
rmax=
200
;
%------------------
%Computation of
do
do
=
sqrt
(Efs/Emp);
%Creation of the random Sensor Network
figure(
1
);
hold off;
for
i=
1
:
1
:n
S(i).xd=
rand
(
1
,
1
)*xm;
XR(i)=S(i).xd;
S(i).yd=
rand
(
1
,
1
)*ym;
YR(i)=S(i).yd;
S(i).G=
0
;
%initially there are
no
cluster heads only nodes
S(i).type=
’N’
;
temp_rnd
0
=i;
%Random Election of Normal Nodes
if
(temp_rnd
0
>=
m
*n+
1
)
S(i).E=Eo;
S(i).ENERGY=
0
;
plot(S(i).xd,S(i).yd,
’o-r’
);
hold on;
end
%Random Election of Advanced Nodes
if
(temp_rnd
0
<
m
*n+
1
)
S(i).E=Eo*(
1
+a);
S(i).ENERGY=
1
;
plot(S(i).xd,S(i).yd,
’+’
);
hold on;
end
end
S(n+
1
).xd=sink.x;
S(n+
1
).yd=sink.y;
plot(S(n+
1
).xd,S(n+
1
).yd,
’o’
,
’MarkerSize’
,
12
,
’MarkerFaceColor’
,
’r’
);
figure(
1
);
% figure(
1
)
% plot(o1,o2,
’^’
,
’LineWidth’
,
1
,
’MarkerEdgeColor’
,
’k’
,
’MarkerFaceColor’
,
’y’
,
’MarkerSize’
,
12
);
% hold on
%First Iteration
%counter
for
CHs
countCHs=
0
;
%counter
for
CHs per round
rcountCHs=
0
;
cluster=
1
;
countCHs;
rcountCHs=rcountCHs+countCHs;
flag_first_dead=
0
;
for
r=
0
:
1
:rmax
r;
%Operation
for
epoch
if
(mod(r, round(
1
/p) )==
0
)
for
i=
1
:
1
:n
S(i).G=
0
;
S(i).cl=
0
;
end
end
hold off;
%Number of dead nodes
dead=
0
;
%Number of dead Advanced Nodes
dead_a=
0
;
%Number of dead Normal Nodes
dead_n=
0
;
%counter
for
bit transmitted to Bases Station
and
to Cluster Heads
packets_TO_BS=
0
;
packets_TO_CH=
0
;
%counter
for
bit transmitted to Bases Station
and
to Cluster Heads
%per round
PACKETS_TO_CH(r+
1
)=
0
;
PACKETS_TO_BS(r+
1
)=
0
;
figure(
1
);
for
i=
1
:
1
:n
%checking
if
there is a dead node
if
(S(i).E<=
0
)
plot(S(i).xd,S(i).yd,
’^’
,
’LineWidth’
,
1
,
’MarkerEdgeColor’
,
’k’
,
’MarkerFaceColor’
,
’y’
,
’MarkerSize’
,
8
);
dead=dead+
1
;
if
(S(i).ENERGY==
1
)
dead_a=dead_a+
1
;
end
if
(S(i).ENERGY==
0
)
dead_n=dead_n+
1
;
end
hold on;
end
if
S(i).E>
0
S(i).type=
’N’
;
if
(S(i).ENERGY==
0
)
plot(S(i).xd,S(i).yd,
’o’
,
’LineWidth’
,
1
,
’MarkerEdgeColor’
,
’k’
,
’MarkerFaceColor’
,
’g’
,
’MarkerSize’
,
8
);
end
if
(S(i).ENERGY==
1
)
plot(S(i).xd,S(i).yd,
’+’
,
’LineWidth’
,
3
,
’MarkerEdgeColor’
,
’k’
,
’MarkerFaceColor’
,
’r’
,
’MarkerSize’
,
8
);
end
hold on;
end
end
plot(S(n+
1
).xd,S(n+
1
).yd,
’x’
,
’LineWidth’
,
1
,
’MarkerEdgeColor’
,
’k’
,
’MarkerFaceColor’
,
’r’
,
’MarkerSize’
,
8
);
STATISTICS(r+
1
).DEAD=dead;
DEAD(r+
1
)=dead;
DEAD_N(r+
1
)=dead_n;
DEAD_A(r+
1
)=dead_a;
% plot(S(n+
1
).xd,S(n+
1
).yd,
’o’
,
’MarkerSize’
,
12
,
’MarkerFaceColor’
,
’r’
);
% plot(S(n+
1
).xd,S(n+
1
).yd,
’x’
,
’LineWidth’
,
1
,
’MarkerEdgeColor’
,
’k’
,
’MarkerFaceColor’
,
’r’
,
’MarkerSize’
,
8
);
%When the first node dies
if
(dead==
1
)
if
(flag_first_dead==
0
)
first_dead=r;
flag_first_dead=
1
;
end
end
for
i=
1
:
1
:n
S(i).mem=-
5
;
S(i).neigh=
5
;
end
countCHs=
0
;
cluster=
1
;
for
i=
1
:
1
:n
if
(S(i).E>
0
)
temp_rand=
rand
;
if
( (S(i).G)<=
0
)
form = p / (
1
+ a*
m
);
%form = form *(S(i).E/
0
.
1
);
%v=
sqrt
((n-dead)*p -
1
);
%form=form*
sqrt
(S(i).neigh);
if
S(i).ENERGY ==
1
form = form * (
1
+ a);
end
if
r+
1
- S(i).mem <
1
/p
form = S(i).E/
0
.
1
*
sqrt
(S(i).neigh);
end
%Election of Cluster Heads
if
(temp_rand <= (form/(
1
-form*mod(r,round(
1
/form)))))
countCHs=countCHs+
1
;
packets_TO_BS=packets_TO_BS+
1
;
PACKETS_TO_BS(r+
1
)=packets_TO_BS;
S(i).type=
’C’
;
S(i).mem=r+
1
;
S(i).G=round(
1
/form)-
1
;
C(cluster).xd=S(i).xd;
C(cluster).yd=S(i).yd;
plot(S(i).xd,S(i).yd,
’k*’
);
distance=
sqrt
( (S(i).xd-(S(n+
1
).xd) )^
2
+ (S(i).yd-(S(n+
1
).yd) )^
2
);
C(cluster).distance=distance;
C(cluster).id=i;
X(cluster)=S(i).xd;
Y(cluster)=S(i).yd;
cluster=cluster+
1
;
%Calculation of Energy dissipated
% figure(
2
);
%
for
r=
0
:
1
:
24
% ylabel(
’Average Energy of Each Node’
);
% xlabel(
’Round Number’
);
% plot([r r+
1
],[STATISTICS(r+
1
).AVG STATISTICS(r+
2
).AVG],
’red’
);
% hold on;
% end
% figure(
3
);
%
for
r=
0
:
1
:
49
% ylabel(
’Average Energy of Each Node’
);
% xlabel(
’Round Number’
);
% plot([r r+
1
],[STATISTICS(r+
1
).AVG STATISTICS(r+
2
).AVG],
’red’
);
% hold on;
% end
% figure(
4
);
%
for
r=
0
:
1
:
74
% ylabel(
’Average Energy of Each Node’
);
% xlabel(
’Round Number’
);
% plot([r r+
1
],[STATISTICS(r+
1
).AVG STATISTICS(r+
2
).AVG],
’red’
);
% hold on;
% end
figure(
2
);
for
r=
0
:
1
:rmax-
1
ylabel(
’Average Energy of Each Node’
);
xlabel(
’Round Number’
);
plot([r r+
1
],[STATISTICS(r+
1
).AVG STATISTICS(r+
2
).AVG],
’red’
);
hold on;
end
% figure(
6
);
%
for
r=
0
:
1
:
24
% ylabel(
’Number of Dead Nodes’
);
% xlabel(
’Round Number’
);
% plot([r r+
1
],[STATISTICS(r+
1
).DEAD STATISTICS(r+
2
).DEAD],
’red’
);
% hold on;
% end
% figure(
7
);
%
for
r=
0
:
1
:
49
% ylabel(
’Number of Dead Nodes’
);
% xlabel(
’Round Number’
);
% plot([r r+
1
],[STATISTICS(r+
1
).DEAD STATISTICS(r+
2
).DEAD],
’red’
);
% hold on;
% end
% figure(
8
);
%
for
r=
0
:
1
:
74
% ylabel(
’Number of Dead Nodes’
);
% xlabel(
’Round Number’
);
% plot([r r+
1
],[STATISTICS(r+
1
).DEAD STATISTICS(r+
2
).DEAD],
’red’
);
% hold on;
% end
figure(
3
);
for
r=
0
:
1
:rmax-
1
ylabel(
’Number of Dead Nodes’
);
xlabel(
’Round Number’
);
plot([r r+
1
],[STATISTICS(r+
1
).DEAD STATISTICS(r+
2
).DEAD],
’red’
);
hold on;
end
fid=fopen(
’ILEACH.txt’
,
’wt’
);
for
r=
0
:
1
:rmax-
1
fprintf( fid,
’%f ’
,STATISTICS(r+
1
).AVG);
end
fprintf(fid ,
’
’
);
for
r=
0
:
1
:rmax-
1
fprintf( fid,
’%f ’
,STATISTICS(r+
1
).DEAD);
end
fprintf(fid ,
’
’
);
3 仿真结果
4 参考文献
[1]张华忠, 刘志杰, 于鹏程. WSN中负载平衡的LEACH通信协议研究[J]. 计算机工程与设计, 2007(18):85-88.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
