OO-Unit2-HW6
OO第二单元第二次作业 [toc] 0.题目新增需求 乘客不再固定电梯接送,设计电梯调度策略 增加RECEIVE输出,避免自由竞争策略 增加RESET请求,时长1.2s,在RESET期间电梯处于静默状态(不可以开关门、移动、RECEIVE等),重置电梯 1.处理流程分析 1.1 电梯调度策略 在本次作业中,需要设计将乘客分配给合适的电梯的调度器(补第五次作业偷的懒),我的设计中选择将调度器作为一个线程实现,输入线程与调度器线程交互,调度器线程与六个电梯线程交互。对于单个电梯运行的策略我保留了第五次作业的LOOK算法,对于多部电梯的分配策略,我选择了性价比较高的调参方法,性价比体现在代码量较少的同时能够拿到比较好的性能分数。UML时序图如下 1.1.1 UML时序图 1.1.2 调参算法 所谓调参算法其实就是选取几个有关电梯的指标,给这些指标赋予合适的参数,为每部电梯计算出得分,选择得分最高的电梯进行分配。我选取的指标有电梯接到该乘客需要走的距离,电梯中人数,电梯等待队列中人数,电梯容量,电梯速度。 距离:这里距离的计算是不准确的,没有找出电梯运行的上确界或下确界,即没有找出电梯运行到哪里就可以转向,而是同一按照1/11处理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 private int getDistance(int fromFloor,int toFloor,int curFloor,boolean direction) { int distance = 0; int flow = (direction) ? 1 : -1; if ((toFloor - fromFloor) * flow > 0) { // 乘客移动方向与电梯当前移动方向相同 if ((fromFloor - curFloor) * flow >= 0) { // 电梯沿当前方向能接到乘客 distance = abs(fromFloor - curFloor); } else { if (flow == 1) { distance = 20 - curFloor + fromFloor; } else { distance = 20 + curFloor - fromFloor; } } } else { if (flow == 1) { distance = 22 - curFloor - fromFloor; } else { distance = curFloor + fromFloor - 2; } } return distance; } 电梯状态:电梯状态这个参数实际上是电梯容量、电梯中人数、电梯等待队列中人数三个量经过调参得来的,可以适当增加电梯等待队列中人数的权重,避免给一部性能好的电梯分配太多乘客,这样的性能可能还不如大家都运行 ...