clc;
clear;
close all
M = 100; % the total number of pedestrians
len = 50;
wid = 50;
delta = 0.5; %代表每个格子的宽度和长度,即行人的身体直径
door1 = len/2 - 0.5;
door2 = len/2 + 0.5;
xd = len; %position of the exit,x
yd= (door2-door1)/2+door1; %position of the exit,y
door3 = wid/2-0.5;
door4 = wid/2+0.5;
xe=(door4-door3)/2+door3; %position of the exit2,x
ye=wid; %position of the exit2,y 增加一个出口
xu = 0:0.1:len;
yu = len;
plot(xu,yu,'-k','LineWidth',2);%上侧墙
xr1 = 0:0.1:door3;
yr1 = wid;
plot(xr1,yr1,'-k','LineWidth',2);%上侧
hold on
xr2 = door4:0.1:wid;
yr2 = wid;%上侧
plot(xr2,yr2,'-k','LineWidth',2);
hold on
xr3 = len;
yr3 = 0:0.1:door1;
plot(xr3,yr3,'-k','LineWidth',2);%右侧
hold on
xr4 = len;
yr4 = door2:0.1:len;%右侧
plot(xr4,yr4,'-k','LineWidth',2);
hold on
ydown = 0; %下侧
plot(xu,ydown,'-k','LineWidth',2);
hold on
xleft = 0;
yleft = 0:0.1:len;
plot(xleft,yleft,'-k','LineWidth',2)
hold on
k = randperm(100,100); %产生M个数,这些数满足小于等于100的整数 ///横排的格子数 x轴方向
j = randperm(100,100); %代表纵排的格子数 y轴方向
flag = zeros(len/delta,wid/delta);
for i = 1:M
flag( k(i),j(i) ) = 1; %将格子内存在行人的位置(k,j)标记为1,无行人的格子标记为0
inside(i) = 1;
end
for i = delta:0.5:(len-delta)
ii = 0:0.01:wid;
iii = i .* ones(1,size(ii,2));
plot(iii,ii)
axis([0,len,0,wid])
hold on
end
hold on
for i = delta:0.5:(wid-delta)
ii = 0:0.01:len;
iii = i .* ones(1,size(ii,2));
plot(ii,iii)
axis([0,len,0,wid])
hold on
end
r = 0.25;%代表身体半径
for i = 1:M
x(i) = delta * k(i) - r;
y(i) = delta * j(i) - r;
SaveX(1,i) = x(i); %表示第一次计算,存储的行人i的x坐标位置
SaveY(1,i) = y(i);
V(i) = 1.25; %initial velocity
end
h1 = plot(x,y,'mo','XDataSource','x','YDataSource','y','Markersize',4);%follow guide1
hold on
cnt = 1;%计数功能
count = M;
Rmax=5;
Rmin=2;
while count >0
cnt = cnt + 1;
for i=1:M
distance1(i)=sqrt( (xd-x(i))^2 +(yd-y(i))^2 );
distance2(i)=sqrt( (xe-x(i))^2 +(ye-y(i))^2 );
end
density1=zeros(1,M);
density2=zeros(1,M);
% d1=zeros(1,M);
% d2=zeros(1,M);
for i=1:M
if distance1(i)>Rmin && distance1(i)<Rmax
density1(i)=density1(i)+1;
end
end
for i=1:M
if distance2(i)>Rmin && distance2(i)<Rmax
density2(i)=density2(i)+1;
end
end
d1=sum(sum(density1));
d2=sum(sum(density2));
out1=zeros(1,M);
out2=zeros(1,M);
for i=1:M
a=newfis('q');
a=addvar(a,'input','distance1',[0 50*sqrt(2)]);
a=addvar(a,'input','d1',[0 100]);
a=addvar(a,'output','probability1',[0 1]);
a=addmf(a,'input',1,'long','smf',[25*sqrt(2) 50*sqrt(2)]);
a=addmf(a,'input',1,'short','zmf',[0 25*sqrt(2)]);
a=addmf(a,'input',2,'small','zmf',[0 50]);
a=addmf(a,'input',2,'big','smf',[50 100]);
a=addmf(a,'output',1,'low','smf',[0 0.5]);
a=addmf(a,'output',1,'high','zmf',[0.5 1]);
rulelist=[1 1 1 1 1;
2 2 2 1 1;
2 1 2 1 1;
1 2 1 1 1];
a=addrule(a,rulelist);
a1 = setfis(a,'DefuzzMethod','centroid');
% gensurf(a);产生out1图像
in1=[distance1(i) d1];
out1(i)=evalfis(in1,a1) ; %模糊逻辑计算选择右侧出口的可能性
b=newfis('w');
b=addvar(b,'input','distance2',[0 50*sqrt(2)]);
b=addvar(b,'input','d2',[0 100]);
b=addvar(b,'output','probability2',[0 1]);
b=addmf(b,'input',1,'long','smf',[25*sqrt(2) 50*sqrt(2)]);
b=addmf(b,'input',1,'short','zmf',[0 25*sqrt(2)]);
b=addmf(b,'input',2,'small','zmf',[0 50]);
b=addmf(b,'input',2,'big','smf',[50 100]);
b=addmf(b,'output',1,'low','smf',[0 0.5]);
b=addmf(b,'output',1,'high','zmf',[0.5 1]);
rulelist=[1 1 1 1 1;
2 2 2 1 1;
2 1 2 1 1;
1 2 1 1 1];
b=addrule(b,rulelist);
b1 = setfis(b,'DefuzzMethod','centroid');
% gensurf(b);产生out2图像
in2=[distance2(i) d2];
out2(i)=evalfis(in2,b1); %模糊逻辑计算选择上侧出口的可能性
end
for i = 1:M
if out1(i)>out2(i)
xm=xe;
ym=ye;
else
xm=xd;
ym=yd;
end
if inside(i) == 0 %如果行人I不在房间内,则跳过该行人
continue
end
if k(i)-1 > 0 & k(i) < len/delta & j(i)-1 >0 & j(i) < wid/delta %针对行人i周围的8个格子存在的情况
if flag( k(i),j(i)+1 ) == 0
xup = delta * k(i) - r; % 当前行人所在格子的 上方格子 1
yup = delta * ( j(i)+1 ) - r;
dis_upd = sqrt( (xm-xup)^2 +(ym-yup)^2 ); % 当前行人所在格子的上方格子 距离 出口的距离
else
dis_upd = inf;
end
if flag(k(i),( j(i)-1 )) == 0
xdown = delta * k(i) - r; % 当前行人所在格子的 下方格子 2
ydown = delta * ( j(i)-1 ) - r;
dis_downd = sqrt( (xm-xdown)^2 +(ym-ydown)^2 ); % 当前行人所在格子的下方格子 距离 出口的距离
else
dis_downd = inf;
end
if flag(( k(i) -1 ),j(i)) == 0
xleft = delta * ( k(i) -1 ) - r; % 当前行人所在格子的 左方格子 3
yleft = delta * j(i) - r;
dis_leftd = sqrt( (xm-xleft)^2 +(ym-yleft)^2 ); % 当前行人所在格子的左方格子 距离 出口的距离
else
dis_leftd = inf;
end
if flag(( k(i) +1 ),j(i)) == 0
xright = delta * ( k(i) +1 ) - r; % 当前行人所在格子的 右方格子 4
yright = delta * j(i) - r;
dis_rightd = sqrt( (xm-xright)^2 +(ym-yright)^2 ); % 当前行人所在格子的右方格子 距离 出口的距离
else
dis_rightd = inf;
end
if flag(( k(i) -1 ),( j(i) +1 )) == 0
xleftup = delta * ( k(i) -1 ) - r; % 当前行人所在格子的 左上方格子 5
yleftup = delta * ( j(i) +1 ) - r;
dis_leftupd = sqrt( (xm-xleftup)^2 +(ym-yleftup)^2 ); % 当前行人所在格子的左上方格子 距离 出口的距离
else
dis_leftupd = inf;
end
if flag(( k(i) -1 ),( j(i) -1 )) == 0
xleftdown = delta * ( k(i) -1 ) - r; % 当前行人所在格子的 左下方格子 6
yleftdown = delta * ( j(i) -1 ) - r;
dis_leftdownd = sqrt( (xm-xleftdown)^2 +(ym-yleftdown)^2 ); % 当前行人所在格子的左下方格子 距离 出口的距离
else
dis_leftdownd = inf;
end
if flag(( k(i) +1 ),( j(i) +1 ) ) == 0
xrightup = delta * ( k(i) +1 ) - r; % 当前行人所在格子的 右上方格子 7
yrightup = delta * ( j(i) +1 ) - r;
dis_rightupd = sqrt( (xm-xrightup)^2 +(ym-yrightup)^2 ); % 当前行人所在格子的右上方格子 距离 出口的距离
else
dis_rightupd = inf;
end
if flag(( k(i) +1 ),( j(i) -1 )) == 0
xrightdown = delta * ( k(i) +1 ) - r; % 当前行人所在格子的 右下方格子 8
yrightdown = delta * ( j(i) -1 ) - r;
dis_rightdownd = sqrt( (xm-xrightdown)^2 +(ym-yrightdown)^2 ); % 当前行人所在格子的右下方格子 距离 出口的距离
else
dis_rightdownd = inf;
end
wangs.rar_exit ldpc_元胞自动机_元路径
版权申诉
176 浏览量
2022-07-14
06:33:48
上传
评论
收藏 5KB RAR 举报
alvarocfc
- 粉丝: 112
- 资源: 1万+
最新资源
- HTML5小游戏【阳光高尔夫球-优秀H5小游戏合集】游戏源码分享下载 - golfblast.zip
- 二层半独栋别墅结构水电施工图结构施工图.dwg
- 数据结构,常用的数据结构
- 某三层别墅建筑施工图编号D061-三层-12.54&12.24米-施工图.dwg
- 某三层别墅施工图带效果图D060-三层-23.04&15.39米- 施工图.dwg
- 流水灯,8个灯,不同花样
- TikTokPlugin-1.39-for-rezvorck.apk
- 某三层豪华型别墅建筑施工图D059-三层-27.00&16.00米- 施工图.dwg
- 11111111111111111111
- process-data-final.c
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