电梯调度问题模型分析及程序设计(一)

电梯调度问题模型分析及程序设计(一)

一.电梯调度问题分析

  • 问题描述

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


电梯编号


可服务楼层


最大乘客数量


最大载重量


1


全部楼层


10


800 kg


2


单层


10


800 kg


3


双层


20


1600 kg


4


全部楼层


20


2000 kg

其使用规定如下:

  1. 楼层号为0~20,其中0号为地下一层;
  2. 有楼层限制的电梯不在响应楼层停靠,如单双层;
  3. 所有电梯采用统一按钮控制。
  • 需求分析
  1. 需要设计四部电梯,而且需要注意四部电梯所需要具备的功能;
  2. 考虑电梯单双层调度,有楼层限制的电梯不在响应楼层停靠(即单层电梯只能在奇数楼层之间调度,双层电梯只在偶数楼层之间调度);
  3. 外部电梯按钮响应事件,所有楼层采用统一按钮;且0层只设有“Up”按钮,20层只设有“Down”按钮;其余楼层设置两个按钮;
  4. 每一部电梯具有不同的属性,比如乘客数量和电梯承重,对于乘客的体重属性我们才有随机数产生每一名乘客体重,最后通过人数计算总重量;
  5. 电梯调度应该依照一定的优先级进行操作;比如我们规定奇数层乘客到奇数楼层,这里我们优先考虑单层电梯;
  6. 当电梯中无人乘坐时,我们将电梯停至电梯最后一次运行所到达的楼层。

二.电梯调度功能实现

  • 电梯功能设计
  1. 当电梯外部乘客点击乘坐电梯按钮事件时,我们对乘客当前楼层以及点击操作进行判断;
  2. 当乘客进入电梯内部之后,乘客选择自己所要到达的楼层,并且我们需要判断是否电梯中乘客数量超限以及电梯是否超载?如果电梯超载我们将调用另一部合适的电梯将剩余的乘客送往相应楼层;
  3. 并且我们判断对于同一方向运行的电梯是否乘客需要到达的楼层之间有交叉重复区域,这样我们可以将乘客依次送往需要到达楼层;
  4. 对于不同方向的乘客我们优先判断是否有空电梯,如果没有空电梯,则等待;
  5. 对于电梯的设置我们采用结构体数组方式来存放四部电梯,在结构体中设置相应电梯属性。
  • 电梯功能流程模拟
  1. 外部功能实现

  • 电梯外部应该具有按键功能,判断是否有乘客乘坐电梯,并且应有乘客数量属性;这里我们以流程图的方式向大家展示外部功能的实现:

/*显示电梯当前状态函数*/
void printstatus(struct Lift lift[])
{
    for(int i=0;i<4;i++)
    {
        cout<<i+1<<"号电梯当前所在楼层:";
        cout<<lift[i].status<<endl;
    }
    cout<<endl;
}

/*初始化电梯运行方向*/
void StartDir(struct Lift lift[])
{
    for(int i=0;i<4;i++)
    {
        lift[i].dir=1;
    }
}

/*判断电梯所处楼层,确定按键设置*/
void Keyset(int i)
{
    if(i==0)
    {
        cout<<"选择操作 (1.Up  0.无人):";
    }
    else if(i==20)
    {
        cout<<"选择操作 (2.Down  0.无人):";
    }
    else if(i>0&&i<20)
    {
        cout<<"选择操作(1.Up  2.Down  0.无人):";
    }
}

2.内部功能实现

  • 电梯内部我们采用在结构体数组中定义二维数组lift[i].floor[r][2]用来存放是否某一楼层有乘客乘坐电梯,并且记录乘客人数。并且判断乘客呼叫电梯操作的先后顺序,对于不同方向的乘客我们采用调用空电梯的策略来实现,如果没有空电梯则等待。

通过这样的实现方式我们模拟出电梯的运行方式,这两部分是整个电梯调度问题的核心。而这与我们平时乘坐电梯时的调度方式时有很大差距的,据笔者了解到需要实现一部电梯的实际调度,我们需要引入Java中线程的相关概念。但通过上述的这种调方式也能实现四电梯的运转。

三.电梯调度测试

  • 本次我们采用C/C++语言来实现整个程序的功能,我们对于电梯的调度情况进行一个简单的测试;首先是乘客选择电梯以及乘客需要到达的楼层进行性测试,我们假设同一楼层的所有人到达相同的楼层,在这部分测试中我们只输入一组乘客信息,而且我们将调度电梯的当前层数显示在屏幕上:
  • 第二部分对电梯的单双层进行调度,我们假设三种情况:1.单层用户到达单号楼层,这时候我们需要调用单层电梯(2号电梯);2.双层用户到达偶数楼层,这时候我们需要调用双层电梯(3号电梯);3.单层用户到达双层,或者双层用户到达单层,这时候我们需要调用通用电梯(1号电梯、4号电梯):
  • 第三部分是电梯混合调度,比如在5楼的乘客去15楼,而与此同时有楼的乘客到达 17楼,我们大概实现这样的混合调度,个人觉得在整个调度过程中在应该还有考虑不全面的地方,但基本实现功能,在这里需要考虑的情况实际比较复杂,我们将其简化:

四.总结

这部分我们主要为大家讲述了我们团队对于电梯调度问题的一个基本思想,并对于问题模型的建立过程以及最终功能的实现向大家做了一个基础的展示;总的来说,我们团队完成了这次合作任务,虽然只是两个人的一个小小的合作,但通过这样的形式让我们学习到了对方在解决问题上的不同想法以及对于解决问题时我们提出的不同思路,这有利于我们更好的解决问题。如果我们一个人思考,很有可能自己对于问题的考虑在某一方面存在欠缺,而通过合作的方式,我们可以将问题出错情况降到最低,这样对于我们以后思考问题的方式也有很大的借鉴意义。在这部分主要为大家介绍了关于设计方面的思路。我们将在接下来的篇章中为大家介绍在这次开发过程每个人所承担的责任以及扮演的角色。

