t?r???h?r??t1?t2??a?t1?t2?2vm??vm .
针对之前给出的大楼的参数,代入上面的表达式,我们可以求得电梯运行距离和运行时间的关系:
t?r??ama?h?rvm?vmam?1.42?2.6r2?21.4?2.12857?1.3r
由上式可以看出,电梯从启动到停止的运行时间t(r)与所运行的楼层数r存在这一种线性关系,并且含有常数项2.12857.该常数项说明,在电梯上行过程中每次停靠时,由于电梯加速和减速而额外花费的时间大约是2.12857秒钟。
2.3 电梯系统的模拟算法
以下是A First Course in Mathematical Modeling . Third Edition 171页电梯模拟系统改进后的算法:
输入 beti和floori。这里beti和floori都是随机的整数,基于前面的分析,我
们给出求beti和floori的matlab程序,如下:
x=fix(30*rand(22)) y=fix(2+17*rand(22))
beti=reshape(x,1,484) floori=reshape(y,1,484)
输出 DELTIME,ELEVTIME,MAXDEL,MAXELEV,QUELEN,QUETIME,MAXQUE,stopj,
以及每部电梯使用时间的百分比。
1) 开始时将以下参数置为零:DELTIME,ELEVTIME,MAXDEL,MAXELEV,
QUELEN,QUETIME,MAXQUE,quetotal,remain
i?1 deliveryi?15
2) 对于第一位乘客,生成到达时间间隔、目的楼层,并初始化运送时间: 3) 初始化时钟及电梯的可乘用时间、停止次数、运送时间。初始化所有乘
客的等待时间。
TIME?beti
对于k?1到4: returnk?TIME, stopk?operatek?0
16
对于k?1到484: waitk?0
若TIME?5100,执行5到32步。
4) 选择第一部可乘用电梯:
若TIME?return1,则j?1,否则 若TIME?return2,则j?2,否则
若TIME?return3,则j?3,否则
若TIME?return4,则j?4,
否则(当前无电梯可乘用)转第19步。
5) 置入第一位占用已标记电梯的乘客的编号,初始化电梯占用及楼层选择
向量:
firstj?i, Oj?0
6) 对于k=1到19: Sj?k??Fj?k??0
7) 置入楼层选择向量,电梯j承运乘客,并增加占用电梯的乘客数:
Sj?floori??1
Fj?floori??Fj?floori??1
Oj?Oj?1
8) 产生下一位乘客并调整时钟:
i?i?1
TIME?TIME?beti
deliveryi?15
9) 将全部可乘用电梯设定为当前时钟: 对于k=1到4:
若TIME?returnk,则returnk?TIME 否则returnk不变。
10) 若beti?15且Oj?13,则对每位在标记电梯j上的乘客增加运送时间: 对于k?firstj到i?1:
deliveryk=deliveryk+beti
并将第7步承运电梯上的当前乘客,且产生下一位乘客。 否则(标记电梯已经离开): 置limit=i?1且转第11步。
第11步至18步实现标记电梯j上全部乘客的运送: 11) 对于k?firstj到limit,执行第12到16步。 12) 计算乘客k呆在电梯里的时间:
N?floork?1 (一个指标)
17
elevatork=楼层间的运送时间+前面电梯停靠的额外时间(约两秒)+前面
乘客的转移时间+当前乘客的转移时间+前面楼层的开/关门时间+当前楼层的开门时间
?2N?2?Sj?m??3?FJ?m??3?5?Sj?m??5
m?1m?1m?1NNN
13) 计算乘客k的运送时间:
deliveryk=deliveryk+elevatork
14) 对总运送时间求和以得到平均运送时间:
DELTIME=DELTIME+deliveryk
15) 若deliveryk﹥MAXDEL,则MAXDEL=deliveryk
否则MAXDEL不变。 否则MAXELEV不变。
16) 若elevatork﹥MAXELEV,则MAXELEV=elevatork,
17) 计算电梯j的总停止次数、在运行中的时间及返回1楼大厅的时间:
stopj?stopj??Sj?m?
m?119
Max=Sj中最大一个非零分量的指标(即要去的最高楼层) eldelj=运送时间+乘客转移时间+开/关们时间
?2?Max?1??3?Fj?m??5?Sj?m?m?1m?11919
returnj?TIME?eldelj operatej?operatej?eldelj
18) 转第5步。
第19步至32步用于当前无电梯可乘用且已经形成等待排队的情形: 19) 初始化排队:
quecust?i (队中第一位乘客的编号)
startque?TIME (排队开始的时间) queue?1
arrivei?TIME
20) 产生下一位乘客并调整时钟:
i?i?1
18
生成beti和floori
TIME?TIME?beti
arrivei?TIME
queue?queue?1
21) 检验电梯的可乘用:
若TIME?return1,则j?1且转第22步,否则 若TIME?return2,则j?2且转第22步,否则
若TIME?return3,则j?3且转第22步,否则
若TIME?return4,则j?4且转第22步,
否则(仍无电梯可乘用)转第20步。
22) 电梯j可乘用。初始化楼层选择向量并确定排队长度: 对于k?1到19:
Sj?k??Fj?k??0
remain?queue?13
23) 若remain?0,则R?i且Oj?queue。
否则 R?quecust?12且Oj?13。
24) 电梯j承运乘客:
对于k?quecust到R:
Sj?Fk??1且Fj?Fk??Fj?Fk??1
25) 若queue?QUELEN,则QUELEN?queue
否则QUELEN不变。
26) 调整排队乘客总数:
quetotal?quetotal?Oj
QUETIME?QUETIME? 27) 若
m?quecust??TIME?arrive?
mR?TIME?startque??MAXQUE,则MAXQUE?TIME?startque
否则MAXQUE不变。
28) 以占用标记电梯上第一位乘客的编号设置标号:
firstj?quecust
29) 计算标记电梯上每一位乘客的运送和等待时间: 对于k?firstj到R:
deliveryk?15??TIME?arrivek?
waitk?TIME?arrivek
19
30) 若remain?0,则令queue?0且转第8步产生下一位乘客
否则令limit=R且对于k?firstj到limit执行第12到17步。结束后
转第31步。
31) 调整排队乘客总数检验电梯的可乘用: queue?remain quecust?R?1 startque=arriveR?1 32) 转第20步。
第33步至36步计算早高峰电梯模拟的输出值: 33) 输出以下数值:
N?i?queue,所服务的乘客总数 DELTIME?DELTIMEN,平均运送时间 MAXDEL,一位乘客的最长运送时间 34) 输出一位乘客呆在电梯里的平均时间和最长时间:
ELEVTIME??
35) 输出在最长的队中等待的乘客数,等待的乘客呆在队中的平均
时间和最长时间:
QUELEN QUETIME?MAXQUE
limit?m?和 MAXELEV elevatorlimitm?1QUETIME
quetotal36) 输出每一部电梯停止的总次数和每部电梯运行时间的百分比:
operatek 对于k=1到4:显示stopk和5100
停止
注:按照A First Course in Mathematical Modeling书中电梯模拟系统的算法15次独立模拟的结果,得到了一张代表3周的早高峰时间表,见附录表1。
20