📄 simulationtwostation.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 + -