注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mister.Hu(巷里人家)

Go abroad!

 
 
 

日志

 
 
关于我

A campus photograph palyer,an enthusiastic reader,a solitary writer,a future traffic engineer.

网易考拉推荐

Simulation in escalator[Part 2]  

2016-03-05 16:05:37|  分类: Senior |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
function [SPN1,SPN2,SPN3,SPN4,SPN5,SPN6]=Pedes_Create
%this function can create the Pedenum*1 matrix indicate the time interval for each pedestrian which submit to Erlang distribution
%When the pedenum is 100,we should change.
global Pedenum;
%SPN means the number of pedestrians for every second.
SPN1=zeros(67,1);SPN2=zeros(67,1);SPN3=zeros(67,1);SPN4=zeros(67,1);SPN5=zeros(67,1);SPN6=zeros(67,1);%When Pedenum=25,used.
P1=randperm(67,Pedenum);P2=randperm(67,Pedenum);P3=randperm(67,Pedenum);P4=randperm(67,Pedenum);P5=randperm(67,2*Pedenum);P6=randperm(67,2*Pedenum);%When Pedenum=25,used.
SPN1(P1)=1;SPN2(P2)=1;SPN3(P3)=1;SPN4(P4)=1;SPN5(P5)=1;SPN6(P6)=1;%When Pedenum=25,used.
% SPN1=zeros(67,1);SPN2=zeros(67,1);SPN3=zeros(67,1);SPN4=zeros(67,1);SPN5=ones(67,1);SPN6=ones(67,1);%When Pedenum=50,used.
% P1=randperm(67,Pedenum);P2=randperm(67,Pedenum);P3=randperm(67,Pedenum);P4=randperm(67,Pedenum);P5=randperm(67,2*Pedenum-67);P6=randperm(67,2*Pedenum-67);%When Pedenum=50,used.
% SPN1(P1)=1;SPN2(P2)=1;SPN3(P3)=1;SPN4(P4)=1;SPN5(P5)=2;SPN6(P6)=2;%When Pedenum=50,used.
end

