电梯控制算法(7)多电梯场景——两个等价电梯——动态指派

电梯控制算法 https://blog.csdn.net/nameofcsdn/article/details/106874615

两个电梯是等价的,都是全部楼层可达的。

当有乘客在外面按电梯时,哪个电梯去响应呢?

动态指派:一直实时计算哪个电梯更快就派哪个

注意,这里的保持实时计算,并不是两个电梯都响应,而是每个时刻都只有一个电梯响应某一楼层的请求,但是具体是派哪个电梯,这个可能会随着时间的推移一直变化。

比如场景一:

2个电梯都停靠在1楼,此时5楼外部输入下行,0号电梯响应,1号电梯不动,

0号电梯刚出发,此时15楼外部输入下行,那么这时应该如何指派呢?

这种场景其实有很多种策略,比较省电梯的方案是0号电梯先去15楼,然后下行经过5楼的时候开门接客,然后继续下行。

这种方案最大的缺点就是乘客等待时间长。更好的方案是2个电梯一起行动,一个去接15楼的乘客,一个去接5楼的乘客。

再比如场景二:

假设场景一中,0号电梯去接15楼的乘客,1号电梯去接5楼的乘客,两个电梯都刚出发不久,6楼有乘客外部输入上行按钮,此时又该如何响应?

如果要细分的话,动态指派可以有很多种具体策略。

我想了很久也没有想到很好的策略,生活中所见到的电梯也许都是我前面提到的静态指派算法,或者它的改良算法。

有没有实际电梯用上动态指派,我有点不确定,但是可以确定的是,要想很人性化,一定非常复杂。

我在写多电梯场景——两个等价电梯的静态指派和动态指派的时候,一直很纠结很艰难,因为这里面涉及一个很复杂的场景。

比如2个电梯一个停靠在1楼,一个停靠在30楼,此时1楼乘客外部输入上行,1楼电梯响应之后,刚上升到2楼,1楼又有人外部输入上行,此时该如何响应?
我想,肯定不只我一个人想过,如果此时电梯先下来接我再一起上去多好!
尤其是单电梯场景,如果里面只有1个乘客,他要上30楼,我要上29楼,那我就要等很久很久,如果先下来接我再一起上去,就没有浪费多少时间。
这个想法当然不可行,因为电梯没法精准判断里面还有多少人,就算只有一个乘客也永远不知道他要去哪层楼,毕竟每个乘客都有在每一层楼都停留一下看看梯外风景的权利。就算每个乘客都是高素质的,如果碰到上行高峰,电梯每次刚上行到二楼就有一楼乘客外部输入上行请求,那可能就会造成饥饿等待。

言归正传,电梯是开弓就没有回头路,那么此时应该派哪个电梯呢?其实答案已经很明显了,因为乘客数量和乘客目的地的不确定,所以此场景下如何指派电梯是个很麻烦的问题。

PS:如果乘客较多,目的楼层是非常高层且害羞的乘客可能会先等一部分乘客出电梯之后再移动到按钮旁输入自己的目的楼层,这也是造成乘客目的地的不确定的原因之一。

猜你喜欢

转载自blog.csdn.net/nameofcsdn/article/details/113787882