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

📄 simulationcar.m

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

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

%                     汽车到达时间间隔分布
% --------------------------------------------------
% 到达间隔时间(分)    概  率    累积概率    随即数
%       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,10) ;  %  时刻表
rand('state',0) ;
CAIN = floor ( 100 * rand( N , 1 ) ) + 1 ;  % 汽车到达时间间隔对应的随机数
CAI = CAIN ;                                % 汽车到达时间间隔
ASTN = floor ( 100 * rand( N , 1 ) ) + 1 ;  % A加油站对N辆车的服务时间对应的随机数
AST = ASTN ;                                % A加油站对N辆车的服务时间
% BST = floor ( 100 * rand( 1 , N ) ) ;  % 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) ;

% 将结果存入时间表TT中
TT( :, 1) = (1 : N)' ;  % 顾客编号
TT( :, 2) = CAIN ;   % 到达随机数
TT( :, 3) = CAI ;    % 到达间隔
TT( :, 5) = ASTN ;   % 服务到达随机数
TT( :, 7) = AST ;    % 服务时间
for i = 2 : N
    TT( i, 4) = TT( i - 1, 4) + TT( i, 3) ;  % 到达时钟时间
    TT( i, 6) = TT( i - 1, 6) + TT( i - 1, 7) ;  % 开始服务时间
end
TT( :, 8) = TT( :, 6) + TT( :, 7) ;  % 完成服务时间
TT( :, 9) = TT( :, 6) - TT( :, 4) ;  % 排队时间
TT( :, 9) = TT( :, 9) .* ( TT( :, 9) >=0 ) ;
% 1.检查排队时间  2.检查到达时间  3.以到达时间为最大完成时间,得出排队个数
for i = 2 : N
    if  TT( i, 9) > 0
        index = min( find( ( TT( :, 8) > TT( i, 4) ) == 1 ) ) ;
        TT( i, 10) = i - index ;
    end
end
% 经过加油站并显示结果
disp(sprintf(' '));
disp('---------------------------------------汽车加油站模拟表(仅有一台加油设备)---------------------------------------')
% 合计18个字, 18 * 2 = 36 个字符
disp('顾客编号  到达随机数  到达间隔  到达时钟时间  服务随机数  开始服务时间  服务时间  完成服务时间  排队时间  排队长度')
% 合计57个字, 57 * 2 = 114 个字符
%格式为:
% 顾客编号  到达随机数  到达间隔  到达时钟时间  服务随机数  开始服务时间  服务时间  完成服务时间  排队时间  排队长度
%      1          2         2           5            5            0           5           5           7         4  
%    100        100         4         100          100          100
for i = 1 : N 
    
    str = '' ;
    str = num2str( TT(i,1) ) ;
    str = [ blanks( 6 - length( str ) ), str, blanks(4) ] ;
    if i == 1
        str = [ str, blanks(12), blanks(10), blanks(6), '0', blanks(7), blanks( 6 - length( num2str( TT(i,5) ) ) ), num2str( TT(i,5) ), blanks(6) ] ;
        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), blanks(4), '0', blanks(5), blanks(4), '0', blanks(3) ] ;
    else
        str = [ str, blanks( 7 - length( num2str( TT(i,2) ) ) ), num2str( TT(i,2) ), blanks(5) ] ;
        str = [ str, blanks( 5 - length( num2str( TT(i,3) ) ) ), num2str( TT(i,3) ), blanks(5) ] ;
        str = [ str, blanks( 7 - length( num2str( TT(i,4) ) ) ), num2str( TT(i,4) ), blanks(7) ] ;
        str = [ str, blanks( 6 - length( num2str( TT(i,5) ) ) ), num2str( TT(i,5) ), blanks(6) ] ;
        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) ] ;
        str = [ str, blanks( 5 - length( num2str( TT(i,9) ) ) ), num2str( TT(i,9) ), blanks(5) ] ;
        str = [ str, blanks( 5 - length( num2str( TT(i,10) ) ) ), num2str( TT(i,10) ), blanks(5) ] ;
    end
    disp( str )
    if mod(i,10) == 0
        disp(' ');
    end
%     disp(sprintf('\n'))
end

⌨️ 快捷键说明

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