⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 行优先.txt

📁 Matlab的行优先算法
💻 TXT
字号:
%to get the m and n which make s smaller 
n0=96;
k=20;
l=20;
for m=1:96
    if mod(96,m)==0
        for n=1:96/m
            s=(n*m/n0+k/n)*(m+l/m);
            if s<15.3
                mm=m;
                nn=n
            end
        end
    end
end


function gz=gzxunyou(m,n)
%this function is used to get any possible queue jz1 based on m and n 
mint=inf;
jz0=[];
for i=1:n
    if mod(n,i)==0
        for j=1:n/i
           if mod(n/i,j)==0             
            k1=1;           
            for kq=1:fix(n/i/j)
            for ii=1:i
                for jj=ii*n/i-(kq-1)*j:-1:ii*n/i+1-kq*j
                   for ll=1:3
                       jz1(ll,jj)=k1;
                    k1=k1+2;
                end
            end
            end
            end         
            k2=2;          
            for kq=1:fix(n/i/j)
            for ii=1:i
                for jj=ii*n/i-(kq-1)*j:-1:ii*n/i+1-kq*j
                   for ll=6:-1:4
                       jz1(ll,jj)=k2;
                    k2=k2+2;
                end
            end
            end
            end
            t=jisuant(jz1,m,n);       
            if mint>t 
                mint=t;
                i0=i;
                j0=j;
                jz0=jz1;
            end                     
             k1=1;
            
            for kq=1:fix(n/i/j)
            for ii=1:i
                for jj=ii*n/i-(kq-1)*j:-1:ii*n/i-kq*j+1
               for ll=[2,1,3]
                   jz1(ll,jj)=k1;
                    k1=k1+2;
                end
            end
            end
            end        
            k2=2;
           
            for kq=1:fix(n/i/j)
            for ii=1:i
                for jj=ii*n/i-(kq-1)*j:-1:ii*n/i+1-kq*j
                 for ll=[5,6,4]
                     jz1(ll,jj)=k2;
                    k2=k2+2;
                end
            end
            end
            end
            t=jisuant(jz1,m,n);            
            if mint>t 
                mint=t;
                i0=i;
                j0=j;
                jz0=jz1;
            end                   
             k1=1;            
            for kq=1:fix(n/i/j)
            for ii=1:i
                for jj=ii*n/i-(kq-1)*j:-1:ii*n/i-kq*j+1
                  for ll=[3,2,1]
                      jz1(ll,jj)=k1;
                    k1=k1+2;
                end
            end
            end
            end  
            k2=2;           
            for kq=1:fix(n/i/j)
            for ii=1:i
                for jj=ii*n/i-(kq-1)*j:-1:ii*n/i+1-kq*j
                   for ll=[4,5,6]
                       jz1(ll,jj)=k2;
                    k2=k2+2;
                end
            end
            end
            end
            t=jisuant(jz1,m,n);   
            if mint>t 
                mint=t;
                i0=i;
                j0=j;
                jz0=jz1;
            end           
             k1=1;          
            for kq=1:fix(n/i/j)
            for ii=1:i
                for jj=ii*n/i-(kq-1)*j:-1:ii*n/i-kq*j+1
                   for ll=3:-1:1
                       jz1(ll,jj)=k1;
                    k1=k1+2;
                end
            end
            end
            end
            k2=2;           
            for kq=1:fix(n/i/j)
            for ii=1:i
                for jj=ii*n/i-(kq-1)*j:-1:ii*n/i+1-kq*j
                 for ll=4:6
                     jz1(ll,jj)=k2;
                    k2=k2+2;
                end
            end
            end
            end
            t=jisuant(jz1,m,n);   
            if mint>t 
                mint=t;
                i0=i;
                j0=j;
                jz0=jz1;
            end                      
           end
        end
    end
end


function y=main(jz1,n,m)
l0=15;                    %the distance outside of the plane 
vb=0.6;                   %one person's speed where there isn't any interference
zuojiange=1.57;           %the room that one seat takes up 
buchangt=0.1;             %a loop 
fangxingli=10/buchangt;   %the time locateing luggage cost
rangzuo=20;               %the time changing seats cost
canshua=1.2;              %a in behavior model
canshub=0.6;              %b in behavior model
canshuc=0.6;    
%initialization
for i=1:n
    for j=1:m   
     pz(jz1(i,j))=l0+jz1(i,j)*canshuc;
     if jz1(i,j)==1
         i0=i;
         j0=j;
     end
     ddz(i,j)=-1;
     ddz0(i,j)=0;
     tg(i,j)=0;
     zz(i,j)=0;
    end
end
for i=1:m*n
    vz(i)=0;
end
azz=0;
t=0;
%start
while azz~=m*n
%calculate the speed of every passenger 
if (zz(i0,j0)==1 || ddz(i0,j0)>=0)
    vz(1)=-1;
else
    vz(1)=vb;
end
for i=2:m*n
    if vz(i)>=0
        k=0;
       for j=i-1:-1:1
            if pz(j)~=inf
                doub=pz(i)-pz(j);
                k=1;
                break;
            end
       end
         if doub<=canshub
            vz(i)=0;
         end
         if doub>=canshua
            vz(i)=vb;
         end
         if doub>canshub && doub<canshua  
            vz(i)=vb*sin(3.14/2*(doub-canshub)/(canshua-canshub));
         end
         if k==0
            vz(i)=vb;
         end
    end
end
%check whether the passenger arrived the zone and start locating luggage 
for i=1:n
    for j=1:m       
       if pz(jz1(i,j))<j*zuojiange && ddz(i,j)<=-1
             df=0;
           for iii=1:n*m
            if pz(iii)~=inf && pz(jz1(i,j))-pz(iii)<1.57 && iii~=jz1(i,j)
                df=1;
                break;
            end
           end
           if df==1
           ddz(i,j)=fangxingli*2;
           else
           ddz(i,j)=fangxingli;
           end
           if i==2
               ddz(i,j)=fangxingli+rangzuo*zz(3,j);
           end
           if i==5
               ddz(i,j)=fangxingli+rangzuo*zz(4,j);
           end
            if i==1
               ddz(i,j)=fangxingli+rangzuo*(zz(2,j)+zz(3,j));
            end
            if i==6
               ddz(i,j)=fangxingli+rangzuo*(zz(4,j)+zz(5,j));
            end
           ddz0(i,j)=(ddz(i,j)-fangxingli)/2;
           vz(jz1(i,j))=-1;
       end
    end
end
%caculate every passenger's position
for i=1:m*n
    if vz(i)>0
        pz(i)=pz(i)-vz(i)*buchangt;
    end
end
%caculate the rate of locating luggage progress
for i=1:n
    for j=1:m     
     if ddz(i,j)>0 
         ddz(i,j)=ddz(i,j)-1;
     end
     if ddz(i,j)==0
         zz(i,j)=1;
         tg(i,j)=t+buchangt;
         ddz(i,j)=-1;
         pz(jz1(i,j))=inf;
     end
    end
end
%check if everyone be seated
azz=0;
for i=1:n
    for j=1:m
    azz=zz(i,j)+azz;
    end
end
t=t+buchangt;
end
tg=tg-ddz0*buchangt;
tg;
y=t;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -