12.3 电梯调度算法

(进阶项目)

需求:

需求参数:

办公楼一共有4部电梯,每部电梯如果没有请求信号,电梯可以设置停靠在任意楼层。

每部电梯最大可以运送10名乘客。

电梯总共分为20层。电梯停靠某一层无人使用时,电梯门默认关闭。

每个电梯在每一层有上下两个按钮,向电梯发出请求需要上行和下行,1层只有上行按钮,顶楼20层只有下行按钮。

电梯内部有开门,关门,以及20个楼层按钮。

电梯到达某一楼层,电梯门打开/关闭各花费时间0.5秒。

人员进/出电梯,每人各花费时间0.5秒。

电梯运行时,启动加速/减速停止各花费时间0.5秒,上升或下降每一层花费时间1秒。

一个人从1层到达2层的过程为(电梯在1层,关门状态):

1层开门0.5s,进电梯0.5s,1层关门0.5s,启动加速0.5s,上升1层1s,减速0.5s,开门0.5s,人出来0.5s

电梯使用中有若干场景,包括:

随机人数同一时间出现在随机楼层,去往随机楼层。

随机人数随机时间出现在随机楼层,去往随机楼层。

大部人员都在1层,要去随机楼层。

大部人员随机在1层以外,要去1层。

电梯情景文件举例:

每一行为一个用户,用户数不定。格式为:

用户编号,用户出现时间点(从0秒开始),所在楼层,目的楼层

1,0,2,4
2,0,8,5

任务1:

编写程序实现电梯算法中的各类。

包括:建筑,电梯,楼层,人员,并实现各类的方法。

任务2:

编写程序实现模拟电梯运行的模型。

包括:一个人员发出请求(按电梯),电梯运行,运送人员到指定楼层;

计算出人员使用电梯情况,包括等待时间,到达目的时间等。

任务3:

编写程序实现模拟电梯在给定场景中的运行。

能够读取场景文件,获取人员在楼层分布情况,目的地;

将人员加入到各自楼层的等待队列中;

能够模拟出电梯运行情况,包括:运行,开关电梯等;

能够输出从0秒开始的时间线,每个人员上下电梯的动作和时间点;

计算并输出每个人员使用电梯情况,包括:出现时间,等待时间,到达目的时间等;

计算并输出每个电梯运行的情况:包括运送的人员,运行时间,上下楼层的汇总等。

任务4:

调整电梯运行的参数,加入:

电梯空闲时停留在哪一层。

4部电梯是否联动,即取消每个电梯的上下行按钮,由建筑在每一层提供统一的上下行按钮。

可以让某一部电梯负责某一段楼层,或根据运行情况实时调整。

根据以上参数的调整,确定何种参数组合能够实现:全部人员到达目的地所需时间最少。

DEMO: