结对作业——电梯调度算法的实现与测试之需求分析与算法设计

结队成员:李宝全 & 黄一凡

李保全的博客首页:http://www.cnblogs.com/libaoquan/

cooding链接:https://coding.net/u/2013040101159/p/4elevator/git

4路电梯调度算法展示:http://ele.libq.ren/

结对编程题目:电梯调度

现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示:

电梯编号 可服务楼层 最大乘客数量
最大载重量

1 全部楼层 10
800KG

2 单层  10
800KG

3 双层 20
1600KG

4 全部楼层 20
2000KG

其使用规定如下:

1、楼层号为0~20,其中0号为地下一层;

2、有楼层限制的电梯不在响应楼层停靠,如单双层;

3、所有电梯采用统一按钮控制

请根据上述要求设计并实现一个电梯控制程序,如果有图形显示就更好了。

需求分析

  • 四部电梯采用统一的外部按钮进行控制。
  • 电梯内部按钮按下事件优先级高于外部按钮。
  • 单层电梯仅在单层停靠,不在双层停靠。双层电梯仅在双层停靠,包括0层(地下一层)。
  • 当电梯闲置时,电梯停靠在最后运动到的楼层。
  • 合理调度电梯上下行以及对内外部消息的响应。
  • 用图形界面对程序进行展示。

  我们对于合理的电梯调度行为描述如下:

  • 电梯优先响应内部按钮事件。
  • 对于外部事件,每次只响应与电梯运动方向的外部事件。即电梯上行时,响应电梯所在层之上的外部事件;电梯下行时,响应电梯所在层之下的外部事件。
  • 响应内部事件时,优先响应与电梯运动方向的内部事件。即电梯上行时,响应电梯所在层之上的内部事件;电梯下行时,响应电梯所在层之下的内部事件。
  • 同一个外部事件可以有多个电梯同时响应,也可以是单部电梯进行相应。这是由当前4部电梯具体的运动状态所决定的。

算法设计

  • 每个电梯独立运行,用消息队列InReqList存储电梯的停靠消息。每部电梯的消息队列相互独立。
  • 在电梯内部按钮按下时,将消息放入此电梯的InReqList队列队列。因为内部按钮按下的楼层是电梯必须停靠的楼层,所以每次从InReqList队列中找出最合适的楼层,并停靠。
  • 在电梯外部按钮按下时,进消息放入每部InReqList队列。因为外部按钮按下的楼层不一定是每部电梯都要停靠的楼层,所以要根据此电梯具体的InReqList队列找出适当的时候响应此外部事件。

  先从单部电梯的调度里流程开始讨论,电梯的初始状态为闲置状态,在外部按钮事件的响应下唤醒电梯,电梯开始运动,调度图如下:

在进行多部电梯的调度时,因为每部电梯的内部事件相互独立,所以只需要修改外部事件的响应规则即可。

  • 在外部按钮按下时,遍历4部电梯的本层消息属性,若本层已有内部消息,则放弃写入;否则,在本层写入外部消息。
  • 在电梯停靠时,清除停靠电梯本层的消息,然后遍历其他电梯的消息属性,若其他电梯本层为外部属性,则清除消息;否则,不进行任何处理。

到此,电梯调度问题的核心就是如何在消息队列中寻找最适楼层。这个问题很容易解决:

  由于电梯楼层固定为21层,可以用一维数组InReqList[21]保存一部电梯消息队列。当数组值为InReqList[i]=0时,表示第i层没有停靠消息,电梯不需要再此层停靠;当数组值为InReqList[i]=1时,表示第i层有一个内部按钮按下消息,电梯需要在此层停靠;当数组值为InReqList[i]=2时,表示第i层有一个外部按钮按下消息,电梯需要在此层停靠;

  • 若当前楼层为 now_floor,电梯上行时,从InReqList数组的第now_floor+1项到第20项中,第一个数值不为0的项,其数组下标值即为消息队列中的最适楼层值。
  • 若当前楼层为 now_floor,电梯下行时,从InReqList数组的第0项到第now_floor-1项中,第一个数值不为0的项,其数组下标值即为消息队列中的最适楼层值。
  • 当上行时,本层之上消息队列为空,之下队列不为空,则将电梯运动状态改为下行。下行则反之。
  • 当消息队列全为空时,电梯闲置。
时间: 2024-08-02 15:10:19

结对作业——电梯调度算法的实现与测试之需求分析与算法设计的相关文章

结对作业电梯调度问题

以下为结对作业,我只能做到看懂,真的不太会编..我会努力学的 问题描述: 某大楼共有20层,现安装4个电梯参数如下: 1号电梯 全楼层 最大负载800kg 2号电梯 单数层 最大负载800kg 3号电梯 双数层 最大负载1600kg 4号电梯 全楼层 最大负载2000kg 分析: 4个电梯是相互独立工作的,那么分为4个相互独立的调度模块.1号电梯与4号电梯均服务于全楼层且仅有最大负载不同,而2号和3号电梯 服务模式类似.那么1.4号电梯调度模块可合并为一个.同样地,2.3号模块也可以合并.电梯调

