多路电梯调度算法(一)

       我们的电梯调度算法比较简陋笨拙,再此献丑了,希望大家看看就好哈,不要太当真。。 

         我们将电梯分为三种状态,第一种状态,正在向下行使中,第二种状态,正在向上行驶中,第三种状态,处于停止中。由于第一种状态与第二种状态类似,故此,我们下面只讨论第一种和第三种状态是对电梯的调度。

         对于第一种状态即电梯正在向下行使,分为有人与没人两种情况。

         当第一种状态的电梯里有人时,那么电梯向着最近的target floor驶去,如果此时中途有人(current floor target floor之间)有向下的请求且电梯可以到达,那么改变电梯的target floor,使电梯在有人处停止。

        当第一种状态的电梯里(即正处于向下行使)没人时,假设此时的电梯所在的层数为i,那么搜索 i-10层间是否有向下的请求,如果有那么将最近的一个请求所在楼层设为target,如果没有,那么在搜索0i-1层间是否向上的请求,如果有将最远的一个请求所在的楼层设为target

       第二种情况与第一种类似,再此不做多述。

       对于第三种情况的电梯即处于开门状态或者处于关门但是没有明确目标的电梯。同样分为有人与没人两种状态,若有人,那么找到这些人想去的最近的目标这位target,若没人将target设为整个楼层中请求最早的地方。

       我们的算法就这么简单,当处理多台电梯怎么分配任务时我们是这么处理的,比如,13号电梯都正向上走它们处于7层以下,若此时79层有向上的请求,那么我们将第7层的请求分给离7层最近的电梯,比如为1,那么就会将9层的响应分给3。在分配时我们采取最近的判断标准,谁离得近就将任务分配给谁。。。

       关于我们的算法,有许多缺点,比如,没有仔细考虑乘客的类型(比如早上从01层上楼的比较多),这是我的失误,还一个没有考虑重量(比如如果电梯载重接近极限就可以不响应别的请求了)的问题,这是我的懒惰(由于test framework中没有获取当前电梯的当前重量,我又比较懒没有试图通过别的方法获取这个信息。。。),再此表示十分歉意。。。

      总的测试下来,我们的效果不是很好,希望别的同学能取得好的成果!谢谢您的阅读。。。

MicroTeam Liuhang

CodingCrazy Binxing

原文地址:https://www.cnblogs.com/MicroTeam/p/1903472.html