【物理应用】基于matlab Q学习无线体域网路由方法【含Matlab源码 264期】
一、获取代码方式
获取代码方式1:
完整代码已上传我的资源:【物理应用】基于matlab Q学习无线体域网路由方法【含Matlab源码 264期】
获取代码方式2:
通过订阅紫极神光博客付费专栏,凭支付凭证,私信博主,可获得此代码。
备注:
订阅紫极神光博客付费专栏,可免费获得1份代码(有效期为订阅日起,三天内有效);
二、无线体域网简介
在无线体域网网络中,体域网节点在电源能量、计算能力、通信能力等方面具有局限性,节点间如何相互协作并发挥其整体综合作用,是设计无线体域网网络自组织的重点和难点。同时,针对无线体域网能量有限的特点,如何延长网络生存期也是设计无线体域网的一个重点。强化学习是一种无监督的机器学习技术,能够利用不确定的环境奖赏发现最优的行为序列,实现动态环境下的在线学习,因此强化学习被公认为是构成智能Agent的理想技术之一。
1 无线体域网系统结构
2 无线体域网路由协议
2.1 无线路由协议
要对无线体域网WBAN的路由协议进行分析,首先要对现有的无限传感器路由协议分析研究。
无线体域网WBAN是一种自组织的网络,现有的无线传感器路由协议,从网络拓扑结构来看,可分为平面路由协议、层次路由协议等路由协议。
2.2 高效节能路由协议
无线体域网WBAN路由性能研究早已成为广大学者研究的热点,那么其高效节能路由协议也是无线体域网WBAN设计的必要选择。传统的Ad Hoc网络路由协议一般以跳数、时延等参数作为衡量路径长度的指标,因此通过这些路由协议选择的路径,一般情况下能提供一定的QoS保证,但是它消耗了过多的节点能量,并且大大减少了节点和网络的运行时间,使得网络寿命大大降低。
2.3 DSR路由协议
DSR(Dynamic Source Routing)路由协议是一种采用反应式路由思想的路由协议。DSR为每个节点维护一个路由缓存,存储它所知道的源路由,并在得到新路由时更新缓存路由。
对于DSR路由选择时,源节点的路由表会包含从源节点到目的节点的完整路由信息。当源节点需要发送数据给目的节点时,它首先查看源路由缓存,如果源路由缓存中具有有效路由,则采用此路由发送数据,否则就发起一个路由发现过程。路由发现时,源节点广播路由请求分组(RREQ),每个收到RREQ的节点都将根据RREQ中的目的地址进行判断。
3 Agent增强学习算法
4 Q-learning增强学习算法
DSR_WBAN处理流程图
二、源代码
clc,clear,close all
% 人身体表面近似一个矩形区域
% Nx 被设置成200cm,表示矩形长度.
% Ny 被设置成120cm,表示矩形高度.
% deltax 横向两节点间隔.
% deltay 高度方向两节点间隔.
Nx=200; % Nx 被设置成200cm,表示矩形长度.
Ny=120;% Ny 被设置成120cm,表示矩形高度.
deltax=8; % deltax 横向两节点间隔.
deltay=10; % deltay 高度方向两节点间隔.
circle_r = 15; % 覆盖面通信半径
gamma = 0.8; % Q学习参数
Sink = 14;
person; % 人体model
hold on
for i=1:size(node_xy_int,1)
text(node_xy_int(i,1)+1,node_xy_int(i,2)+5,num2str(i),'Color',[0 0 1]) % 标记
end
load('node_xy_int.mat') % xy 坐标
load('conx.mat') % 邻接矩阵
R = dijf(node_xy_int,conx); % 返回距离矩阵
%% WBAN
% 初始化变量
numnodes2=[]; % 节点数量
Ptrans2=[]; % 需要传输的能量
Sensitivity2=[]; % 目标节点接受一个信号所需最小能量mj
connexion2=[]; % 通信链接百分比
P0=50.5;
d0=10;
n=7.4;
numnodes = 26; % 节点数量
Ptrans = 100; % 需要传输的能量
Sensitivity = 40; % 目标节点接受一个信号所需最小能量mj
% 初始化变量,避免变量维数冲突
source=[node_xy_int(14,1),node_xy_int(14,2)]; % Sink节点
sourcetot=[]; sourcetot1=[];
dest=[]; dest1=[];
destot=[]; destot1=[];
Plosstot=[]; Plosstot1=[];
distance=[]; distance1q = [];
Q_learning = [] ; Q_learning1 = [];
rr =[]; rr1 =[];
diffxtot1=[]; diffytot1=[]; difftot1=[];
R2=rand(numnodes); % 0-1之间的numnodes x numnodes的矩阵, 初始化
gamma_init = [0.8,0.5,0.2];
numdest_init = [2,4,16,9,22,26,20];
for kgam = 1:3
gamma = gamma_init(1,kgam);
numd=1;
for numnodes=8:12/6:20
R2=rand(numnodes); % 0-1之间的numnodes x numnodes的矩阵, 初始化
source; % 起始节点
numdest = numdest_init(1,numd); % 目标节点标号
dest = node_xy_int( numdest,:); % 终始节点
%Q_learning
[Q_path,dmin,Q_learn] = Rf_Q_learning(Sink,numdest,R,gamma); % 返回当前节点dijkstra的节点路径
r = 0;
nQ_path = length(Q_path);
for i=1:(nQ_path-1)
r= r+ R( Q_path(1,i), Q_path(1,i+1)); % 起始节点到目标节点最小距离
end
rr =[rr,r];
Q_learning = [Q_learning, Q_learn ] ;
Ploss = (P0 + 10*n*log10(r/d0))/4-gamma-gamma*R2(1); % Pathloss 的计算公式 : Ploss = P0 + 10*n*log10(r/d0).
Plosstot = [Plosstot,Ploss]; % 路由损耗
distance = [distance,r]; % 距离
sourcetot = [sourcetot; source]; % 起始节点
destot = [destot; dest]; % 相对应的终始节点
numd = numd + 1;
%Here we plot the different source and destination nodes:
%Source nodes are drawn as blue circles.
%Destination nodes are drawn as green pluses.
% plot(sourcetot(:,1),sourcetot(:,2),'or','markersize',10)
% hold on
% plot(destot(:,1),destot(:,2),'.k','markersize',10)
% plot([source(:,1),dest(:,1)],[source(:,2),dest(:,2)],'linewidth',2)
diff=dest-source; % 终始节点与起始节点 横纵坐标差
diffx=diff(1); % 获取横坐标 差
% 由于人体被表征为一个矩体,则节点在前后矩形面绕线式分布
% the lateral surface of the cylinder are the same: Nx=0.
if abs(diffx) <= Nx/2
diffx=diff(1);
elseif ((abs(diffx)) > Nx/2) && (diffx < 0)
diffx = Nx - abs(diff(1));
elseif ((abs(diffx)) > Nx/2) && (diffx >= 0)
diffx = abs(diff(1)) - Nx;
end
% obtain the different necessary values.
diffy = diff(2); % 起始节点和终始节点 纵坐标差
r1 = sqrt(diffx^2 + diffy^2); % 起始节点和终始节点 距离
direction = (atan2(diffy,diffx))*180/pi; % 起始节点和终始节点连线的角度
Ploss1 = (P0 + 10*n*log10(r1/d0))/4; % Pathloss 的计算公式 : Ploss = P0 + 10*n*log10(r/d0).
Plosstot1 = [Plosstot1 Ploss1]; % 路由损耗
distance1q = [distance1q r1]; % 距离
sourcetot1 = [sourcetot1; source]; % 起始节点
destot1 = [destot1; dest]; % 相对应的终始节点
diffxtot1 = [diffxtot1 diffx];
diffytot1 = [diffytot1 diffy];
end
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 门云阁.MATLAB物理计算与可视化[M].清华大学出版社,2013.
文章来源: qq912100926.blog.csdn.net,作者:海神之光,版权归原作者所有,如需转载,请联系作者。
原文链接:qq912100926.blog.csdn.net/article/details/113770013
- 点赞
- 收藏
- 关注作者
评论(0)