【路径规划】基于Djisktra算法实现路由无线传感器网络模拟随机路点运动模型含Matlab源码
时间:2022-08-11 07:30:00
1 简介
基于Djisktra路由无线传感器网络模拟随机路点运动模型
2 部分代码
clc;clear all;close all;global EexL X Y Xb Yb N nodesCH alpha beta A SNpause(4)rng default;stop1=0;RoutingId=3;%3 --- Modified DijikstraN=80; % No. of nodest1='800x800';t2=strsplit(t1,'x');min1=0;max1=str2double(t2(2));X = min1 (max1-min1)*rand(1,N);Y = min1 (max1-min1)*rand(1,N);%%figure,plot(X,Y,'o','LineWidth',1,...'MarkerEdgeColor','k',...'MarkerFaceColor','g',...'MarkerSize',7');xlabel('X in m')ylabel('Y in m')for i2 = 1:Ntext(X(i2), Y(i2), num2str(i2),'FontSize',10);hold on;endhold onxlabel('x');ylabel('y');%% RWM model% velocity distribution min and max (0,2)minVel=-4;maxVel=4;% PauseTime (0,1)minPause=0;maxPause=1;simTime=350;% Round750Rc=150; % coverage Area%Rc=280; %sensor field Radius% position of source nodetb='0x0';t2=strsplit(tb,'x');Xs =str2double(t2(1));Ys =str2double(t2(2));hold onplot(Xs,Ys,'s','LineWidth',1,...'MarkerEdgeColor','k',...'MarkerFaceColor','r',...'MarkerSize',12');xlabel('X in m')ylabel('Y in m')text(Xs, Ys, 'Source','FontSize',10);hold on;% position of sink node%t1='410x410';t2=strsplit(t1,'x');Xb =str2double(t2(1));Yb =str2double(t2(2));hold onplot(Xb,Yb,'s','LineWidth',1,...'MarkerEdgeColor','k',...'MarkerFaceColor','y',...'MarkerSize',12');xlabel('X in m')ylabel('Y in m')text(Xb, Yb, 'Base','FontSize',10);hold on;%%alpha=0.01;%0.001 energy per distance% 0.001 %% node to CH power Ratiobeta=0.045;%0.0015 %% CH to sink distance power ratioSector1=1;nodes=N;% Total No. of Nodes%% Energymi1=0; mi2=25; mi3=50;ma1=50;ma2=75; ma3=100;Ep =4*1e3; % 4000 mWE1=Ep.*(mi1 (ma1-mi1).*rand(1,round(nodes/3)))./100E2=Ep.*(mi2 (ma2-mi2).*rand(1,round(nodes/3)))./100E3=Ep.*(mi3 (ma3-mi3).*rand(1,nodes-2*round(nodes/3)))./100E=[E1 E2 E3]%E=4.*ones(1,nodes); % intial Energy 4WPackSize=2; % 2Mb/secnodesCH=10;% no of cluster headEexL=E;E1=E;%% Ch selectionchalg1='chselalg.m'chalg=strrep(chalg1,'.m,;varName=matlab.lang.makeValidName(chalg);chselalg=str2func(varName)%% RoutingRoute_type = 'custom';%% EnergyFunctionEfun1='Energyfun.m'Efun=strrep(Efun1,'.m,;varName=matlab.lang.makeValidName(Efun);Efun=str2func(varName)A=3;if(strcmp(Route_type,'custom'))Ralg1='DjisktraRoute.m';Ralg=strrep(Ralg1,'.m,;varName=matlab.lang.makeValidName(Ralg);Ralgfun=str2func(varName)end%%%% ThroughputFnThfun1='Throughputfun.m';Thfun=srrep(Thfun1,'.m','');varName=matlab.lang.makeValidName(Thfun);Thfun=str2func(varName)%% Simulation Startsround=simTime;roundDelay=0.05;%%ipp=1;Alivenodes=zeros(1,round);AvgEc=zeros(1,round);Throughput=zeros(1,round);d=1;apL=1;%%X1=[Xs X Xb];Y1=[Ys Y Yb];matrizP=pdist2([X1 ;Y1]',[X1; Y1]');%%%N=nodes;%N1=1:nodes;figure,slider1_data.val=40;% 110 percent mobilityPauseTime=minPause+(maxPause-minPause).*rand(1,N);ipppause=zeros(1,N);while(ipp%% Mobility Rangecla;axis([min1-30 max1+30 min1-30 max1+30])hold onVelocity=minVel+(maxVel-minVel).*rand(2,N);[valPause,indexPause]=find(abs(PauseTime-ipppause)>0);ipppause(indexPause)=0;ipppause=ipppause+1;m1=10;%0.01+(slider1_data.val/100);aa=-1;ba=1;delx=Velocity(1,:);dely=Velocity(2,:);delx(indexPause) = Velocity(1,indexPause);dely(indexPause) = Velocity(2,indexPause);X(indexPause)=X(indexPause)+delx.*m1;Y(indexPause)=Y(indexPause)+dely.*m1;X(Xmax1)=X(X max1)-delx(X max1).*m1; Y(Ymax1)=Y(Y max1)-dely(Y max1).*m1; %%X1=[Xs X Xb];Y1=[Ys Y Yb];matrizP=pdist2([X1 ;Y1]',[X1; Y1]');%Ah=[ipp X Y]plot(X,Y,'o','LineWidth',1,...'MarkerEdgeColor','k','Linewidth', 0.5,...'MarkerFaceColor','g',...'MarkerSize',8');xlabel('X in m')ylabel('Y in m')for i2 = 1:Ntext(X(i2), Y(i2), num2str(i2),'FontSize',10);hold on;endhold onxlabel('x');ylabel('y');hold onplot(Xb,Yb,'s','LineWidth',1,...'MarkerEdgeColor','k',...'MarkerFaceColor','y',...'MarkerSize',12');xlabel('X in m')ylabel('Y in m')text(Xb, Yb, 'Base','FontSize',10);hold on;% Sourceplot(Xs,Ys,'s','LineWidth',1,...'MarkerEdgeColor','k',...'MarkerFaceColor','r',...'MarkerSize',12');xlabel('X in m')ylabel('Y in m')text(Xs, Ys, 'Source','FontSize',10);hold on;%%EneExL(ipp)=0;A1=randperm(N); % Randomly select Source nodeind=A1(3);pathL=[];%% Custom Adhoc Routingif(A==3)Source =1;Dest=numel(X1);Rc1=Rc;%4.*matrizP(matrizP>Rc1)=inf;[pathP,cost]=Ralgfun(Source,Dest,matrizP);costN=cost.*length(pathP);dist1L=costN;dist2L=0;apL=0;if(~isempty(pathP))if(pathP(end)~=Dest)pathP=[pathP Dest];endif(EexL(ind)~=0 )pathP(pathP==Source)=-2;pathP(pathP==Dest)=-1;pathL=pathP;%[ind -1];path11=pathP;path11(path11==-1)=[];path11(path11==-2)=[];path11=path11;% Sink Node Assign as PathL=-1apL=apL+1;path11=path11-1EexL(path11)=EexL(path11)-Efun(alpha,beta,dist1L,dist2L,A);EneExL(ipp)=Efun(alpha,beta,dist1L,dist2L,A).*numel(path11);endendend%%%EexL(ind)=EexL(ind)-alpha.*dist1L -(beta+0.5).*dist2L;%id1(ind)%EexL(id1(ind))if(EexL(ind)<=0)EexL(ind)=0;end%%if(Sector1==1)if(~isempty(pathL))path1=pathL;for p =1:(size(path1,2))-1if(path1(p+1)==-1)line([X1(path1(p)) Xb], [Y1(path1(p)) Yb], 'Color','c','LineWidth',2, 'LineStyle','-')arrow([X1(path1(p)) Y1(path1(p)) ], [Xb Yb ])elseif(path1(p)==-2)line([Xs X1(path1(p+1))], [Ys Y1(path1(p+1))], 'Color','c','LineWidth',2, 'LineStyle','-')arrow([Xs Ys ],[X1(path1(p+1)) Y1(path1(p+1)) ])elseline([X1(path1(p)) X1(path1(p+1))], [Y1(path1(p)) Y1(path1(p+1))], 'Color','c','LineWidth',2, 'LineStyle','-')arrow([X1(path1(p)) Y1(path1(p)) ], [X1(path1(p+1)) Y1(path1(p+1))])endhold onendendendEexL(EexL<=0)=0;indg3=find(EexL<=0);% if(A==2 || A==4 || A==5)% [CH]=chselalg(EexL,nodesCH,RoutingId)% end%% Store ParametersEc2L(ipp)=sum(EexL); % Energy ConsumptionREc2L(ipp)=sum(E1) - sum(EexL); % Remaining Energy Level% Throughput CalcRxData1L=apL;if(ipp>1)ThroughputL(ipp)=Thfun(ThroughputL,RxData1L,ipp-1);elseThroughputL(ipp)=RxData1L*PackSize;end% AliveNodes Calchold onplot(X(indg3),Y(indg3),'o','LineWidth',1,...'MarkerEdgeColor','k',...'MarkerFaceColor','k',...'MarkerSize',8');xlabel('X in m')ylabel('Y in m')hold onAlivenodesL(ipp)=N-numel(indg3);%Avg Energy ConsumedAvgEcL(ipp)=mean(EneExL);ipp=ipp+1;txt = {['Time in Sec-> ' num2str(ipp)]};text(10,600,txt)%set(h,'string',['Time in Sec-> ' num2str(ipp)]);pause(roundDelay)if(stop1==1)stop1=0;break;endend%%inde=find(Ralg1=='.');Az=Ralg1(1:inde-1);fname=['-' Az];save(['Result\Alivenodes' fname '.mat'],'AlivenodesL')save(['Result\AvgEc' fname '.mat'],'AvgEcL')save(['Result\Ec2' fname '.mat'],'Ec2L')save(['Result\REc2' fname '.mat'],'REc2L')save(['Result\Throughput',fname,'.mat'],'ThroughputL')% %%figure,plot(1:numel(AlivenodesL)-1,AlivenodesL(1:end-1),'-*k')xlabel('Rounds')ylabel('AliveNodes')title('Alivenodes')%figure,plot(1:numel(AvgEcL)-1,AvgEcL(1:end-1),'-*k')xlabel('Rounds')ylabel('AvgEnergyConsumption')title('AvgEnergyConsumption')%%figure,plot(1:numel(Ec2L),Ec2L(1:end),'-*k')xlabel('Rounds')ylabel('Remaining Energy Level')title('Remaining Energy Level')%%figure,plot(1:numel(REc2L),REc2L(1:end),'-*k')xlabel('Rounds')ylabel('Energy Consumption Level')title('Energy Consumption Level')%%% Throughputfigure,plot(1:numel(ThroughputL)-1,ThroughputL(1:end-1),'-*k')xlabel('Rounds')ylabel('Recieved-Packets')title('Recieved-Packets')
3 仿真结果

4 参考文献
[1]王菁华, 张翠敏. 智能机器人综合路径规划算法在Matlab中的实现[J]. 天津工程师范学院学报, 2006, 16(3):4.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。

