pairproject总结和结果
自从1.2后还有几次修改代码的历程
修改的2.0版本:
主要是针对状态机的优化
Idle
遍历当前请求楼层,如果有楼层,则跑过去。
如果该楼层的请求是destination,进入状态drop
如果该楼层的请求是direction和运行方向相同,设置方向,进入状态drop
如果该楼层的请求时direction和运行方向相反,若当前没有乘客在里面,进入状态pick,否则进入
Drop并且将运动方向设为任务方向
Drop 实际指的是顺行状态
根据方向,从当前楼层开始遍历剩余楼层
如果超重,则找到最近的destination楼层跑过去
如果未超重,则找到最近的destination或同方向direction楼层,跑过去
如果找不到需要停靠的楼层,则改变任务方向,同样寻找一次
如果依然找不到需要停靠的楼层,则进入Idle状态
Pick 实际指的是逆行状态
根据任务方向,从方向开始楼层向方将结束楼层遍历所有楼层
找到第一个符合自己任务方向的direction楼层作为自己的TaskFloor
向TaskFloor运动,途中不再停止。(因为进入Pick时没有乘客,确保该状态途中不会遇到
Destination要求)
优化算法的2.1
调度算法依然是简单的和 Hurry Bus 相同的算法,Scheduler 每次寻找能
够最快响应要求楼层的电梯跑向预定楼层,但是修改了估计时间的算法使之
更精确。ElevatorTask 使用的状态机基本和 Auto Bus 相同,具有自主寻
地完成所有任务的能力,对某一些状态转换做了一些优化。
改进:
1.更精细的时间估计方法。Auto Bus x 估计电梯响应时间时计入已知的中
间停靠楼层所额外花费的时间。
2.修改了 Elevator Task 从空闲状态进入接乘时,确定启动方向的方法。
现在 Elevator Task 在同一时间接收到多个 Pick 呼叫时,会自动分析上
下行到开始释放乘客的时间,选择时间短的方向前进。
效率:
相对与 Auto Bus,平均时间改进略有进步,在下班高峰情况时的成绩提升
很多,但是同时在上班高峰情况时成绩有一定的下降。
优化算法2.2
改进:
1.再次改进了状态机从 Idle 状态进入 Pick 状态的检测条件和优先顺序,
使平均时间更短、表现更稳定。
2.上班高峰检测机制,关注记录当前0、1层上楼请求的频率,当其超过阈值时
将开启上班高峰优先模式,并且至少会持续一段时间。当0、1层上楼请求的频
率连续小于阈值一定时间之后将关闭上班优先模式。
上班高峰优先模式提供来自0、1层上楼请求的两种优先策略,半优先模式优先
将0、1层上层请求分配给所有电梯,但是电梯的状态机从空闲状态进入工作时
候并不强制处理它;全优先模式则是强制有限处理。实际的测试中我们发现全
优先模式能够取得更好的综合成绩,因此默认使用全优先模式。
优化2.1和2.2相比于2.0在效率上。
优化3.0和3.1
1.精简了状态机的工作状态,为了最大限度利用所有电梯的剩余空间,不再使用不能在中途上人的 Pick 状态,现在电梯在任何时候都能够响应需要中途停 靠上人的请求。
2.现在一半的电梯在空闲模式下接受多个请求时候会优先选择上行,另一半优 先选择下行。
3.收回请求机制,电梯在完成楼层的 Pick 请求后通知 Scheduler 和其他电梯,其他电梯自动消除该请求。CancelledReq 属性记录了收到其他电梯的完 成通知而移除请求的次数。
4.大量的测试表明宽松的时间估计方法(只关注相距楼层而不计入中途停靠)在统计和个例中都能比较精细的时间估计方法有更好的表现,因此 0.3 版本 的时间估计再次回到 0.20 版本中使用的宽松方法。修改了检测上班高峰的方法,现在上班高峰需要满足请求比例超过阈值和请求 频率超过阈值两个条件。
效果相比于2.0版本提高很多