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

📄 simulationtwostation.m

📁 汽车到达加油站加油的仿真程序
💻 M
字号:

% 2006-12-14
% 罗凯
% 版权所有

%                     汽车到达时间间隔分布
% --------------------------------------------------
% 到达间隔时间(分)    概  率    累积概率    随即数
%       1                0.25       0.25      01-25
%       2                0.40       0.65      26-65
%       3                0.20       0.85      66-85
%       4                0.15       1.00      86-00

%     A服务时间分布(分钟)                 B服务时间分布(分钟)
% -------------------------------------------------------------------------
% 服务时间  概  率  累积概率  随机数     服务时间   概  率  累积概率  随机数
%     2     0.30    0.30     01-30         3        0.35    0.35     01-35
%     3     0.28    0.58     31-58         4        0.25    0.60     36-60
%     4     0.25    0.83     59-83         5        0.20    0.80     61-80
%     5     0.17    1.00     84-00         6        0.20    1.00     81-00

% 输出结果
% 汽车加油站模拟表(两台加油设备)
% 顾客编号  到达随机数  到达间隔  到达时钟时间  服务随机数  开始服务时间  服务时间  完成服务时间  排队时间  排队长度
% 汽车加油站模拟表(两台加油设备)
% 顾客   到达   到 达  到达时   服务   -----------------A------------------  -----------------B------------------
% 编号  随机数  间 隔  钟时间  随机数  开始服务时间  服务时间  完成服务时间  开始服务时间  服务时间  完成服务时间  排队时间  排队长度  

clear all;
% 变量说明
N = 100 ;  % 有N辆车到达
LQT = 0 ;  % 在t时刻等待服务的汽车数
LAT = 0 ;  % 在t时刻A台忙或闲(1或0)
LBT = 0 ;  % 在t时刻B台忙或闲(1或0)
TT = zeros(N,13) ;  % 时刻表
rand('state',0) ;

CAIN = floor ( 100 * rand( N , 1 ) ) + 1 ;  % 汽车到达时间间隔对应的随机数
CAI = CAIN ;                                % 汽车到达时间间隔
STN = floor ( 100 * rand( N , 1 ) ) + 1 ;  % 加油站对N辆车的服务时间对应的随机数
AST = STN ;                                % A加油站对N辆车的服务时间
BST = STN ;                                % B加油站对N辆车的服务时间

% 转换为对应的时间间隔和服务时间
CAI = Distributing( CAI,  1,  25, 1) ;
CAI = Distributing( CAI, 26,  65, 2) ;
CAI = Distributing( CAI, 66,  85, 3) ;
CAI = Distributing( CAI, 86, 100, 4) ;

AST = Distributing( AST,  1,  30, 2) ;
AST = Distributing( AST, 31,  58, 3) ;
AST = Distributing( AST, 59,  83, 4) ;
AST = Distributing( AST, 84, 100, 5) ;

BST = Distributing( BST,  1,  35, 3) ;
BST = Distributing( BST, 36,  60, 4) ;
BST = Distributing( BST, 61,  80, 5) ;
BST = Distributing( BST, 81, 100, 6) ;

% 将结果存入时间表TT中
TT( :, 1) = (1 : N)' ;  % 顾客编号
TT( :, 2) = CAIN ;   % 到达随机数
TT( :, 3) = CAI ;    % 到达间隔
TT( :, 5) = STN ;   % 服务到达随机数
% TT( :, 7) = AST ;    % 服务时间
for i = 2 : N
    TT( i, 4) = TT( i - 1, 4) + TT( i, 3) ;  % 到达时钟时间
end

% 处理第一辆车
TT(1,7) = AST(1) ;  % A加油站的服务时间
TT(1,8) = AST(1) ;  % A加油站的服务完成时间

for i = 2 : N
    % 得到两台加油站的最近的完成服务时间,比较汽车的到达时钟时间和完成服务时间   
    index_A = max( TT( :, 8 ) ) ;
    index_B = max( TT( :, 11) ) ;
    % 1.若汽车在A加油站空闲时到达,则A加油站提供服务
    % 2.若汽车在A加油站忙时到达,则比较A、B加油站的完成服务时间,完成服务时间早的提供服务
    if  ( TT(i,4) < index_A ) & ( index_A > index_B )
        % B加油站提供服务
        TT(i,9) = TT(i-1,3) + TT(i-1,6) * ( TT(i-1,6) > 0 ) + TT(i-1,9) * ( TT(i-1,9) > 0 ) ;  % 开始服务时间
        TT(i,10) = BST(i) ;  % 服务时间
        TT(i,11) = TT(i,9) + TT(i,10) ;  % 服务完成时间
    else
        % A加油站服务
        TT(i,6) = TT(i-1,3) + TT(i-1,6) * ( TT(i-1,6) > 0 ) + TT(i-1,9) * ( TT(i-1,9) > 0 ) ;  % 开始服务时间
        TT(i,7) = AST(i) ;  % 服务时间
        TT(i,8) = TT(i,6) + TT(i,7) ;  % 服务完成时间
    end
    % 排队时间
    TT(i,12) = min( [ index_A, index_B ] ) - TT(i,4) ;
    TT(i,12) = TT(i,12) * ( TT(i,12) >= 0 ) ;  
end

% % 1.检查排队时间  2.检查到达时间  3.以到达时间为最大完成时间,得出排队个数
% AAT = TT(:,8) + TT(:,11) ;  % 合并两个服务完成时间
% for i = 2 : N
%     if  TT( i, 12) > 0
%         index = min( find( ( AAT > TT( i, 4) ) == 1 ) ) ;
%         TT( i, 13) = i - index ;
%     end
% end

% 经过加油站并显示结果
disp(sprintf(' '));
disp('--------------------------------------------汽车加油站模拟表(两台加油设备)--------------------------------------------')
% 合计16个字, 16 * 2 = 32 个字符
disp('顾客   到达   到达  到达时   服务   -----------------A------------------  -----------------B------------------')
disp('编号  随机数  间隔  钟时间  随机数  开始服务时间  服务时间  完成服务时间  开始服务时间  服务时间  完成服务时间  排队时间')
% 合计54个字, 54 * 2 = 108 个字符
%格式为:
% 顾客   到达   到达  到达时   服务   -----------------A------------------  -----------------B------------------ 
% 编号  随机数  间隔  钟时间  随机数  开始服务时间  服务时间  完成服务时间  开始服务时间  服务时间  完成服务时间  排队时间')
%    1     2      2      0       2          0           5           0             5           5           7           4     
%  100   100      4    100     100        100

for i = 1 : N 
    str = '' ;
    str = num2str( TT(i,1) ) ;
    str = [ blanks( 4 - length( str ) ), str, blanks(2) ] ;
    if i == 1
        str = [ str, blanks(8), blanks(6), blanks(3), '0', blanks(4), blanks( 4 - length( num2str( TT(i,5) ) ) ), num2str( TT(i,5) ), blanks(4) ] ;
        str = [ str, blanks(6), '0', blanks(7), blanks( 5 - length( num2str( TT(i,7) ) ) ), num2str( TT(i,7) ), blanks(5) ] ;
        str = [ str, blanks( 7 - length( num2str( TT(i,8) ) ) ), num2str( TT(i,8) ), blanks(7) ] ;
        str = [ str, blanks(14), blanks(10), blanks(14), blanks( 5 - length( num2str( TT(i,12) ) ) ), num2str( TT(i,12) ), blanks(3) ] ;
    else
        str = [ str, blanks( 4 - length( num2str( TT(i,2) ) ) ), num2str( TT(i,2) ), blanks(4) ] ;
        str = [ str, blanks( 3 - length( num2str( TT(i,3) ) ) ), num2str( TT(i,3) ), blanks(3) ] ;
        str = [ str, blanks( 4 - length( num2str( TT(i,4) ) ) ), num2str( TT(i,4) ), blanks(4) ] ;
        str = [ str, blanks( 4 - length( num2str( TT(i,5) ) ) ), num2str( TT(i,5) ), blanks(4) ] ;
        if TT(i,6) == 0
            str = [ str, blanks(14), blanks(10), blanks(14) ] ;
        else
            str = [ str, blanks( 7 - length( num2str( TT(i,6) ) ) ), num2str( TT(i,6) ), blanks(7) ] ;
            str = [ str, blanks( 5 - length( num2str( TT(i,7) ) ) ), num2str( TT(i,7) ), blanks(5) ] ;
            str = [ str, blanks( 7 - length( num2str( TT(i,8) ) ) ), num2str( TT(i,8) ), blanks(7) ] ;
        end
        if TT(i,9) == 0
            str = [ str, blanks(14), blanks(10), blanks(14) ] ;
        else
            str = [ str, blanks( 7 - length( num2str( TT(i,9) ) ) ), num2str( TT(i,9) ), blanks(7) ] ;
            str = [ str, blanks( 5 - length( num2str( TT(i,10) ) ) ), num2str( TT(i,10) ), blanks(5) ] ;
            str = [ str, blanks( 7 - length( num2str( TT(i,11) ) ) ), num2str( TT(i,11) ), blanks(7) ] ;
        end
        str = [ str, blanks( 5 - length( num2str( TT(i,12) ) ) ), num2str( TT(i,12) ), blanks(3) ] ;
    end
    disp( str )
    if mod(i,10) == 0
        disp(' ');
    end
%     disp(sprintf('\n'))
end

⌨️ 快捷键说明

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