节点移动模型-MATLAB 仿真

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

高斯马尔科夫模型实现和仿真

高斯马尔科夫模型描述

高斯马尔科夫模型描述为每个节点被赋予一个当前的速率v 和方向sita ,在一个固定的时间间隔 ∆t(时隙)后,每个节点更新当前的速率和方向,每次间隔之初更新,更新公式如下:

1(1)t t n v av a v +=+-,1(1)t t n a a θθθ+=+-+。在每个指定的时间∆周期t 内,得到1t v +和1t θ+ 的计算值,则运动的目标位置可以通过下述式子得到:1cos t t t t x x v t θ+=+⋅⋅,1sin t t t t y y v t θ+=+⋅⋅。一个时间间隔内,节点都按照v 匀速运动到目标位置,称为一个step 。

一个完整的step 包括:

1.节点参数的设置:

仿真时间:T=1000;

步进时间:dt=1;步进时间越小,路径曲线越光滑。

时间间隔:nt=20;

速度范围:vmin=1;vmax=1.5;

场景范围:xmin=0;xmax=100;ymin=0;ymax=50;

随机产生起始点的位置:xa=unifrnd(0,100,[1,1]); ya=unifrnd(0,50,[1,1]); 初始速率设置为速率分布的期望:va=(vmin+vmax)/2;%初始速度

初始速度方向设置为方向分布的期望:sitaa=(0+2*pi)/2;

速率平均值:vmean=(vmin+vmax)/2;

速度方向平均值: sitamean=(0+2*pi)/2;

2.节点随机初始速度设置为vmean=(vmin+vmax )/2,sitamean=(0+2*pi)/2;随机获取初始位置xa,ya ∆。固定一个时间间隔t=20。vn,sitan 是服从高斯分布的随机变量,vn 服从均值为

1.5,方差为0.2的高斯分布:vn=normrnd(1.5,0.2,1,1),sitan 服从均值为pi ,方差为0.2的高斯分布sitan =normrnd(pi,0.2,1,1);随机变量a 的范围是(0,1),并且在这个范围内均匀分布。

2.节点在每个时间间隔更新速率和速度方向,根据初始节点的位置得到移动的目标位置xb ,yb 。

3.目标节点位置变为下一个step 的初始节点。

模型参数设置:

变量:调节参数a,速度v ,方向sita ,节点位置(x,y ),随机参数vn,sitan 初始节点位置节点位置:xmin=0;xmax=100;ymin=0;ymax=50; A(xa,ya)

初始节点速度参数:vmin=1;vmax=2;,速度平均值vmean=(vmin+vmax)/2, 速度方向平均值sitamean=(0+2*pi)/2

时间参数:nt=20;

clear all ;

%相关参数设定

T=1000;%仿真时间s

dt=1;%补进时间s

nt=30;%时间间隔

vmin=0.5;vmax=1;%速度范围

tmin=0.1;tmax=0.1;%停顿时间范围s

xmin=0;xmax=1000;ymin=0;ymax=500;%场景的范围

tex=0;%初始化运行时间记忆变量

%axis([xmin xmax ymin ymax]);%设定坐标范围

%figure(1);

hold on;%保留绘图内容

xa=unifrnd(0,100,[1,1]);%随机发生起始点坐标

ya=unifrnd(0,50,[1,1]);

va=(vmin+vmax)/2;%初始速度

sitaa=(0+2*pi)/2;%随机发生一个初始速度方向,前进角度服从均匀分布

vmean=(vmin+vmax)/2;%速度平均值

sitamean=(0+2*pi)/2;%速度方向平均值

while(1)

a=unifrnd(0,1,[1,1]);%a用来调节随机性

vn=normrnd(1.5,0.2,1,1);%服从高斯分布的速率参数

sitan=normrnd(pi,0.2,1,1);%服从高斯分布的速度方向参数

vb=a*va+(1-a)*vmean+sqrt((1-a^2))*vn;%到达目的节点后确定下一段的速度

sitab=a*sitaa+(1-a)*sitamean+sqrt((1-a^2))*sitan;%到达目的节点后确定下一段的速度方向

if T-tex>=nt

for t=0:dt:nt

xb=xa+va*cos(sitab)*t;

yb=ya+va*sin(sitab)*t;%节点在到达目的节点后可以确定下一目的节点的位置 plot(xb,yb,'.');

if xb

xa=xa+xmax;

elseif xb>xmax %x坐标到达右边界

xa=xa-xmax;

end

if yb

ya=ya+ymax;

elseif yb>ymax %y坐标到达上边界

ya=ya-ymax;

end

tex=tex+dt;

end

else

for t=0:dt:T-tex

xb=xa+va*cos(sitab)*t;

yb=ya+va*sin(sitab)*t;%节点在到达目的节点后可以确定下一目的节点的位置 plot(xb,yb,'.');

if xb

xa=xa+xmax;

elseif xb>xmax %x坐标到达右边界

xa=xa-xmax;

end

if yb

ya=ya+ymax;

elseif yb>ymax %y坐标到达上边界

ya=ya-ymax;

end

tex=tex+dt;

return

end

end

xa=xb;ya=yb;%将目标点更新为新Step的起点

va=vb,sitaa=sitab;

end

相关文档
最新文档