结对作业--电梯调度

结对编程 结对成员:王长(2011040101179)CODING:https://coding.net/u/smile-wang  高庆阳(2013040101173) 博客:http://www.cnblogs.com/gaoqingyang1994/   CODING:https://coding.net/u/gaoqingyang1994 结对编程的优缺点 在结对编程模式下,一对程序员可以平等的.互补地进行开发工作:他们一起分析,一起设计,一起写测试用例,一起编码,一起做测试...这样在

结对编程--电梯调度算法

1.需求分析: 实现电梯调度算法,预先输入乘坐电梯人数.每个人的起始楼层和到达楼层以及当前电梯所在楼层,电梯会根据算法依次将所有人员接入电梯并送至其重点楼层. 2.代码截图 3.约定的规范 使用Tab制表符 每行不超过100 {}另起一行 规范示例: 4.记录时间 命题讨论:1h 思路分析:1h 代码编写:24h 程序测试:2h 博客记录:1h 5.心得体会 结对编程可以通过自己的parterner来发现自己之前的不足,矫正错误 通过电梯调度算法,复习了数据结构和C语言的指针,结构体等

结对作业—电梯调度

现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示: 电梯编号 可服务楼层 最大乘客数量 最大载重量 1 全部楼层 10 800 kg 2 单层 10 800 kg 3 双层 20 1600 kg 4 全部楼层 20 2000 kg 其使用规定如下: 1.楼层号为0~20,其中0号为地下一层: 2.有楼层限制的电梯不在响应楼层停靠,如单双层: 3.所有电梯采用统一按钮控制 上面是结对编程题目要求,我的小伙伴是白新宇:http://home.cnblogs.com/u/bai

结对作业--项目之需求分析

一.前言: 1.结对者:3019何颖仪.3018 吴淑瑶 2.需求分析模型:NABCD 模型 3.原型设计工具:墨刀 二.结对过程: 三.需求分析: 项目背景: 随着科技的进步和计算机技术的飞速发展,各个领域的发展也有一定的提升,而教育在生活中占极高的地位.我们从小就开始接受教育,但大家都能感受到中国目前的教育方式有较大的弊端,学习任务非常繁重,老师授课知识课堂上很难理解,课堂时间有限,即使有疑惑也不能立刻解决,课后可以问老师,但总有些不尽人意,比如假期时候就比较麻烦,如果请家庭教师又需要一笔昂

结对项目:电梯调度算法的实现和测试——报告

一.编程人员 徐方宇.陈少杰 二.工作照片 三.结对编程优缺点 优点: 1. 程序员互相帮助,互相教对方,可以得到能力上的互补. 2. 可以让编程环境有效地贯彻Design. 3. 增强代码和产品质量,并有效的减少BUG. 4. 降低学习成本.一边编程,一边共享知识和经验,有效地在实践中进行学习. 5. 在编程中,相互讨论,可能更快更有效地解决问题. 缺点: 对于有不同习惯的编程人员,可以在起工作会产生麻烦,甚至矛盾. 两个人在一起工作可能会出现工作精力不能集中的情况.程序员可能会交谈一些与工作

结对项目:电梯调度算法的实现与测试

结对编程人员:12061174 李靖 12061167 林旭鹏 文件位于TFS上的Pairproject11中 算法核心:两个关键---1.history direction变量 2电梯里面有没有人. 电梯初始的方向默认为向上,在每个tick时间点 电梯如果在底层,history direction为上,如果在顶层则为下. 电梯内没有人的时候,先遍历请求,如果有方向一致并且可以去到的楼层请求,则Reqstopat最近的. 若当前History dirction方向上,没有方向一致的楼层请求,则检

结对编程作业——电梯调度

作业要求: 现有一新建办公大厦,共有21层,共有四部电梯,所有电梯基本参数如下表所示: 电梯编号 可服务楼层 最大乘客数量 最大载重量 1 全部楼层 10 800 kg 2 单层 10 800 kg 3 双层 20 1600 kg 4 全部楼层 20 2000 kg 其使用规定如下: 1.楼层号为0~20,其中0号为地下一层: 2.有楼层限制的电梯不在响应楼层停靠,如单双层: 3.所有电梯采用统一按钮控制 请根据上述要求设计并实现一个电梯控制程序,如果有图形显示就更好了. 需求分析: 1.共有4

结对编程之电梯调度算法

   电梯调度结对编程                             1.题目:设计一个电梯调度算法,实现基本的电梯调度功能,要求有四部电梯,每部电梯21层,并且具有重量检验算法. 2.设计前的准备:确定了结对之后,我们首先对设计中可能遇到的问题进行了大体的分析与讨论,确定了编程的方向(java语言)并且约定了一些编程规范,语法规范为使用eclipse中的format规范代码,其他可能遇到的编程问题会在开发中随时交流.接着我们对题目进行了更深入的分析,考虑到电梯运行时的各种情况并发表自