【结对开发】电梯调度 二(初版,含算法)

信1101-2班

胡弦琴20113026

王兵茹20112917

  经过几天的探索,我们做出了一个初步带界面的电梯模型,实现电梯的协同工作,详细设计说明如下:

(1)电梯的配置:

         1. 110层每层有上下两个按钮,1层只有上行按钮,10层只有下行按钮。每层都有相应的指示灯,灯亮表示该按钮已经被按下,如果该层的上行或者下行请求已经被响                  应,则指示灯灭。

        2. 电梯内共有10个目标按钮,表示有乘客要在该层下电梯。有指示灯指示按钮是否被按下。乘客按按钮导致按钮指示灯亮,如果电梯已经在该层停靠则该按钮指示灯灭。

  (2) 电梯的运行控制:

        1.电梯的初始状态是电梯位于第一层处,所有按钮都没有按下。

        2.乘客可以在任意时刻按任何一个目标钮和呼叫钮。呼叫和目标对应的楼层可能不是电梯当前运行方向可达的楼层。

        3. 如果电梯正在向I层驶来,并且位于I层与相邻层(向上运行时是I-1层或者向下运行时是I+1层)之间,则因为安全考虑不响应此时出现的I层目标或者请求。如果电梯正好经过了I楼层,运行在I楼层和下一楼层之间,则为了直接响应此时出现的I层目标或者请求,必须至少到达运行方向上的下一楼层然后才能掉头到达I楼层(假设掉头无须其它额外时间),如果I楼层不是刚刚经过的楼层则可以在任意位置掉头,此时掉头后经过的第一个楼层不可停。

       4. 电梯系统依照某种预先定义好的策略对随机出现的呼叫和目标进行分析和响应。

       5. 电梯停靠某一层后,苦无目标和呼叫,则电梯处于无方向状态,方向指示灯全灭,否则电梯内某个方向的指示灯亮,表示电梯将向该方向运行。

       6. 当一个目标(呼叫)已经被服务后,应将对应的指示灯熄灭。  

(3)算法框架及设计:

    ①  通过对用户请求种类的分析可以发现, 对电梯而言,内部请求与处于电梯/ 前方0的同向外部请求没有区别,据此,可以设置3个堆栈来存储这4类请求。

        1)存储内部请求和处于电梯/ 前方0的同向外部请求的堆栈, 命名为SCP;

        2)存储反向外部请求的堆栈,命名为SCS;

        3)存储处于电梯/ 后方0的同向外部请求的堆栈, 命名为SA。

    ②具体实现

          1) 用户请求的存储策略。如上所述, 不同的用户请求将存储在与之对应的堆栈中。同时, 堆栈中元素的顺序受到电梯方向的影响, 当电梯向上时, SCP和SCS栈中元素由栈顶

             至底升序排列, SA栈中元素由栈顶至底降序排列; 反之, 当电梯向下时, SCP和SCS栈中元素由栈顶至底降序排列, SA栈中元素由栈顶至底升序排列。

          2) 电梯对用户请求的响应机制。电梯从当前楼层出发, 不断读取SCP栈顶元素作为目的楼层, 到达目的楼层后,停靠, 再把该楼层作为当前楼层, 如此循环, 直到电梯转向; 当

              电梯转向时, 相应地,3个堆栈将发生相互转化, SA转化为SCP, SCP转化为SCS,SCS转化为SA; 此后,电梯再次开始循环读取SCP栈顶元素。

(4)功能核心:

         1) 用户请求的发出与存储。以按钮控件作为请求发出装置, 按下按钮, 发出请求信息( 内部请求为目的楼层;外部请求为所处楼层) 并存入相应的堆栈

     

 

 

(5)运行结果截图:

    

(6)总结:

   完整的电梯模拟算法还涉及到电梯运行时所处楼层的动态显示、停靠时的减速、对负载的限制等细节问题, 这些问题现在并没有解决。

    

原文地址:https://www.cnblogs.com/XianqinHu/p/3606281.html