1、电梯的优化调度相关学科成绩姓名 学院 年级专业 学号 联系电话 高等数学线性代数概率统计数学模型数学实验英语四级英语六级杨阳 电气工程学院08级电气工程与自动化20084504 15826251962 81 75 66 良 488谢思 软件工程学院08级软件工程20082064 13527497293 97 92 95 优 486张林 电气工程学院08级电气工程与自动化20084521 13983923471 94 82 82 良 432 1 目录一 问题的重述3二 模型的基本假设和参数的假定3三 符号说明4四 问题分析44.1 有关电梯速度:44.2 停靠次数与最高可达楼层的期望值54.2.
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
3、.1模型的优点 176.2模型的缺点 17七 模型的推广、改进 177.1模型的推广 177.2模型的改进 17八 参考文献 17九 程序 17 2 电梯的优化调度【摘要】:1. 本题针对电梯拥挤问题,应用概率统计方法计算出更贴近实际的电梯运行参数,例如:电梯实际停靠次数的期望,电梯可达最高楼层数的期望2. 问题一要求在给定条条件下定量的描述出电梯的拥挤状况:(1) 每个人到达他的工作楼层所需的时间层数 1 2 3 4 5 6 7 8 9 10时间(秒) 8 26 43.99 61.81 79.14 95.65 111.2 125.7 139.2 151.8层数 11 12 13 14 15
4、16 17 18 19 20时间(秒) 38 56 73.99 91.81 109.1 125.7 141.2 155.7 169.2 181.8(2) 早晨任意时刻在中央大厅内等候的最大人数:740人(3) 对单个雇员求出他从大厅入口处到他所在的楼层所花的时间 = 候梯时间 +乘梯时间3. 问题二主要是电梯的优化调度问题,要求给出几种改进方案。(1)雇员在早上不同时刻到达,可以节省雇员等待时间(2)指定部分人员步行到一些楼层,用动态规划解决合理分层问题,得到结果:电梯应改为三部在4-12层服务,三部在13-20层服务。运完雇员所需时间:42.7645 分。(3)由动态规划模型解出电梯分3组在
5、不同高低楼层运行最合理的方案, 1-8层,8-14层,15-20层。运完雇员所需时间:33.375分(4)电梯分两组按奇偶层运行时,运完雇员所需时间:44.193分综合分析:分组明确会节省整体时间。4. 使六部电梯分别直达3、6、9、12、15、18层,除了第20层雇员要步行两层楼外,其他楼层雇员都最多步行一层楼。它运完它所承担的雇员的时间为27.6分钟。5. 模型特点:贴近实际的假设,与计算机模拟结果相比较提高了结果的正确率 。6. 本文全部数据均通过建模计算和计算机模拟结果的比较,正确率相对较高。【关键字】:数学期望 概率 动态规划 计算机模拟我想给你说的是 能够标号的式子都标号 以后要用
6、到的式子不要说上式 要用式(多少多少)来表示的哈 还有图 表 绝对不要出现下图下表之类的词汇 一定要标号 有些结果太复杂的没有必要全部写出的哈 就全部用表格的形式给给出这样的话有利于表现的嘛!记住 我有些没有搞懂你是怎么怎么算出来的 我就不太能够改了 你拿去改一下的嘛 还有附录程序那里改成程序9.1 9.2这种形式的哈我今天就改了这么多了 你看一下的哈 嘿嘿 你应该感谢我的哈 我到网吧去下载的呢 三块钱一个小时的呢 好贵的哦 不过 出去下了几首歌还好哈哈 3 一 问题的重述电梯问题:拥有 1200 雇员的大公司要搬家到新建筑楼去。该建筑有 21 层楼:底层和 120 层,并且底层有一个中央大厅
7、拥有 6 部电梯。所有的雇员工作在 1 楼以及较高层楼,且都使用电梯到达他们工作的楼层。此时,电梯拥挤成为了一个不容忽视的问题。一些管理人员想到了必须从根本上解决这样一个问题,而维持秩序不是办法。 (基本参数假定详见模型假设部分)问题 1:1)计算每个人到达他的工作楼层所需多少时间?2)计算任意时刻(早上期间)在中央大厅内等候的最大人数;3)对单个雇员求出他从大厅入口处到他所在的楼层所花多长时间?问题 2:还有一些其他模型可以改进早上的电梯运输问题。例如,可以设想一半的电梯只在偶数层楼停顿,另一半电梯只在奇数层楼停顿。试考虑至少三个改进早上电梯运输拥挤问题的方案,并比较所有的方案的优劣,例如:
8、A.设雇员在早上不同时刻到达;B.指定部分人员步行到一些楼层;C.电梯分几组在不同高低楼层运行。问题 3:在你建立的模型中,能否考虑再加一些因素,比如 1)雇员们不想步行太多,模型不必太复杂,但他们都希望尽可能快地到达他们所工作的楼层。2)该栋楼的部长们都集中在 15 层楼,对他们应优先考虑。二 模型的基本假设和参数的假定模型整体假设 :电梯运输时尽可能的满载。 1先到的人先坐电梯,不存在插队现象。 2电梯的速度: 31)从任意一层楼的静止状态到达相邻(上或下)楼层的静止状态所用时间为 8 秒。2)从任意一层楼的静止状态经过相邻楼层所花费的时间为 5 秒。3)通过两层楼之间的时间总量为 3 秒
9、,从经过一层楼到相邻楼层的静止状态所花费的时间为 6 秒。4)电梯在一层楼停留时间为 10 秒。每分钟的开始 80 个人已经来到电梯外排队。 4每层楼有 60 个人工作(不包含 F1 楼) 。 5 4 每个电梯的容纳人数 20,忽略电梯第一次和最后一次运输的不满载,计算电梯运输 6周期时假设电梯每次运输都是满载的;对于计算机模拟程序的附加假设 :如果有电梯可供使用,则不必等待电梯坐满了才启动。三 符号说明变量 含 义 单位N电梯到达的楼层数目 层jm第 j 层下电梯的雇员数 位C电梯满载乘客数 位s电梯运行一周期停靠的次数 次ijT电梯从第 i 层到第 j 层所需的时间 秒C电梯往返一次的运输
10、时间 秒0j0 到 j 层的所需的平均时间 秒M完成乘载任务的总时间 秒1()ytt 时刻 1-10 层的雇员在大厅等候电梯的人数 位2t 时刻 11-20 层的雇员在大厅等候电梯的人数 位()xtt 时刻到达电梯的人在大厅的等待时间 minjzt时刻到达大厅的第j层的雇员到他所在的楼层的时间【注】:: 往返一次运输时间 :是指单台电梯沿建筑物楼层上下运行,以电梯在门厅开门时起直到往返一次再回到门厅重新开门时止所需的精确到秒的时间。:还有一些具体的符号到文章用到的时候再具体说明四 问题分析4.1 有关电梯速度:由已知,1)从任意一层楼的静止状态到达相邻(上或下)楼层的静止状态所用时间为 8 秒
11、;2)从任意一层楼的静止状态经过相邻楼层所花费的时间为 5 秒;3)通过两层楼之间的时间总量为 3 秒; 5 4)从经过一层楼到相邻楼层的静止状态所花费的时间为 6 秒;5)电梯在一层楼最少停留时间 10 秒。图 1 电梯各时间的分析示意图由图 1 可以分析出任意楼层 i 直达 j 的时间为:; (1)5(2)36()35ijTji设当 i 层到 j 层之间有(s-1)次停,那么:(2)()(10)()350ijji sjis则,同样是从 i 层到 j 层,多停的(s-1)次使花费的时间多了(3)15()ijijijTs即从 i 层到 j 层之间的(s-1)次停下使原本直达的电梯多花了 15(
12、s-1)秒的时间。4.2 停靠次数与最高可达楼层的期望值:4.2.1停靠次数期望值的计算:设N为电梯可到达的楼层个数的最大值,第j层下电梯的雇员数为 ,电梯载客数C,jm某雇员在第 j 层下的概率为 ,则在第 j 层有人下的概率为:1N, (4)1(0)(0)()Cj jPm停靠次数的期望为:(5)1()()()NCjjEs4.2.2最高可达楼层期望值的计算:设一部电梯可达最高楼层H,k为可到达的楼层值,k为可到达楼层的个数,即实际到达k层楼就返回F1层的概率为:(6)1()NCCkP( ) ( )现证明如下: 6 显然,全部人员在 k 层以下(包括 k 层)出电梯的概率()NCkPH( )全
13、部人员在 k+1 层以下(包括 k+1 层)出电梯的概率 (1)C( )同理, 全部人员在 k 层以下(包括 k 层) 出电梯的概率()N( )kPH故,1()(1)()NCCkPHPH( ) ( )最高层层数的期望值为:(7)()NCCkkE( ) ( )4.2.3 往返一次的运行周期的计算:1)往返一周期(只在最高层停一次) ,电梯的运行时间为:(8)05(2)31610THH2)门厅到最高层之间停(s-1)次,电梯的运行一周期总时间为:(9)1()05Css3)将电梯开始在门厅停下进人的 10 秒计入电梯运行的一周期时间内,则电梯往返一次的运行周期为:(10)561CTsH五 模型的建立
14、与求解5.1问题一 相关参数的假定:所有雇员进入大楼时间是 8:45-9:00am; 1有一个稳定的人流:假定进入中央大厅的人数:4 人/每层楼每分钟; 2三部电梯仅运输 1-10 层;其它三部电梯只运输 11-20 层; 3在 8:45-10:00am,电梯仅运输人,而不运输其它物资; 45.1.1 计算每个人到达他的工作楼层所需的时间(即在电梯内的时间):(1)模型的建立: 7 由 可知,F1层直达j层的时间为:5(2)36()35ijTjiji0(2)365jTj考虑从F1层到j层间有(s-1)次停下,所以: 0351()10j sjs这时, 0()35jTj其中 表示从F1层到j层间的
15、平均停靠次数s又: 1 1()()()NCjjEsPmsN当j=1时, =1,s当 时,有 ,10j1()Cjj当 时,有 。2j 1(0)()0Csjj(2)模型的求解:根据 的公式计算出了不同的人到达他的工作楼层所需的时间见表1:0jT表1:不同人到达他的工作楼层所需时间(计算)层数 1 2 3 4 5 6 7 8 9 10时间(秒) 8 26 43.99 61.81 79.14 95.65 111.2 125.7 139.2 151.8层数 11 12 13 14 15 16 17 18 19 20时间(秒) 38 56 73.99 91.81 109.1 125.7 141.2 155
16、.7 169.2 181.8(3)计算机模拟结果:(程序是哪个?)表2:不同人到达他的工作楼层所需时间(模拟)层数 1 2 3 4 5 6 7 8 9 10时间(秒) 8 24.67 41.54 58.07 74.97 91.75 108.3 124.9 141.7 158.4层数 11 12 13 14 15 16 17 18 19 20时间(秒) 38 54.67 71.43 88.23 105.0 121.9 139.0 155.6 172.5 189.2对比表1和表2,我们发现不同的人到达他的工作楼层所需的时间计算和模拟的结果 8 很接近。5.1.2早上任意时刻在中央大厅内等候的最大人
17、数的计算:(1)模型的建立:设 为t时刻时达1-10层的电梯门前的队长, 为t时刻时达11-20层的电梯门前 1 ()y 2y的队长;当t=0时,时间为:8:45 a.m. 表示 这个数值向下取整;CjtTj由已知代入分析得到的式子可以计算出: 2; 20102021()()1()56()15jkkCjjjEskHTEs( ) ( )( ) ( ) 1,2j目标函数: 3 maxys.t. 122()406()1,.5CjjttyTtt(2)模型的求解:(程序见6.第一问计算等待人数程序)计算可得:8.784201()()jEs9.866102020kkH( ) ( )19.87 202020
18、11()kE( ) ( )205.96 秒1156()5CTsE 9 265.96 秒22215()6()15CTEsH为使结果更精确,中间结果接受期望带小数部分。当t= 13 s 时340 人1()yt400 人2740人 为大厅内的最大人数12()yt5.1.3 单个雇员从大厅入口处到他所在的楼层所花的时间:(1)模型的建立:为了方便计算单个雇员在大厅排队等候电梯的时间,我们假设每半分钟来2人/每层楼每分钟。记t时刻进入大厅的人的等梯时间为x(t),记 。 12120.50.5,CCttmT则由上一问可知,则对于1-10层的人来说1 1(0.5)4(.)60yttm1)若 ,即 ,有113
19、322t1()CxtTt2)若 ,即 ,有6(.)yt17m12mi)若 ,即 ,有10()(0.5)6iyti113322iti1)CxtmT,则对于11-20层的人来说:2 2(.54(.)ytm1)若 ,即 ,有20602313t2()1)CxtmTt2)若 ,即 ,有6(.)1yt272i)若 ,即 ,有20()(0.5)6iyti223311miti 10 2()CxtmiTt又由5.1.1得到个各层的电梯运行平均时间 ,记 t时刻到达大厅的第j层的雇员到cT他所在的楼层的时间为 ,则()jzt0j jxt(2)模型的求解:(程序见 8.第一问计算等待时间程序)画图程序在:9. 等待
20、时间散点图程序0 5 10 15051015202530351-10层11-20层图 2 各层楼的人的等待时间散点图注:横坐标表示时间(单位:s) ,纵坐标表示等待时间(单位:min) (拜托你们这是写论文你们干嘛的啊都不把横纵坐标标在图上 晕你们! 自己添上记住)解释一下这个每一次 中的现象,我不是很懂你们的模型,你看怎么解释 11 根据 5.1.1 结果可得到雇员到达他的工作楼层所需的时间(在电梯内的时间),由前面的模型的建立可得到雇员在大厅排队等候电梯的时间(等电梯的时间)。因此,从大厅入口到他所在的楼层花的时间 = 等待时间 + 在电梯内的时间下面列举部分雇员从大厅入口到他所在的楼层花
21、的时间:例如:8:47来的要到6层工作的雇员,从大厅入口到他所在楼层花的时间=4.865(分)+95.65(秒)=6.459(分)8:53来的要到17层工作的雇员,从大厅入口到他所在楼层,花的时间=12.596(分)+141.2(秒)=14.949(分)这点最好是用表格的形式将时间展现出来,是根据那个式子出来的也标上号写出来的哈,不然根本就不清晰,这样我都没有看懂你是哪里加上哪里的 52问题二 几个改进早上电梯运输拥挤问题的方案5.2.1设雇员在早上不同时刻到达对于此方案的说明:当选用问题一中的电梯调度方案时,大厅中人等待电梯的最大值为:740人。对于一部分人来讲,与其让他们早早的来到大厅排队
22、,不如安排晚一点再来。这样不会改变那些雇员到达自己所在工作楼层的时刻,还可以大大减少那些雇员的等待时间。优点:节省部分雇员等待电梯的时间;缺点:造成一部分人早上班,一部分人晚上班,从人性角度考虑会有部分员工觉得不公平。5.2.2 指定部分人员步行到一些楼层(1)模型的建立:4-20层分两组的动态规划由第一问计算结果可知: 1,1min205.96CjT秒 ( 一 部 1-0层 电 梯 运 行 周 期 的 期 望 )又,总共有三部这样的电梯,所以人均最少等待电梯时间为: 168.523CT假设人上一层楼需要25秒,那么 。得到结论:人从门厅上三楼的时间约13CT为等待电梯的最小时间,即让1到3楼
23、的雇员走楼梯还是比较合理的。从第一问结果可以看出1-10层的电梯运完全部雇员的时间 要比11-20层的电梯 2 1M运完全部雇员的时间 少10分钟,若还让电梯以10层为分界来分组运行显然是不合理2M的。这时候,我们需要求出尽可能让两组电梯完成任务的时间差最小的分界层数。现将 4-20 层分为 2 个区,每个区由 3 部电梯服务。分区情况如下:第 1 个区域的两部电梯服务于 0 层,4 层 层; 1n 12 第 2 个区域的两部电梯服务于 0 层, 层 20 层;1()n目标函数: 1min()As.t. 1320nZ其中, ,221()()jjAEMM,11223)60(CinT, , 12(
24、)M156CiiiTsH1,2i,2011213()3(0)snn 11 0412020213()()Ckknkn(2)模型的求解:(程序见 3.动态规划 2 组程序)7542.751min()A63.708.52( 分 )12得出结论在12层分组较好比题目中原来的方案要节省时间。ax256.87.96;CjT(秒 )所以,运完雇员所用时间为:42.7645 分。5.2.3 电梯分3组在不同高低楼层运行(1)模型的建立:动态规划模型20层楼分为3个区域,每个区域有两台电梯服务。分区情况如下:第1个区域的两部电梯服务于0层,1层、 、 、 层;1n第 2 个区域的两部电梯服务于 0 层, 层、
25、、 、 层;2 13 第 3 个区域的两部电梯服务于 0 层, 层、 、 、20 层。21n目标函数: 12,min()As.t. 1200,nZ其中, ,3221()()iiAEMM123()3M, , 6032iiCinT56CiiiTsH,i,2011202 1322()(0)(snns 121202012020110223()()()kknkknkH(2)模型的求解:(程序见 2.动态规划 3 组程序)3146012,min()A,84得出结论由8、14层为分界分成三个区域较好222.5(秒)=3.708(分),3axCjT运完雇员所需时间= 603.78.52( 分 ) 14 图3
26、电梯分成三区域示意图同样,按类似方法很容易求得20层电梯分成两部分运行的最佳方案是1-11层,12-20层,且 256.59(秒),据此,我们推测,分组越多电梯整体运行越节省时间。这maxCjT可以从宏观上说明:电梯分组越多,到某一固定楼层的人越可能搭乘一部电梯,使得电梯停靠次数越少,故整体运行时间越少。5.2.4电梯分2组按奇偶层运行(1)模型的建立:假设三部电梯只在奇数层停,另外三部只在偶数层停。 电梯只在奇数层停靠的停靠次数的期望与只在偶数层停靠的停靠次数的期望相同, 1即: ;2021()()Es电梯只在奇数层停靠: ; 2 20201 1()()kkEH电梯只在偶数层停靠: ; 30
27、202021()()k有,,()5()6()15CjjjETsEH,j则奇数层的人全部到达所工作楼层的时间为: 1110()0()3CCMT偶数层的人全部到达所工作楼层的时间为: 2226()()E将乘客全部运到所在工作层的时间为: 4 12max(0),()CT(2)模型的求解:(程序见 5.奇偶层程序)2651.6(秒)=44.193(分)12max(0),()CET此方案对电梯调度问题没有太大的优化,不可取。5.3 问题三 模型的进一步改进使六部电梯分别直达3、6、9、12、15、18层(直达3层电梯负责运输2、3、4层雇员; 15 直达6层电梯负责运输5、6、7层雇员,以此类推)如图4
28、所示:图4 六部电梯到达各自安排层数的示意图由图4可以看出除了第20层雇员要步行2层楼外,其他楼层雇员都最多步行1层楼。电梯运行一周期的时间一般要比人步行一层楼的时间长,所以在楼道里不会发生拥挤现象,不影响人们的步行状况。现在来分别计算这六部电梯的运行周期:由:( )156CjjjTsH1,jjs可分别计算出TC3,TC6,TC9,TC12,TC15,TC18,表3 六部电梯的运行周期TC3 TC6 TC9 TC12 TC15 TC18时间(秒) 48 66 84 102 120 138(秒)18max3由 上 表 可 以 看 出 : Cj这部电梯耗时最久,它运完它所承担的雇员的时间为: 18
29、4602465()27.6MT秒 ( 分 钟 )这个时候前面几部电梯会空闲下来。为了不使电梯调度过于麻烦,我们暂不考虑调空闲电梯来继续工作。我们看到,这种电梯调度方案是非常节省时间的,而且在照顾到了15楼的领导(有直达15楼的电梯)的同时不会让普通雇员觉得太多的不公平。为什么不考虑雇员到达各自楼层的行走的时间的呢?毕竟还是要花时间要到自己的楼层的撒5.4 计算机仿真流程图(见图5) 16 图 5 计算机仿真流程图六 模型的优缺点分析6.1 模型的优点:在本模型中我们多采用动态规划的方式来对电梯的运行方案进行优化,同时又用排队论计算最大等待人数及各个时刻来的认得等待时间。另一方面又辅之以计算机模
30、拟与数学模型求得的理论值相比较,结果大致相同,让模型的准确度更高。在对电梯运行方案的选取过程中,为避免等待时间过长。我们采用了重新动态分区、奇偶层分配电梯、让一部分人步行上楼等多种方案,使得结论更充实、更具有可信度。6.2 模型的缺点:本模型没有充分考虑现实因素,人流不可能是均匀分布。其次,考虑的情况也不是非常全面。 17 七 模型的推广、改进7.1模型的推广可将本模型适当的改进,得出最优运行方案的一般求法,将其用于各种电梯运行及排队过程,比如说公交车的等待,排队购买商品等。7.2模型的改进在第三个问的模型中,直到 3,6,9 层的电梯运行周期短,很快将人运到所在楼层,而 12,15,18 层
31、还未运完。可考虑在 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 #incl
32、ude #include “elevator.h“#include “person.h“using namespace std;const int flow_rate = 4; / 4人每分钟每层楼const int floor_num = 20; / 总共的层数const int elevator_count = 6; / 电梯的数目const int count_on_floor = 60; / 每层楼有名员工 18 const int sum_process_time = 15 * 60;class EleControllerprivate:/ 动作人员相关数据int m_nMax_wa
33、it_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 m_elevator_persons; / 每个电梯坐的人vector m_elevator_fl
34、oor; / 每部电梯可到达的楼层/ 这个性质可以放在 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:/
35、 处理函数的辅助函数/ 随即函数, -59的平均分布int Rand_Sec();/ 生成一分钟内的到达数据,每分钟调用一次void gernarate(); 19 / 处理新来的人的问题,把新来的人放到等待队列中去void process_person();/ 处理电梯问题,如果可用,人将进入电梯void process_elevator();/ 拿到进入电梯员工的到达信息进行计算void ComputeData(vector Vec, int ;#endif / ELE_CONTROLLER_Helevator.h#ifndef ELEVATOR_H#define ELEVATOR_Hco
36、nst 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_
37、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; i
38、nline 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; 20 inline bool IsAvailable() return m_load_left 0; / mutatorsvoid set_process_time(int time) m_process_time = time; void set_sts(Elevator_Sta
39、te 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 in
40、t 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_
41、target_floor() return m_target_floor; Person_State get_sts() return m_sts; 21 / 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 p
42、s) 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 EleController.cpp#include “EleController.h“#include #include “vector_function.h“#include #includ
43、e #include using namespace std;EleController:EleController(): m_elevator_persons(elevator_count),m_elevator_floor(elevator_count, vector(max_load), 22 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);f
44、out average_on_elevator_time_floor(floor_num+1);for ( i = 1 ; i average_on_elevator_time_on_somefloor;for ( j = 0; j AnyCh;while( AnyCh != Y);cout Vec, int int i;int N = Vec.size();vector Vec_floor;for ( i = 0; i = m_elevatori.get_end_time() )m_elevator_personsi.clear();m_elevatori.clear();/ 进人if (
45、!m_wait_queue.empty()vector:iterator itr = m_wait_queue.begin();for ( ; itr != m_wait_queue.end(); )/ 是否可以再进人if ( m_elevatori.IsAvailable() 26 itr = m_wait_queue.erase(itr);m_elevatori.decre_load_left();elseitr+;if ( itr = m_wait_queue.end() ) break;/ 如果该电梯有人使用if ( !m_elevator_personsi.empty() )int sum_time;/ 计算运行数据ComputeData(m_elevator_personsi, sum_time);m_elevatori.set_begin_time(m_clock);m_elevatori.set_process_time(sum_time);void EleController:process_person()int i,j;for ( i = 0; i Elevator:Elevator():m_