zoukankan      html  css  js  c++  java
  • 多路电梯调度的思想

       这次是一次团队合作的开发项目,以前做的程序都是课本上的,就算是小学期的程序总觉得是那么的理论,但这次软件工程布置的项目,让我开始觉得程序能够运用到实际了,还有就是以前的程序都是一个人在写,有时候一些逻辑上的漏洞很难找出来,两个人一起做,觉得还是好了很多!我和严晓雄一组,在后面会有我们两个人一起合作的具体事项,下面我就说说我们对于这个项目的一些想法!

          项目背景:这是一个关于大楼里面电梯的调度问题,我们经常坐电梯,可对电梯的具体运行有知道多少呢?该大楼共有21层,其中0层为地下车库,共有四部电梯,其各项参数如下表:

    电梯名称 停靠层数 乘客限制 重量限制
    1 所有楼层 10 800kg
    2 所有楼层 10 800kg
    3 所有楼层 20 1600kg
    4 所有楼层 20 2000kg

             运行思想:首先将电梯定义成一个结构体,这个结构体里面包括停靠层数,乘客人数,乘客重量,还有电梯的运行趋势(用0表示停止,1表示向上,-1表示向下),该结构体如下:

    struct Elevator{

      int stopnum[21];     //电梯停靠层数

      int passengernum;   //电梯乘客人数

      float passengerweight;   //乘客总重量

      int trend;    //电梯运行趋势(开始默认为0)

    }E[4];

        这个电梯总的分为三个指令系统,第一个电梯自身的指令系统,第二个是每一层电梯外部的上下按键的指令系统(有一个变量A,用0表示停止,1表示向上,-1表示向下),第三个是电梯里面控制到达楼层与开关门的指令系统!当电梯处于静止状态时,有乘客发出了请求,此时乘客进入电梯,然后选择自己所要去的楼层,此时电梯自身系统将当前楼层与乘客将要到达的楼层做差,如果结果为负数,电梯将向下运行,并将trend赋为-1(如果结果为正数,电梯将向上运行,并将trend赋为1),还有一点要声明,每当有乘客进入电梯时,电梯所在层是不可以被选择的!当电梯开始运行是,此时电梯的运行趋势已经被锁定,此时若有其他层乘客发出请求,通过第二个电梯指令来判断,如果此时第二个指令的值与电梯运行趋势的值相同毕竟电梯还没有达到此楼层,此时电梯将在该楼层停靠,如果不满足的话,电梯将不响应它的选择,当执行完第三个指令系统中的情况之后才考虑它!当电梯的停靠层数的数组中没有数之后,将所有第二个指令系统指令集中起来,依次与当前楼层做差,如果为正数将M置为1,负数将M置为-1,然后将这个值与原先电梯中的trend比较,如果有相同的或者没有相同的中选择离该层最近的楼层,电梯到达该楼层,然后重复前面的操作,如果电梯的三个指令系统都没有指令时,电梯将处于静止,trend默认为0!

          四部电梯,每个电梯的运行过程都是一样的,只是对于乘客的选择有些不同,通过判断各电梯的最大载客数,最大乘客总重量还有最近楼层第二个指令响应来优先选择电梯,当一个电梯响应了乘客的请求之后,这个电梯的请求将在其他的三个电梯中消失,如果达到了电梯的最大载客数和最大乘客总重量时,电梯会发出警报,此时电梯将不再响应第二个指令系统,并且当警报解除之后电梯才会继续运行,当电梯中有人下去之后,才会进行判断来选择是否进行响应!每一个楼层只有一组按钮,通过这一组按钮来控制四部电梯!

           以上是我们初步的思想,还有很多不完善的地方,在后面的编程中,我们还会对我们的思路进行改善的!

    合作时间表:

    3月5号下午2:30-4:30:上网查相关资料,进行学习和整理,初步理解了电梯调度的思想,也有了编写这个程序的大体思路。

    3月7号下午2:30-4:30:进行初次有关电梯设计的讨论,讨论具体程序结构以及程序的算法设计,有了此次程序的大体框架,也明确了目标,使思路更加清晰。

    3月8号上午9:00-11:00:讨论具体设计结构的细节问题,算法实现的循环嵌套问题最为突出,逻辑上有点混乱,经过讨论和重新设计,找出了问题,完善了程序结构

    3月9号下午8:00-10:30:提出所想到的极端情况,发现了设计中存在的许多细节上的漏洞,并结合实际情况进行了电梯面对极端情况时的反应(即电梯应该怎样运动),

                                      并且完成了博客园的记录!

    小组成员:刘三龙     严晓雄

    电梯时间调度表:

     

  • 相关阅读:
    HDU 3572 Task Schedule(拆点+最大流dinic)
    POJ 1236 Network of Schools(Tarjan缩点)
    HDU 3605 Escape(状压+最大流)
    HDU 1166 敌兵布阵(分块)
    Leetcode 223 Rectangle Area
    Leetcode 219 Contains Duplicate II STL
    Leetcode 36 Valid Sudoku
    Leetcode 88 Merge Sorted Array STL
    Leetcode 160 Intersection of Two Linked Lists 单向链表
    Leetcode 111 Minimum Depth of Binary Tree 二叉树
  • 原文地址:https://www.cnblogs.com/liusanlong/p/3590792.html
Copyright © 2011-2022 走看看