数学建模培训2010年暑假B题.doc_第1页
数学建模培训2010年暑假B题.doc_第2页
数学建模培训2010年暑假B题.doc_第3页
数学建模培训2010年暑假B题.doc_第4页
数学建模培训2010年暑假B题.doc_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

电梯的优化调度姓名 学院年级专业学号联系电话相关学科成绩高等数学线性代数概率统计数学模型数学实验英语四级英语六级杨阳电气工程学院08级电气工程与自动化2008450415826251962817566良488谢思软件工程学院08级软件工程2008206413527497293979295优486张林电气工程学院08级电气工程与自动化2008452113983923471948282良432目录一 问题的重述3二 模型的基本假设和参数的假定3三 符号说明4四 问题分析44.1有关电梯速度:44.2停靠次数与最高可达楼层的期望值54.2.1停靠次数期望值的计算54.2.2最高可达楼层期望值的计算54.2.3 往返一次的运行周期的计算 6五 模型的建立与求解65.1问题一65.1.1每个人到达他的工作楼层所需的时间 75.1.2早上任意时刻在中央大厅内等候的最大人数 75.1.3 单个雇员从大厅入口处到他所在的楼层所花的时间952问题二 几个改进早上电梯运输拥挤问题的方案105.2.1设雇员在早上不同时刻到达105.2.2 指定部分人员步行到一些楼层 115.2.3 电梯分3组在不同高低楼层运行125.2.4电梯分2组按奇偶层运行 135.3 问题三 模型的进一步改进145.4 计算机仿真流程图 15六 模型的优缺点分析 176.1模型的优点 176.2模型的缺点 17七 模型的推广、改进 177.1模型的推广 177.2模型的改进 17八 参考文献 17九 程序 17 电梯的优化调度【摘要】:1. 本题针对电梯拥挤问题,应用概率统计方法计算出更贴近实际的电梯运行参数,例如:电梯实际停靠次数的期望,电梯可达最高楼层数的期望2. 问题一要求在给定条条件下定量的描述出电梯的拥挤状况:(1) 每个人到达他的工作楼层所需的时间层数12345678910时间(秒)82643.9961.8179.1495.65111.2125.7139.2151.8层数11121314151617181920时间(秒)385673.9991.81109.1125.7141.2155.7169.2181.8(2) 早晨任意时刻在中央大厅内等候的最大人数:740人(3) 对单个雇员求出他从大厅入口处到他所在的楼层所花的时间 = 候梯时间 +乘梯时间3. 问题二主要是电梯的优化调度问题,要求给出几种改进方案。(1)雇员在早上不同时刻到达,可以节省雇员等待时间(2)指定部分人员步行到一些楼层,用动态规划解决合理分层问题,得到结果:电梯应改为三部在4-12层服务,三部在13-20层服务。运完雇员所需时间:42.7645 分。(3)由动态规划模型解出电梯分3组在不同高低楼层运行最合理的方案, 1-8层,8-14层,15-20层。运完雇员所需时间:33.375分(4)电梯分两组按奇偶层运行时,运完雇员所需时间:44.193分综合分析:分组明确会节省整体时间。4. 使六部电梯分别直达3、6、9、12、15、18层,除了第20层雇员要步行两层楼外,其他楼层雇员都最多步行一层楼。它运完它所承担的雇员的时间为27.6分钟。5. 模型特点:贴近实际的假设,与计算机模拟结果相比较提高了结果的正确率 。6. 本文全部数据均通过建模计算和计算机模拟结果的比较,正确率相对较高。【关键字】:数学期望 概率 动态规划 计算机模拟我想给你说的是 能够标号的式子都标号 以后要用到的式子不要说上式 要用式(多少多少)来表示的哈 还有图 表 绝对不要出现下图下表之类的词汇 一定要标号 有些结果太复杂的没有必要全部写出的哈 就全部用表格的形式给给出这样的话有利于表现的嘛!记住 我有些没有搞懂你是怎么怎么算出来的 我就不太能够改了 你拿去改一下的嘛 还有附录程序那里改成程序9.1 9.2这种形式的哈 我今天就改了这么多了 你看一下的哈 嘿嘿 你应该感谢我的哈 我到网吧去下载的呢 三块钱一个小时的呢 好贵的哦 不过 出去下了几首歌还好哈哈一 问题的重述电梯问题:拥有1200雇员的大公司要搬家到新建筑楼去。该建筑有21层楼:底层和120层,并且底层有一个中央大厅拥有6部电梯。所有的雇员工作在1楼以及较高层楼,且都使用电梯到达他们工作的楼层。此时,电梯拥挤成为了一个不容忽视的问题。一些管理人员想到了必须从根本上解决这样一个问题,而维持秩序不是办法。(基本参数假定详见模型假设部分)问题1:1) 计算每个人到达他的工作楼层所需多少时间?2) 计算任意时刻(早上期间)在中央大厅内等候的最大人数;3) 对单个雇员求出他从大厅入口处到他所在的楼层所花多长时间?问题2:还有一些其他模型可以改进早上的电梯运输问题。例如,可以设想一半的电梯只在偶数层楼停顿,另一半电梯只在奇数层楼停顿。试考虑至少三个改进早上电梯运输拥挤问题的方案,并比较所有的方案的优劣,例如:A.设雇员在早上不同时刻到达;B.指定部分人员步行到一些楼层;C.电梯分几组在不同高低楼层运行。问题3:在你建立的模型中,能否考虑再加一些因素,比如1)雇员们不想步行太多,模型不必太复杂,但他们都希望尽可能快地到达他们所工作的楼层。2)该栋楼的部长们都集中在15层楼,对他们应优先考虑。二 模型的基本假设和参数的假定模型整体假设:电梯运输时尽可能的满载。先到的人先坐电梯,不存在插队现象。电梯的速度:1)从任意一层楼的静止状态到达相邻(上或下)楼层的静止状态所用时间为8秒。2)从任意一层楼的静止状态经过相邻楼层所花费的时间为5秒。3)通过两层楼之间的时间总量为3秒,从经过一层楼到相邻楼层的静止状态所花费的时间为6秒。4)电梯在一层楼停留时间为10秒。每分钟的开始80个人已经来到电梯外排队。每层楼有60个人工作(不包含F1楼)。每个电梯的容纳人数20,忽略电梯第一次和最后一次运输的不满载,计算电梯运输周期时假设电梯每次运输都是满载的;对于计算机模拟程序的附加假设:如果有电梯可供使用,则不必等待电梯坐满了才启动。三 符号说明变量含 义单位电梯到达的楼层数目层第j层下电梯的雇员数位电梯满载乘客数位电梯运行一周期停靠的次数次电梯从第i层到第j层所需的时间秒电梯往返一次的运输时间秒0到j层的所需的平均时间秒完成乘载任务的总时间秒t时刻1-10层的雇员在大厅等候电梯的人数位t时刻11-20层的雇员在大厅等候电梯的人数位t时刻到达电梯的人在大厅的等待时间t时刻到达大厅的第j层的雇员到他所在的楼层的时间【注】::往返一次运输时间:是指单台电梯沿建筑物楼层上下运行,以电梯在门厅开门时起直到往返一次再回到门厅重新开门时止所需的精确到秒的时间。:还有一些具体的符号到文章用到的时候再具体说明四 问题分析4.1有关电梯速度:由已知,1)从任意一层楼的静止状态到达相邻(上或下)楼层的静止状态所用时间为8秒;2)从任意一层楼的静止状态经过相邻楼层所花费的时间为5秒;3)通过两层楼之间的时间总量为3秒;4)从经过一层楼到相邻楼层的静止状态所花费的时间为6秒;5)电梯在一层楼最少停留时间10秒。图1 电梯各时间的分析示意图由图1可以分析出任意楼层i直达j的时间为:; (1)设当i层到j层之间有(s-1)次停,那么:(2) 则,同样是从i层到j层,多停的(s-1)次使花费的时间多了 (3) 即从i层到j层之间的(s-1)次停下使原本直达的电梯多花了15(s-1)秒的时间。4.2停靠次数与最高可达楼层的期望值:4.2.1停靠次数期望值的计算:设N为电梯可到达的楼层个数的最大值,第j层下电梯的雇员数为,电梯载客数C,某雇员在第j层下的概率为,则在第j层有人下的概率为:, (4)停靠次数的期望为: (5)4.2.2最高可达楼层期望值的计算:设一部电梯可达最高楼层H,k为可到达的楼层值,k为可到达楼层的个数,即实际到达k层楼就返回F1层的概率为: (6)现证明如下:显然,全部人员在k层以下(包括k层)出电梯的概率 全部人员在k+1层以下(包括k+1层)出电梯的概率同理, 全部人员在 k 层以下(包括 k 层) 出电梯的概率故,最高层层数的期望值为: (7)4.2.3 往返一次的运行周期的计算:1)往返一周期(只在最高层停一次),电梯的运行时间为: (8)2)门厅到最高层之间停(s-1)次,电梯的运行一周期总时间为: (9)3)将电梯开始在门厅停下进人的10秒计入电梯运行的一周期时间内,则电梯往返一次的运行周期为: (10)五 模型的建立与求解5.1问题一 相关参数的假定:所有雇员进入大楼时间是8:45-9:00am;有一个稳定的人流:假定进入中央大厅的人数:4人/每层楼每分钟;三部电梯仅运输1-10层;其它三部电梯只运输11-20层;在8:45-10:00am,电梯仅运输人,而不运输其它物资;5.1.1计算每个人到达他的工作楼层所需的时间(即在电梯内的时间):(1)模型的建立:由可知,F1层直达j层的时间为:考虑从F1层到j层间有(s-1)次停下,所以:这时,其中表示从F1层到j层间的平均停靠次数又:当j=1时,=1,当时,有,当时,有。(2)模型的求解:根据的公式计算出了不同的人到达他的工作楼层所需的时间见表1:表1:不同人到达他的工作楼层所需时间(计算)层数12345678910时间(秒)82643.9961.8179.1495.65111.2125.7139.2151.8层数11121314151617181920时间(秒)385673.9991.81109.1125.7141.2155.7169.2181.8(3)计算机模拟结果:(程序是哪个?)表2:不同人到达他的工作楼层所需时间(模拟)层数12345678910时间(秒)824.6741.5458.0774.9791.75108.3124.9141.7158.4层数11121314151617181920时间(秒)3854.6771.4388.23105.0121.9139.0155.6172.5189.2对比表1和表2,我们发现不同的人到达他的工作楼层所需的时间计算和模拟的结果很接近。5.1.2早上任意时刻在中央大厅内等候的最大人数的计算:(1)模型的建立:设为t时刻时达1-10层的电梯门前的队长,为t时刻时达11-20层的电梯门前的队长;当t=0时,时间为:8:45 a.m. 表示这个数值向下取整;由已知代入分析得到的式子可以计算出:; 目标函数:s.t.(2)模型的求解:(程序见6.第一问计算等待人数程序)计算可得:8.7849.86619.87 205.96 秒265.96 秒为使结果更精确,中间结果接受期望带小数部分。当t= 13 s 时 340 人 400 人 740人 为大厅内的最大人数5.1.3 单个雇员从大厅入口处到他所在的楼层所花的时间:(1)模型的建立:为了方便计算单个雇员在大厅排队等候电梯的时间,我们假设每半分钟来2人/每层楼每分钟。记t时刻进入大厅的人的等梯时间为x(t),记。 则由上一问可知,则对于1-10层的人来说1)若,即,有2)若,即,有i)若,即,有,则对于11-20层的人来说:1)若,即,有2)若,即,有i)若,即,有又由5.1.1得到个各层的电梯运行平均时间,记 t时刻到达大厅的第j层的雇员到他所在的楼层的时间为,则(2)模型的求解:(程序见8.第一问计算等待时间程序)画图程序在:9. 等待时间散点图程序图2 各层楼的人的等待时间散点图注:横坐标表示时间(单位:s),纵坐标表示等待时间(单位:min)(拜托你们这是写论文你们干嘛的啊都不把横纵坐标标在图上 晕你们! 自己添上记住)解释一下这个每一次中的现象,我不是很懂你们的模型,你看怎么解释根据5.1.1结果可得到雇员到达他的工作楼层所需的时间(在电梯内的时间),由前面的模型的建立可得到雇员在大厅排队等候电梯的时间(等电梯的时间)。因此,从大厅入口到他所在的楼层花的时间 = 等待时间 + 在电梯内的时间下面列举部分雇员从大厅入口到他所在的楼层花的时间:例如:8:47来的要到6层工作的雇员,从大厅入口到他所在楼层花的时间=4.865(分)+95.65(秒)=6.459(分) 8:53来的要到17层工作的雇员,从大厅入口到他所在楼层,花的时间=12.596(分)+141.2(秒)=14.949(分)这点最好是用表格的形式将时间展现出来,是根据那个式子出来的也标上号写出来的哈,不然根本就不清晰,这样我都没有看懂你是哪里加上哪里的 52问题二 几个改进早上电梯运输拥挤问题的方案5.2.1设雇员在早上不同时刻到达对于此方案的说明:当选用问题一中的电梯调度方案时,大厅中人等待电梯的最大值为:740人。对于一部分人来讲,与其让他们早早的来到大厅排队,不如安排晚一点再来。这样不会改变那些雇员到达自己所在工作楼层的时刻,还可以大大减少那些雇员的等待时间。优点:节省部分雇员等待电梯的时间;缺点:造成一部分人早上班,一部分人晚上班,从人性角度考虑会有部分员工觉得不公平。5.2.2 指定部分人员步行到一些楼层(1)模型的建立:4-20层分两组的动态规划由第一问计算结果可知: ,又,总共有三部这样的电梯,所以人均最少等待电梯时间为: 假设人上一层楼需要25秒,那么。得到结论:人从门厅上三楼的时间约为等待电梯的最小时间,即让1到3楼的雇员走楼梯还是比较合理的。从第一问结果可以看出1-10层的电梯运完全部雇员的时间要比11-20层的电梯运完全部雇员的时间少10分钟,若还让电梯以10层为分界来分组运行显然是不合理的。这时候,我们需要求出尽可能让两组电梯完成任务的时间差最小的分界层数。现将4-20层分为2个区,每个区由3部电梯服务。分区情况如下:第1个区域的两部电梯服务于0层,4层层;第2个区域的两部电梯服务于0层,层20层;目标函数:s.t. 其中, , , , , ,(2)模型的求解:(程序见3.动态规划2组程序) 7542.7512得出结论在12层分组较好比题目中原来的方案要节省时间。所以,运完雇员所用时间为:42.7645 分。5.2.3 电梯分3组在不同高低楼层运行(1)模型的建立:动态规划模型20层楼分为3个区域,每个区域有两台电梯服务。分区情况如下:第1个区域的两部电梯服务于0层,1层、层;第2个区域的两部电梯服务于0层,层、层;第3个区域的两部电梯服务于0层,层、20层。目标函数:s.t. 其中, , , , ,(2)模型的求解:(程序见2.动态规划3组程序)31460,得出结论由8、14层为分界分成三个区域较好222.5(秒)=3.708(分),运完雇员所需时间=图3 电梯分成三区域示意图同样,按类似方法很容易求得20层电梯分成两部分运行的最佳方案是1-11层,12-20层,且256.59(秒),据此,我们推测,分组越多电梯整体运行越节省时间。这可以从宏观上说明:电梯分组越多,到某一固定楼层的人越可能搭乘一部电梯,使得电梯停靠次数越少,故整体运行时间越少。5.2.4电梯分2组按奇偶层运行(1)模型的建立:假设三部电梯只在奇数层停,另外三部只在偶数层停。 电梯只在奇数层停靠的停靠次数的期望与只在偶数层停靠的停靠次数的期望相同,即:;电梯只在奇数层停靠:;电梯只在偶数层停靠:;有,,则奇数层的人全部到达所工作楼层的时间为:偶数层的人全部到达所工作楼层的时间为:将乘客全部运到所在工作层的时间为:(2)模型的求解:(程序见5.奇偶层程序)2651.6(秒)=44.193(分)此方案对电梯调度问题没有太大的优化,不可取。5.3 问题三模型的进一步改进使六部电梯分别直达3、6、9、12、15、18层(直达3层电梯负责运输2、3、4层雇员;直达6层电梯负责运输5、6、7层雇员,以此类推)如图4所示:图4 六部电梯到达各自安排层数的示意图 由图4可以看出除了第20层雇员要步行2层楼外,其他楼层雇员都最多步行1层楼。电梯运行一周期的时间一般要比人步行一层楼的时间长,所以在楼道里不会发生拥挤现象,不影响人们的步行状况。 现在来分别计算这六部电梯的运行周期:由:()可分别计算出TC3,TC6,TC9,TC12,TC15,TC18,表3 六部电梯的运行周期TC3TC6TC9TC12TC15TC18时间(秒)486684102120138(秒)这部电梯耗时最久,它运完它所承担的雇员的时间为:这个时候前面几部电梯会空闲下来。为了不使电梯调度过于麻烦,我们暂不考虑调空闲电梯来继续工作。我们看到,这种电梯调度方案是非常节省时间的,而且在照顾到了15楼的领导(有直达15楼的电梯)的同时不会让普通雇员觉得太多的不公平。为什么不考虑雇员到达各自楼层的行走的时间的呢?毕竟还是要花时间要到自己的楼层的撒5.4 计算机仿真流程图(见图5)图5 计算机仿真流程图六 模型的优缺点分析6.1 模型的优点:在本模型中我们多采用动态规划的方式来对电梯的运行方案进行优化,同时又用排队论计算最大等待人数及各个时刻来的认得等待时间。另一方面又辅之以计算机模拟与数学模型求得的理论值相比较,结果大致相同,让模型的准确度更高。在对电梯运行方案的选取过程中,为避免等待时间过长。我们采用了重新动态分区、奇偶层分配电梯、让一部分人步行上楼等多种方案,使得结论更充实、更具有可信度。6.2 模型的缺点:本模型没有充分考虑现实因素,人流不可能是均匀分布。其次,考虑的情况也不是非常全面。七 模型的推广、改进7.1模型的推广可将本模型适当的改进,得出最优运行方案的一般求法,将其用于各种电梯运行及排队过程,比如说公交车的等待,排队购买商品等。7.2模型的改进在第三个问的模型中,直到3,6,9层的电梯运行周期短,很快将人运到所在楼层,而12,15,18层还未运完。可考虑在3,6,9运完后将电梯依次调给18,16,12层。这样整体到等待的时间将会更短。也可再考虑能耗等问题,增加目标函数对其进行重新优化八 参考文献1 包泉鳌,电梯问题的数学模型,成都教育学院学报,第18卷第3期:40-41页 66页,2004年。2 姜启源 谢金星 叶俊,数学模型,北京:高等教育出版社,2004年;3 刘琼荪 龚劬 何中市 付鹂 任善强,数学实验,北京:高等教育出版社,2004年;九 附录1.电梯模拟程序EleController.h#ifndef ELE_CONTROLLER_H#define ELE_CONTROLLER_H#include #include #include elevator.h#include person.husing namespace std;const int flow_rate = 4; / 4人每分钟每层楼const int floor_num = 20; / 总共的层数const int elevator_count = 6; / 电梯的数目const int count_on_floor = 60; / 每层楼有名员工const int sum_process_time = 15 * 60;class EleControllerprivate:/ 动作人员相关数据int m_nMax_wait_time; / 最大的等待时间vector m_wait_time; / 每个人的等待时间vector m_on_elevator_time; / 每个人在电梯里面的时间vector m_on_foot_time; / 每个人步行的时间vector m_wait_queue; / 等待进电梯的排队vector m_persons_floor; / 与m_on_elevator_time相对应,记录人员的楼层。/ 电梯相关数据vector m_elevator; / 供使用的电梯vector vector m_elevator_persons; / 每个电梯坐的人vector vector m_elevator_floor; / 每部电梯可到达的楼层/ 这个性质可以放在elevator类的,但是有点编译问题没有解决,现在暂时这样做vector m_person_count; / 每个运送期运送的总人数vector m_time; / 每个运送期总时间/ 时钟相关数据int m_clock; / 时钟int m_arrive_matfloor_numflow_rate;public:EleController();/ 初始化函数void Initialize();/ 处理是否又有新来的人等电梯,是否有电梯可以再次被使用void Process();/ 保存相关数据void Save();private:/ 处理函数的辅助函数/ 随即函数,-59的平均分布int Rand_Sec();/ 生成一分钟内的到达数据,每分钟调用一次void gernarate();/ 处理新来的人的问题,把新来的人放到等待队列中去void process_person();/ 处理电梯问题,如果可用,人将进入电梯void process_elevator();/ 拿到进入电梯员工的到达信息进行计算void ComputeData(vector Vec, int &sum_time);#endif / ELE_CONTROLLER_Helevator.h#ifndef ELEVATOR_H#define ELEVATOR_Hconst int single_time = 8; / 8 secondsconst int start_time = 5; / 5 secondsconst int process_time = 3; / 3 secondsconst int stop_time = 6; / 6 secondsconst int stay_time = 10; / 10 secondsconst int max_load = 20; / 20 personenum Elevator_State es_process, es_stop, es_fail ;class Elevatorprivate:int m_nFloor;Elevator_State m_sts;int m_load_left; / 剩余可载人数int m_begin_time; / 开始工作时间int m_process_time; / 总共运行一次的工作时间public:Elevator();void Initialize();/ inspectorsinline int get_floor() return m_nFloor; inline Elevator_State get_sts() return m_sts; inline int get_process_time() return m_process_time; inline int get_begin_time() return m_begin_time; inline int get_end_time() return m_begin_time + m_process_time; inline int get_load_left() return m_load_left; inline bool IsAvailable() return m_load_left 0; / mutatorsvoid set_process_time(int time) m_process_time = time; void set_sts(Elevator_State sts) m_sts = sts; void set_floor(int floor) m_nFloor = floor; void set_begin_time(int time) m_begin_time = time; void decre_load_left() m_load_left-; void clear() m_load_left = max_load; ;/ 计算i层楼到j层楼的时间int cost_time(int i, int j);#endif /ELEVATOR_Hperson.h#ifndef PERSON_H#define PERSON_Hconst int On_Foot_Time = 25; / 25 secondsenum Person_State ps_wait, ps_on_elevator, ps_on_foot ;class Personprivate:int m_arrive_time;int m_wait_time;int m_target_floor;Person_State m_sts;public:Person();/ inspectorsint get_arrive_time() return m_arrive_time; int get_wait_time() return m_wait_time; int get_target_floor() return m_target_floor; Person_State get_sts() return m_sts; / mutatorsvoid set_arrive_time(int arr_time) m_arrive_time = arr_time; void set_wait_time(int wait_time) m_wait_time = wait_time; void set_target_floor(int tag_floor) m_target_floor = tag_floor; void set_sts(Person_State ps) m_sts = ps; ;#endif / PERSON_HVector_function.h#include using namespace std;/ 最大值int MaxVal(vector Vec);/ 平均值double AverageVal(vector Vec);/bool IsInVec(int integer, vector vec);/ 排序算法void Sort(vector &R);EleController.cpp#include EleController.h#include #include vector_function.h#include #include #include using namespace std;EleController:EleController(): m_elevator_persons(elevator_count), m_elevator_floor(elevator_count, vector(max_load), m_elevator(elevator_count)Initialize();void EleController:Save()int i,j;ofstream fout(result.txt, ios:app);m_nMax_wait_time = MaxVal(m_wait_time);fout m_nMax_wait_time t;double average_wait_time = AverageVal(m_wait_time);fout average_wait_time t;double average_on_foot_time = AverageVal(m_on_foot_time);fout average_on_foot_time t;double average_on_elevator_time = AverageVal(m_on_elevator_time);fout average_on_elevator_time t;/ 计算每一层员工的坐电梯时间vector average_on_elevator_time_floor(floor_num+1);for ( i = 1 ; i = floor_num; i+)vector average_on_elevator_time_on_somefloor;for ( j = 0; j m_on_elevator_time.size(); j+)/ 是否为第i层的数据,如果是,则加入average_on_elevator_time_on_somefloorif (i = m_persons_floorj)average_on_elevator_time_on_somefloor.push_back(m_on_elevator_timej);/ 每层楼有名员工assert(average_on_elevator_time_on_somefloor.size() = count_on_floor);average_on_elevator_time_floori = AverageVal(average_on_elevator_time_on_somefloor);average_on_elevator_time_on_somefloor.clear();for (i = 1; i = floor_num; i+)fout average_on_elevator_time_floori t;fout -1 endl;fout.close();void EleController:Initialize()int i,j;m_nMax_wait_time = 0;m_wait_time.clear();m_on_elevator_time.clear();m_on_foot_time.clear();m_persons_floor.clear();m_person_count.clear();m_time.clear();m_clock = 0;for (i = 0; i elevator_count; i+)m_elevatori.Initialize();m_elevator_personsi.clear();srand(int)time(0);gernarate();/ 设置每部电梯可到达的楼层/ 其中三部电梯可以到达-10层for ( i = 0; i elevator_count/2; i+ )for ( j = 1; j = 10; j+ )m_elevator_floorij = j;/ 另外三部电梯可到达-20层for ( i = elevator_count/2; i elevator_count; i+ )for ( j = 11; j = 20; j+ )m_elevator_floorij-10 = j;int EleController:Rand_Sec()return rand() % 60;void EleController:gernarate()int i,j;for ( i = 0; i floor_num; i+ )for ( j = 0; j flow_rate; j+ )m_arrive_matij = Rand_Sec();void EleController:Process()do / 是否需要重新生成新的到达矩阵if ( (m_clock % 60) = 0 & m_clock sum_process_time)gernarate();if ( m_clock sum_process_time)process_person();process_elevator();m_clock+;while ( !m_wait_queue.empty() | m_clock sum_process_time );char AnyCh;do cout AnyCh;while( AnyCh != Y);cout 输入正确!继续运行! endl;void EleController:ComputeData(vector Vec, int &sum_time)/ 每个运送期运送的总人数m_person_count.push_back(Vec.size();int i;int N = Vec.size();vector Vec_floor;for ( i = 0; i N; i+ )int current_floor = Veci.get_target_floor(); / 每个人的等待时间m_wait_time.push_back(m_clock - Veci.get_arrive_time();/ 第一问每个人的步行时间都是m_on_foot_time.push_back(0);Vec_floor.push_back(Veci.get_target_floor();Sort(Vec_floor);sum_time = 0;int interval_time = 0;int pre_floor = 0;for ( i = 0; i N; i+ )int look = Vec_floori;interval_time = cost_time(pre_floor, Vec_floori);sum_time += interval_time;/ 如果该层楼有停留,则需加上停留时间if ( interval_time != 0)sum_time += stay_time;m_on_elevator_time.push_back(sum_time); / 每个人在电梯的时间m_persons_floor.push_back(Vec_floori);pre_floor = Vec_floori;sum_time += cost_time(Vec_floori-1, 0);/ 电梯运行的总时间m_time.push_back(sum_time);void EleController:process_elevator()/ 看看是否有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论