时间: 2024-10-05 01:03:30

电梯调度问题模型分析及程序设计(一)的相关文章

石家庄铁道大学基础教学楼电梯调度问题

石家庄铁道大学基础教学楼电梯调度问题: 分析问题: 首先这是一个生活中的实际问题,要解决问题第一步要做好调研,实地考察. 第二步分析问题,根据实际调研情况初步拟定解决方案. 第三步根据拟定方案实地进行假想测试,判断方法可行度. 第一步(调研): 基础教学楼一共有四部电梯,总共有十八个楼层,电梯只供应8—18楼使用. 从一楼直接到十八楼需要45到50秒之间,无操作时电梯门打开7—8秒. 电梯实际荷载量为15人,相对来说八到十层的人较多,十到十四层人数一般,十四层到十八层人数较少.

电梯调度问题之成长总结篇(二)

电梯调度问题之成长总结篇(二) 结对成员:阮磊 口平音 coding系统地址:https://coding.net/user?key=2e63bb37-ddda-401d-8763-5c9ce6b1e8e7: 阮磊cnblogs主页地址:http://www.cnblogs.com/ruanlei/: 一.我们在工作 队友简介 在上一篇文章的最后部分我们谈到了合作的重要性以及必要性,并且提到了队友的相关信息,在本篇文章中我们将为大家带来团队队员介绍等相关内容:在这部分内容我将为大家介绍我的合作伙

MyCat线程模型分析

参考MyCat权威指南,对MyCat-Server里面的线程模型做简要分析: 1. 线程模型图 根据MyCat权威指南,做出以下线程模型图: MyCat的线程模型主要分为三部分(: 网络通讯线程.业务线程和定时任务线程,下面分别介绍这些线程的使用: [温馨提示] 这里排除JVM自身使用的线程,只关注MyCat服务所使用的线程,如果需要详细了解MyCat里面使用的所有线程,请参考<MyCat权威指南>-> 开发篇 -> MyCat线程模型分析 2. 网络通讯线程 MyCat-Serv

javascript内存模型分析猜想

/* * 这里我是利用分析java内存模型的方法来猜想javascript的内存模型, * 由于没有看到国内有关于分析javascript的书籍,但是可以借鉴java的 * 内存模型结构来帮助理解javascript的内存模型中的原型机制,下面先 * 给出一个简单的原型例子 * */ "use strict"; function PrototypeModel(name,author,time){ } PrototypeModel.prototype.name = "Proto

(&#160;转)性能测试--地铁模型分析

地铁模型分析 和绝大部分人一样,小白每天都要乘坐地铁上下班,那么就拿地铁来分析,再次深刻理解下性能.早上乘坐地铁上班,最典型的就是北京地铁1.5.10.13号线等,人多得简直没法形容!为了方便理解分析,先做如下假设. 某地铁站进站只有3个刷卡机. 人少的情况下,每位乘客很快就可以刷卡进站,假设进站需要1s. 乘客耐心有限,如果等待超过30min,就会暴躁.唠叨,甚至选择放弃. 按照上述的假设,最初会出现如下的场景. 场景一:只有1名乘客进站时,这名乘客可以在1s的时间内完成进站,且只利用了一台刷

数据挖掘应用案例:RFM模型分析与客户细分(转)

正好刚帮某电信行业完成一个数据挖掘工作,其中的RFM模型还是有一定代表性,就再把数据挖掘RFM模型的建模思路细节与大家分享一下吧!手机充值业务是一项主要电信业务形式,客户的充值行为记录正好满足RFM模型的交易数据要求. 根据美国数据库营销研究所Arthur Hughes的研究,客户数据库中有三个神奇的要素,这三个要素构成了数据分析最好的指标:最近一次消费(Recency).消费频率(Frequency).消费金额(Monetary). 我早期两篇博文已详述了RFM思想和IBM Modeler操作

Netty源码学习——ChannelPipeline模型分析

参考Netty API io.netty.channel.ChannelPipeline A list of ChannelHandlers which handles or intercepts inbound events and outbount operations of aChannel.ChannelPipeline implements an advanced form of theIntercepting Filter pattern to give a user full co

Reminder 之 NABCD模型分析

    Reminder 之 NABCD模型分析         定位 多平台的闹钟提醒软件. 在安卓市场发布软件,发布后一周的用户量为1000.         N (Need 需求) 这个想法源于我和组员的最初需求,在我的日常生活中,经常会发现很多社团会议难以加入日历项,大多数会议也只是口头通知,不知不觉就忘记了.所以,我需要一个闹钟提醒软件. 杀手优势:      我们的产品亮点就在于,不是由用户本身提醒用户,而是由活动发起的用户来提醒所有用户.每一位用户有一个唯一的用户ID,在每一次活动

【数学建模】创意平板折叠桌的模型分析与优化设计

? ? 创意平板折叠桌的模型分析与优化设计 魏淙铭 陈星曼 田桃 ? 摘要: 本题要求设计创意折叠桌,问题一给定了具体的长方形平板尺寸.桌高等设计参数求折叠桌的动态变化过程和桌脚边缘线的数学描述,问题二中任意给定桌高和桌面直径求折叠桌的最优设计参数,问题三则要求根据客户提供的桌面边缘线和桌脚边缘线的大致形状给出一款能够确定最优设计参数的软件的数学模型. 本题中,我们以折叠桌桌面中心为圆心,建立空间坐标系求解数学模型. 对于问题一,我们通过使用切片法降低维数来确定桌腿长度.开槽的长度等设计参数,并