function [PM,SM,PP,SVM,SDM,PM0,FSVM]=Comfirm_Initial_Pedes(SM,r,PM,SVM,SDM,PM0,FSVM,SPN1,SPN2,SPN3,SPN4,SPN5,SPN6)
%confirm the position of initial pedes.
%EnNoPed means the entrys which don't have pedestrians.
%IPos means the initial pedes' position.
global TWid;
global Wid;
IPos1=[];IPos2=[];IPos3=[];IPos4=[];IPos5=[];IPos6=[];
%Confirm the first Door
EnNoPed=SM(58:71,26+TWid:29+TWid)==0;
EnNoPed=all(EnNoPed'==1)';
s=1;EnNoPed1=zeros(11,1);
for k=1:11
    if all(EnNoPed(k:k+3))==1
        Sub=182*(TWid+28)+k+57;
        EnNoPed1(s,1)=Sub;s=s+1;
    end
end
EnNoPed1=EnNoPed1(1:s-1,:);
if ~isempty(EnNoPed1)
    IPos1=randsrc(SPN1(r),1,EnNoPed1');
end
%Confirm the second Door
EnNoPed=SM(112:125,26+TWid:29+TWid)==0;
EnNoPed=all(EnNoPed'==1)';
s=1;EnNoPed2=zeros(11,1);
for k=1:11
    if all(EnNoPed(k:k+3))==1
        Sub=182*(TWid+28)+k+111;
        EnNoPed2(s,1)=Sub;s=s+1;
    end
end
EnNoPed2=EnNoPed2(1:s-1,:);
if ~isempty(EnNoPed2)
    IPos2=randsrc(SPN2(r),1,EnNoPed2');
end
%Confirm the third Door
EnNoPed=SM(4:17,26+TWid:29+TWid)==0;
EnNoPed=all(EnNoPed'==1)';
s=1;EnNoPed3=zeros(11,1);
for k=1:11
    if all(EnNoPed(k:k+3))==1
        Sub=182*(TWid+28)+k+3;
        EnNoPed3(s,1)=Sub;s=s+1;
    end
end
EnNoPed3=EnNoPed3(1:s-1,:);
if ~isempty(EnNoPed3)
    IPos3=randsrc(SPN3(r),1,EnNoPed3');
end
%Confirm the forth Door
EnNoPed=SM(166:179,26+TWid:29+TWid)==0;
EnNoPed=all(EnNoPed'==1)';
s=1;EnNoPed4=zeros(11,1);
for k=1:11
    if all(EnNoPed(k:k+3))==1
        Sub=182*(TWid+28)+k+165;
        EnNoPed4(s,1)=Sub;s=s+1;
    end
end
EnNoPed4=EnNoPed4(1:s-1,:);
if ~isempty(EnNoPed4)
    IPos4=randsrc(SPN4(r),1,EnNoPed4');
end
%Confirm the fifth Door
EnNoPed=SM(2:5,32:25+TWid)==0;
EnNoPed=sum(EnNoPed);
s=1;EnNoPed5=zeros(TWid,1);
for k=1:TWid-9
    if all(EnNoPed(1,k:k+3)==4)
        Sub=182*(33+k)+2;
        EnNoPed5(s,1)=Sub;s=s+1;
    end
end
EnNoPed5=EnNoPed5(1:s-1,:);
if ~isempty(EnNoPed5)
    if SPN5(r)==1
        IPos5=randsrc(SPN5(r),1,EnNoPed5');
    elseif SPN5(r)==2
        A=randsrc(1,1,EnNoPed5');
        B=EnNoPed5(EnNoPed5>=A+4*Wid|EnNoPed5<=A-4*Wid);
        if ~isempty(B)
            C=randsrc(1,1,B');
            IPos5=[A;C];
        else
            IPos5=A;
        end
    end
end
%Confirm the sixth Door
EnNoPed=SM(178:181,32:25+TWid)==0;
EnNoPed=sum(EnNoPed);
s=1;EnNoPed6=zeros(TWid,1);
for k=1:TWid-9
    if all(EnNoPed(1,k:k+3)==4)
        Sub=182*(33+k)+178;
        EnNoPed6(s,1)=Sub;s=s+1;
    end
end
EnNoPed6=EnNoPed6(1:s-1,:);
if ~isempty(EnNoPed6)
    if SPN6(r)==1
        IPos6=randsrc(SPN6(r),1,EnNoPed6');
    elseif SPN6(r)==2
        A=randsrc(1,1,EnNoPed6');
        B=EnNoPed6(EnNoPed6>=A+4*Wid|EnNoPed6<=A-4*Wid);
        if ~isempty(B)
            C=randsrc(1,1,B');
            IPos6=[A;C];
        else
            IPos6=A;
        end
    end
end
%PM means the position matrix,the people previous in time would be in front at PM.
PM=[PM;IPos1;IPos2;IPos3;IPos4;IPos5;IPos6];
InPM=Get_InPM(PM);
PM0=[PM0;IPos1;IPos2;IPos3;IPos4;IPos5;IPos6];
SM(InPM(InPM~=0))=1;
% PP=(1:length(PP)+SPN1(r)+SPN2(r)+SPN3(r)+SPN4(r)+SPN5(r)+SPN6(r));
PP=(1:length(PM))';%PP is the Pedestrians Pool.
%confirm the speed of initial pedes.
SVM=[SVM;4*ones(SPN1(r)+SPN2(r)+SPN3(r)+SPN4(r)+SPN5(r)+SPN6(r),1)];
SDM=[SDM;3*ones(SPN1(r)+SPN2(r)+SPN3(r)+SPN4(r),1);5*ones(SPN5(r),1);ones(SPN6(r),1)];
FSVM=[FSVM;4*ones(SPN1(r)+SPN2(r)+SPN3(r)+SPN4(r)+SPN5(r)+SPN6(r),1)];
end

function [TRP]=Get_TRP(AchiID,PP,PM,SVM,SDM)
%j means the existing pedes in the field now.the following is to find out the ITRP.
%Each existing peds would get a row in ITRP.
%ITRP means the inital total route matrix.
global Wid;
TRP=cell(length(PP),1);
if ~isempty(PP)
    for k=1:length(PP)
        if SVM(k)==0
            TRP(k,1)={PM(k,1)};
        else
            switch SDM(k)
                case 1
                    TRP(k,1)={[PM(k,1) PM(k,1)-1 PM(k,1)-2 PM(k,1)-3 PM(k,1)-4 PM(k,1)+Wid PM(k,1)-Wid PM(k,1)+Wid-1 PM(k,1)-Wid-1]};
                case 5
                    TRP(k,1)={[PM(k,1) PM(k,1)+1 PM(k,1)+2 PM(k,1)+3 PM(k,1)+4 PM(k,1)+Wid PM(k,1)+Wid+1 PM(k,1)-Wid PM(k,1)-Wid+1]};
                case 2
                    TRP(k,1)={[PM(k,1) PM(k,1)-1 PM(k,1)-2 PM(k,1)-Wid PM(k,1)-Wid-1 PM(k,1)-Wid-2 PM(k,1)-2*Wid PM(k,1)-2*Wid-1 PM(k,1)-2*Wid-2]};
                case 6
                    TRP(k,1)={[PM(k,1) PM(k,1)+1 PM(k,1)+2 PM(k,1)+Wid PM(k,1)+Wid+1 PM(k,1)+Wid+2 PM(k,1)+2*Wid PM(k,1)+2*Wid+1 PM(k,1)+2*Wid+2]};
                case 4
                    TRP(k,1)={[PM(k,1) PM(k,1)+1 PM(k,1)+2 PM(k,1)-Wid PM(k,1)-Wid+1 PM(k,1)-Wid+2 PM(k,1)-2*Wid PM(k,1)-2*Wid+1 PM(k,1)-2*Wid+2]};
                case 8
                    TRP(k,1)={[PM(k,1) PM(k,1)-1 PM(k,1)-2 PM(k,1)+Wid PM(k,1)+Wid-1 PM(k,1)+Wid-2 PM(k,1)+2*Wid PM(k,1)+2*Wid-1 PM(k,1)+2*Wid-2]};
                case 3
                    TRP(k,1)={[PM(k,1) PM(k,1)-Wid PM(k,1)-2*Wid PM(k,1)-3*Wid PM(k,1)-4*Wid  PM(k,1)+1 PM(k,1)-1 PM(k,1)-Wid+1 PM(k,1)-Wid-1]};
                case 7
                    TRP(k,1)={[PM(k,1) PM(k,1)+Wid PM(k,1)+2*Wid PM(k,1)+3*Wid PM(k,1)+4*Wid  PM(k,1)-1 PM(k,1)+1 PM(k,1)+Wid-1 PM(k,1)+Wid+1]};
            end
        end
    end
end
%we should choose from ITRP to get the final matrix TRP
TRP=cellfun(@(x) x(ismember(x,AchiID)),TRP, 'UniformOutput',false);
% TRP=cellfun(@(x) x(~isnan(CFI(x))),TRP, 'UniformOutput',false);
end

function [TRP]=Sort_TRP(PM,TRP,SM,SFI,FSVM)
%sort the TRP by CFI
if ~isempty(TRP)
    for k=1:length(TRP)
        if ~isempty(TRP{k})
            PDFI=zeros(length(TRP{k}),1);PSFI=zeros(length(TRP{k}),1);PCFI=zeros(length(TRP{k}),1);
            for s=1:length(TRP{k})
                [R,C]=ind2sub(size(SM),TRP{k}(s));
                PDFI(s,1)=min(Get_DFI1(PM,SM,R,C,FSVM),Get_DFI2(PM,SM,R,C,FSVM));
                PSFI(s,1)=sum(sum(SFI(R:R+3,C-3:C)));
                PCFI(s,1)=Get_WDFI(PM,SM,R,C,FSVM)*PDFI(s,1)+PSFI(s,1)/9;
                %                 PCFI(s,1)=PDFI(s,1)+PSFI(s,1)/4;
            end
            [~,RA0]=sort(PCFI);
            RA0=RA0(1:find(RA0==1));
            TRP(k,1)={TRP{k}(RA0)};
        end
    end
else
    TRP={[]};
end
end

function [WDFI] =Get_WDFI(PM,SM,R,C,FSVM)
global TWid;
AIND=SM==1;
AIND(2:87,22:29)=1;%the escalator
AIND([1,182],:)=1;%the insulating layer
AIND(:,[1,30+TWid])=1;%the insulating layer
AIND(2:91,[20,21,30,31])=1;%the handrail
IND1=zeros(182,66);
if R>=5&&R<=175&&C>=8&&C<=62
    IND1(R-4:R+7,C-7:C+4)=1;
    SIZE=144;
    IND1=AIND.*IND1;
    IND1=IND1(1:182,1:66);
    IND=find(IND1==1);
    NUMC=numel(IND);
    [a,~,c]=intersect(IND,PM);
    NUMP=numel(a);
    SFSVM=sum(FSVM(c));
    WDFI=(NUMC*NUMP)/(SIZE*SFSVM);
else
    WDFI=4/9;
end
if WDFI==0
    WDFI=1;
elseif isinf(WDFI)
    WDFI=10;
end
end

function [PARM]=Get_PARM(TRP,PM,SDM)
%This RM is used to keep a record of the pedes'path.
global Wid;
PARM=cell(length(TRP),9);
for k=1:length(TRP)
    for s=1:length(TRP{k})
        A=(TRP{k}(s)-PM(k));
        if A==0%keep static
            PARM(k,s)={PM(k)};
        else
            switch SDM(k)
                %SDM=1
                case 1
                    switch A
                        case -1
                            PARM(k,s)={[PM(k) PM(k)-1]};
                        case -2
                            PARM(k,s)={[PM(k) PM(k)-1 PM(k)-2]};
                        case -3
                            PARM(k,s)={[PM(k) PM(k)-1 PM(k)-2 PM(k)-3]};
                        case -4
                            PARM(k,s)={[PM(k) PM(k)-1 PM(k)-2 PM(k)-3 PM(k)-4]};
                        case Wid
                            PARM(k,s)={[PM(k) PM(k)+Wid]};
                        case -Wid
                            PARM(k,s)={[PM(k) PM(k)-Wid]};
                        case Wid-1
                            PARM(k,s)={[PM(k) PM(k)+Wid-1]};
                        case -Wid-1
                            PARM(k,s)={[PM(k) PM(k)-Wid-1]};
                    end
                    %SDM=5
                case 5
                    switch A
                        case 1
                            PARM(k,s)={[PM(k) PM(k)+1]};
                        case 2
                            PARM(k,s)={[PM(k) PM(k)+1 PM(k)+2]};
                        case 3
                            PARM(k,s)={[PM(k) PM(k)+1 PM(k)+2 PM(k)+3]};
                        case 4
                            PARM(k,s)={[PM(k) PM(k)+1 PM(k)+2 PM(k)+3 PM(k)+4]};
                        case Wid
                            PARM(k,s)={[PM(k) PM(k)+Wid]};
                        case -Wid
                            PARM(k,s)={[PM(k) PM(k)-Wid]};
                        case Wid+1
                            PARM(k,s)={[PM(k) PM(k)+Wid+1]};
                        case -Wid+1
                            PARM(k,s)={[PM(k) PM(k)-Wid+1]};
                    end
                    %SDM=3
                case 3
                    switch A
                        case -Wid
                            PARM(k,s)={[PM(k) PM(k)-Wid]};
                        case -2*Wid
                            PARM(k,s)={[PM(k) PM(k)-Wid PM(k)-2*Wid]};
                        case -3*Wid
                            PARM(k,s)={[PM(k) PM(k)-Wid PM(k)-2*Wid PM(k)-3*Wid]};
                        case -4*Wid
                            PARM(k,s)={[PM(k) PM(k)-Wid PM(k)-2*Wid PM(k)-3*Wid PM(k)-4*Wid]};
                        case -Wid+1
                            PARM(k,s)={[PM(k) PM(k)-Wid+1]};
                        case -Wid-1
                            PARM(k,s)={[PM(k) PM(k)-Wid-1]};
                        case 1
                            PARM(k,s)={[PM(k) PM(k)+1]};
                        case -1
                            PARM(k,s)={[PM(k) PM(k)-1]};
                    end
                    %SDM=7
                case 7
                    switch A
                        case Wid
                            PARM(k,s)={[PM(k) PM(k)+Wid]};
                        case 2*Wid
                            PARM(k,s)={[PM(k) PM(k)+Wid PM(k)+2*Wid]};
                        case 3*Wid
                            PARM(k,s)={[PM(k) PM(k)+Wid PM(k)+2*Wid PM(k)+3*Wid]};
                        case 4*Wid
                            PARM(k,s)={[PM(k) PM(k)+Wid PM(k)+2*Wid PM(k)+3*Wid PM(k)+4*Wid]};
                        case Wid-1
                            PARM(k,s)={[PM(k) PM(k)+Wid-1]};
                        case Wid+1
                            PARM(k,s)={[PM(k) PM(k)+Wid+1]};
                        case -1
                            PARM(k,s)={[PM(k) PM(k)-1]};
                        case 1
                            PARM(k,s)={[PM(k) PM(k)+1]};
                    end
                    %SDM=2
                case 2
                    switch A
                        case -Wid-1
                            PARM(k,s)={[PM(k) PM(k)-Wid-1]};
                        case -2*Wid-2
                            PARM(k,s)={[PM(k) PM(k)-Wid-1 PM(k)-2*Wid-2]};
                        case -1
                            PARM(k,s)={[PM(k) PM(k)-1]};
                        case -2
                            PARM(k,s)={[PM(k) PM(k)-1 PM(k)-2]};
                        case -Wid
                            PARM(k,s)={[PM(k) PM(k)-Wid]};
                        case -2*Wid
                            PARM(k,s)={[PM(k) PM(k)-Wid PM(k)-2*Wid]};
                        case -Wid-2
                            PARM(k,s)={[PM(k) PM(k)-Wid-1 PM(k)-Wid-2]};
                        case -2*Wid-1
                            PARM(k,s)={[PM(k) PM(k)-Wid-1 PM(k)-2*Wid-1]};
                    end
                    %SDM=6
                case 6
                    switch A
                        case Wid+1
                            PARM(k,s)={[PM(k) PM(k)+Wid+1]};
                        case 2*Wid+2
                            PARM(k,s)={[PM(k) PM(k)+Wid+1 PM(k)+2*Wid+2]};
                        case 1
                            PARM(k,s)={[PM(k) PM(k)+1]};
                        case 2
                            PARM(k,s)={[PM(k) PM(k)+1 PM(k)+2]};
                        case Wid
                            PARM(k,s)={[PM(k) PM(k)+Wid]};
                        case 2*Wid
                            PARM(k,s)={[PM(k) PM(k)+Wid PM(k)+2*Wid]};
                        case Wid+2
                            PARM(k,s)={[PM(k) PM(k)+Wid+1 PM(k)+Wid+2]};
                        case 2*Wid+1
                            PARM(k,s)={[PM(k) PM(k)+Wid+1 PM(k)+2*Wid+1]};
                    end
                    %SDM=4
                case 4
                    switch A
                        case -Wid+1
                            PARM(k,s)={[PM(k) PM(k)-Wid+1]};
                        case -2*Wid+2
                            PARM(k,s)={[PM(k) PM(k)-Wid+1 PM(k)-2*Wid+2]};
                        case 1
                            PARM(k,s)={[PM(k) PM(k)+1]};
                        case 2
                            PARM(k,s)={[PM(k) PM(k)+1 PM(k)+2]};
                        case -Wid
                            PARM(k,s)={[PM(k) PM(k)-Wid]};
                        case -2*Wid
                            PARM(k,s)={[PM(k) PM(k)-Wid PM(k)-2*Wid]};
                        case -Wid+2
                            PARM(k,s)={[PM(k) PM(k)-Wid+1 PM(k)-Wid+2]};
                        case -2*Wid+1
                            PARM(k,s)={[PM(k) PM(k)-Wid+1 PM(k)-2*Wid+1]};
                    end
                    %SDM=8
                case 8
                    switch A
                        case Wid-1
                            PARM(k,s)={[PM(k) PM(k)+Wid-1]};
                        case 2*Wid-2
                            PARM(k,s)={[PM(k) PM(k)+Wid-1 PM(k)+2*Wid-2]};
                        case -1
                            PARM(k,s)={[PM(k) PM(k)-1]};
                        case -2
                            PARM(k,s)={[PM(k) PM(k)-1 PM(k)-2]};
                        case Wid
                            PARM(k,s)={[PM(k) PM(k)+Wid]};
                        case 2*Wid
                            PARM(k,s)={[PM(k) PM(k)+Wid PM(k)+2*Wid]};
                        case Wid-2
                            PARM(k,s)={[PM(k) PM(k)+Wid-1 PM(k)+Wid-2]};
                        case 2*Wid-1
                            PARM(k,s)={[PM(k) PM(k)+Wid-1 PM(k)+2*Wid-1]};
                    end
            end
        end
    end
    %     PARM(k,(length(TRP{k})+1):9)={[]};
end
% PARM((length(TRP)+1):TNUM,9)={[]};
% RM(cellfun(@(x) ~isempty(x)&&ismember(1,isnan(CFI(x)))||~isempty(x)&&x(end)==2*Wid+1&&x(end-1)==3*Wid+2||~isempty(x)&&x(end)==1&&x(end-1)==Wid+2,RM,'UniformOutput',true))={[]};
end
  评论这张
 
阅读(9)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016