比方说:某栋写字楼6层,有2部电梯,每层楼都有上行和下行两个按键;
响应请求电梯可以是:闲置电梯、距客人最近的电梯
要求:在运送所有客人到达目标楼层的前提下电梯的总行程尽可能小。
有那位知道这在电梯的运行响应规则,或有相关的资料。

解决方案 »

  1.   

    随便说一下吧。实际上每一个人写出来的都是不一样的,这也可以看出不同人的设计风格的不同:
    就一个电梯来说,它假设具有“启用、停用”状态,并且有“上行、下行、速度、开门、关门”等状态,它也许每隔2秒钟要重新计算一次自己的行为,只有在这个时候才改变自己的规划。而不是随便外界的什么按钮按下了就改变它。注意,电梯是定时地计算自己的行为,而不是实时改变自己的行为。搞清楚这个就可以简化控制逻辑。比如说电梯如果是在闲置,那么它检测有哪一个楼层按下了按钮,判断另外一个电梯是不是会比自己预先到达。如果预先到达那么自己就什么都不做;如果不是,就会做出一个简单的规划(将一连串几个子任务压入堆栈),例如判断是否正确地关门,判断出是否上行(或者下行),设置好目标楼成,发出加速指令(从0开始加速)。比如说电梯正在正常形势中,那么它检测在自己的运动方向内并且距离自己最近的楼层按下了按钮,它判断是否需要进入减速程序。如果是到了可以减速的距离,就计算出减速的参数,然后发出减速指令。比如过电梯正在减速运行并且速度接近0时,要判断是否正好到达准确位置。如果没有到达准确位置,还要重新低速改变上下行,进行调整。如果已经到达准确位置,那么就开门吧。..........
    还需要写出大概十种规则,才是一个比较完整的规则框架。
      

  2.   

    将一连串几个子任务压入堆栈  -->  将一连串几个子任务压入队列
    最容易乱人心智的,就是纠结于每楼层那两个按钮。如果你认为它一旦按下,电梯就必须立刻改变自己的行为规划,那么你可能就会写出一个特别诡异的程序。它按下就按下吧,不用管它,电梯仍然按照自己的行为规则运行,只不过是每隔2秒钟才检测一下外界环境的变化而废弃原来的规划并立即重建规划。这样就具有智能了。
      

  3.   

    看了下标题,以为是操作系统里面的电梯调度。。