电梯调度算法总结
电梯调度算法研究
电梯调度算法研究摘要随着我国经济的不断发展,建筑行业也得到了突飞猛进,特别是高层以及智能建筑不断涌现,因而垂直运输工具电梯得到了越来越广泛的应用。
当前人们对电梯服务质量越来越高,单台电梯无法满足人们需要,因此在楼层间往往设置多台电梯,为了减少能力损耗以及缩短人们等待的时间,因此本文深入分析电梯调度算法,采用优化控制策略从而优化多台电梯的协调运行,提高服务质量和运行效率。
本文首先阐述了乘客对电梯群控系统的要求,电梯群控系统的特征,如非线性、不确定性、多目标以及扰动等特性,针对电梯的特征,详细分析了电梯群的控制模式。
然后统计了一段时间的客流状况,从而完成整体流量状况的预测,根据预测情况优化了电梯调度算法,该算法是在多目标规划的基础上建立评价函数,通过权值的设定,突出不同目标在不同交通模式下的要求。
最后通过仿真的方式,验证了算法的有效性。
本文针对电梯群控系统的复杂特性,设计了相应的调度算法。
通过设计的调度算法能够很好的提高整个系统特性。
关键词:电梯群控,调度算法,多目标规划,仿真分析目录第一章绪论 (3)1.1 引言 (3)1.2 课题研究背景及意义 (3)1.3 国内外研究现状 (3)第二章电梯群控系统的特征分析 (5)2.1 乘客对电梯群控系统的要求 (5)2.2 电梯群控系统的系统特性 (5)2.2.1 非线性 (5)2.2.2 不确定性 (5)2.2.3 多目标性 (5)2.2.4 扰动性 (6)2.3 电梯群的控制模式 (6)第三章多目标规划电梯调度算法及仿真分析 (7)3.1 多目标规划电梯调度算法分析 (7)3.1.1 多目标规划建模 (7)3.1.2 多目标规划调度算法实现 (8)3.2 仿真分析 (10)3.2.1 调度算法仿真分析 (10)3.2.2 电梯运行仿真分析 (12)第四章总结 (16)参考文献 (17)致谢.......................................................................................... 错误!未定义书签。
多电梯调度算法
多电梯调度算法
多电梯调度算法是一个用于控制多个电梯在一个大楼中高效运行的系统。
这个系统可以根据乘客的需求和楼层情况,智能地决定每个电梯应该去哪一层接乘客或者送乘客。
为了实现这一目标,多电梯调度算法可以采用以下策略:
1. 电梯最近停留楼层策略:当有新请求到来时,电梯会优先选择最近停留的楼层。
这样可以最大程度地减少电梯的等候时间和行程时间。
2. 同方向优先策略:当电梯到达某一楼层接乘客后,如果有相同方向的请求,电梯会优先选择同方向的请求而不会改变方向。
这样可以避免不必要的方向转变,提高效率。
3. 最小耗能策略:电梯在每一次移动时,会选择耗能最小的方向。
通过计算每个方向上的耗能,并综合考虑每个电梯的负载情况和楼层的请求情况,来选择耗能最小的方向。
4. 动态调整电梯数量策略:当需求量较小时,只开启少部分电梯。
而当需求量增加时,可以动态调整电梯的数量,以满足乘客的需求。
这样可以降低能源消耗和运营成本。
5. 紧急优先策略:当有紧急请求到来时,例如火警或者地震预警,系统会立即将所有电梯调度到底层,以最快速度将所有人员安全地送离建筑物。
通过以上策略的综合运用,多电梯调度算法可以实现电梯的高效运行,节约能源和时间,提供更好的乘坐体验。
该算法还可以根据实际情况进行调整和优化,以满足不同大楼的需求。
电梯调度算法总结
电梯调度算法总结⼀:任务要求本次的程序任务和要求如上图所⽰,需要有4部电梯同时运⾏,每部电梯都有⾃⼰的限制且被同⼀控制器所控制,希望有图形显⽰效果,本次的任务我们组已经完成,关于编程的历程与总结现在就⼀⼀道来。
⼆:初步构想阶段我们先尝试解决最核⼼的问题,即电梯的调度算法问题,初步构思是这样的,电梯根据当前控制器内所要到的楼层信息判断是向下运⾏或向上运⾏,并向上或向下运⾏⾄控制器内楼层的最⼤或最⼩值,期间出现的所有楼层信息都加⼊到控制器内,若有⽐最值更⼤或更⼩的信息不予理会,只是加⼊控制器中,每到⼀楼层就判断控制器内是否有该楼层,有则在该层停留,并移除控制器内该层信息,⽆则继续运⾏,运⾏⾄最值处,重新从控制器内找出最值,并判断向上或向下运⾏,如此循环。
当控制器内没有信息后,电梯等待⼀段时间后会回到初值处。
代码如下:1public void down()//定义⼀个下降函数便于复⽤2 {3for(;cout>=con.getmin();cout--)4 {5 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.black);6if(con.getlist(this.mode).contains(cout))7 {8 con.remove(cout);9 System.out.println("到达"+cout+"层");10 changepeople();11try {12 Thread.sleep(500);13 } catch (InterruptedException e) {14// TODO Auto-generated catch block15 e.printStackTrace();16 }17if(cout==con.getmin())18break;19 }20if(cout==con.getmin())21break;22try {23 Thread.sleep(200);24 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.white);25 } catch (InterruptedException e) {26// TODO Auto-generated catch block27 e.printStackTrace();28 }29 }30 }31public void run() //电梯运⾏算法主要运⾏函数32 {33while(true)34 {35while(!con.getlist(this.mode).isEmpty())36 {37 con.setmami();38if(con.getmax()>cout) //和下⾯的if组成判断电梯是否向上运⾏否则向下运⾏39 {40if(con.getmin()>cout||(con.getmax()-cout)<=(cout-con.getmin()))41 {42for(;cout<=con.getmax();cout++)43 {44 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.black); 45if(con.getlist(this.mode).contains(cout))46 {47 con.remove(cout);48 System.out.println("到达"+cout+"层");49 changepeople();50try {51 Thread.sleep(500);52 } catch (InterruptedException e) {53// TODO Auto-generated catch block54 e.printStackTrace();55 }56if(cout==con.getmax())57break;58 }59if(cout==con.getmax())60break;61try {62 Thread.sleep(200);63 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.white);64 } catch (InterruptedException e) {65// TODO Auto-generated catch block66 e.printStackTrace();67 }68 }69 }70else71 down();72 }73else//电梯向下运⾏的算法74 down();75 }76try {77 Thread.sleep(1000);78 } catch (InterruptedException e) {79// TODO Auto-generated catch block80 e.printStackTrace();}81while(con.getlist(this.mode).isEmpty()&&cout!=incout) //⽆任务回到初始楼层的函数82 {83 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.white);84if(cout>incout)85 {86 cout--;87 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.black);88try {89 Thread.sleep(200);90 } catch (InterruptedException e) {91// TODO Auto-generated catch block92 e.printStackTrace();93 }94 }95if(cout<incout)96 {97 cout++;98 vie.map.get(new Point(250-50*panmode,500-cout*20)).setBackground(Color.black);99try {100 Thread.sleep(200);101 } catch (InterruptedException e) {102// TODO Auto-generated catch block103 e.printStackTrace();104 }105 }106 }107 }108 }109 }我这⾥是从全部完成后的代码上截取出的算法部分,有图形显⽰的代码和⼀些实现其他功能的代码,初步构想时只是做出了算法,并在dos模拟。
群控电梯调度算法
一)、弄清群控电梯调度算法的评价指标由于乘客心理等待时间的长短、电梯响应呼梯的快慢、召唤厅站客流量的大小、轿厢内乘客人数的多少等均是一些模糊的概念,很难用确切的数量关系定义,也难以用普通的逻辑规则综合描述。
近年来,人们借助于模糊数学中的隶属函数来表述,将复杂的模糊问题转化为简单清晰的形式进行求解和控制.模糊控制通过模糊逻辑进行推理,有效地对电梯运行状况作出判断,但对于非常复杂的多变量系统,要建立正确的模糊规则和隶属函数是非常困难的,而且通过大量实验建立的隶属函数和规则有时也很难保证十分精确与合理。
此外,其隶属函数中的加权系数是确定的,不能根据客流改变而相应改变。
为了解决模糊控制中存在的某些问题,新发明将神经网络控制方法应用于电梯控制中,无需建立精确数学模型,可以提供准确的控制策略,以减少候梯时间,降低乘客的焦急等待心理,节约能源,合理有效地调度电梯最佳运行。
(二)、理解上行高峰模式、下行高峰模式、双路运行模式等概念,并找出根据一系列输入手段间接算出运行模式的算法:上行高峰交通模式:当主要的客流是上行方向,即全部或者大多数乘客从建筑物的门厅进入电梯且上行,这种状况被定义为上行高峰交通状况。
下行高峰交通模式:当主要的客流是下行方向,即全部或者大多数乘客乘电梯下行到门厅离开电梯,这种状况被定义为下行高峰交通状况。
二路交通模式:当主要的客流是朝着某一层或从某一层而来,而该层不是门厅,这种状况被定义为二路交通状况。
二路交通状况多是由于在大楼的某一层设有茶点部或会议室,在一天的某一时刻该层吸引了相当多的到达和离开呼梯信号。
所以二路交通状况发生在上午和下午休息期间或会议期间。
四路交通模式:当主要的客流是朝着某两个特定的楼层而来,而其中的一个楼层可能是门厅,这种交通状况被定义为四路交通状况。
当中午休息期间,会出现客流上行和下行两个方向的高峰状况。
午饭时客流主要是下行,朝门厅和餐厅。
午休快结束时,主要是从门厅和餐厅上行。
第一个算法题-电梯调度算法
第⼀个算法题-电梯调度算法参考⽂章⼀问题描述:所有的员⼯均在1楼进电梯的时候,选择所要到达的楼层。
然后计算出停靠的楼层i,当到达楼层i的时候,电梯停⽌。
所有⼈⾛出电梯,步⾏到所在的楼层中。
求所有⼈爬的楼层数⽬和的最⼩值。
⼆问题解决⽅法:解决⽅案:(1)使⽤简单的⽅法,直接将楼层从1到n开始遍历sum(person[i] * |i - j| ) 此表达式为⼀个双重循环,i与j均为1-n的循环。
j下标表⽰电梯停靠的楼层。
person数组表⽰,对应i层的下电梯的⼈数。
此算法负责度为o(n*n)对应的j是上述和为最⼩的⼀层即为所求。
上⾯的算法复杂度为o(n)(2)下⾯考虑⼀个简单的算法,使其复杂度达到o(n)考虑假如电梯停靠在某⼀楼层i处,假设在i处下楼的客⼈为N2,在i以上楼层的客⼈数⽬为N3 ,在i⼀下楼层的客⼈数⽬为N1。
且将电梯在i层停⽌时,全部⼈员的路程之和记为T。
那么加⼊电梯在i-1层停的话,则原来i层之上的⼈需要多爬⼀层,即增加了N3第i层的⼈需要多爬⼀层,则结果增加了N2, i层之下的⼈则少爬了⼀层,结果减去N1所以第i-1层的结果为 T - N1 + N2 + N3 。
即结果可以即为 T -(N1 - N2 - N3)下⾯考虑在i+1层的结果,若电梯在i+1层停⽌的话,原来i层之上的客户都会少爬⼀层,则结果减少N3 ,⽽i层之下的⼈员则都会多爬⼀层即增加了N1 ,第i层的⼈员都会多爬⼀层即为增加了N2 。
则结果为 T + N1 + N2 - N3综上我们得出,(1)若N1 > N2 + N3的时候,我们在第i-1层选择电梯停⽌最好。
(2)若N1 + N2 < N3的时候,我们选择在第i+1层停⽌电梯最好。
个⼈完全不知道什么是o(n) 的概念,等熟能⽣巧,每天有时间就看看算法问题。
电梯调度设计思路及算法:
电梯调度设计思路及算法:
将电梯作为一个类,声明四个对象,即四部电梯。
电梯类中属性:当前所在楼层(可用高度得出);
可承载最多人数;
可承载最大重量;
当前状态(可用速度,高度,皆有正负表示);
电梯类中函数:判断是否去接乘客(参数为乘客所在楼层数),{是否同向或静止};
计算当前所在楼层和乘客所在楼层之间差距(返回差距,在主函数中比较);
判断电梯是否超过电梯承载限额;
在一定时间内无人使用回到一层;
修改当前状态;
电梯运行中(参数为电梯内乘客所按层数),此函数为重载函数(参数个数不同);
主函数:
当乘客在电梯外按下上下键按钮时,四个电梯对象判断是否去接ta,在有电梯接的情况下,比较哪个最快到达;
若有相同的,则以乘客所按的那部电梯为标准;
若四部电梯都接不了,则等待至其中一部电梯进入可接状态。
乘客进入后按下要到的楼层,电梯进入运行中。
另一批乘客开始坐电梯,,,,,。
电梯调度算法总结(大全五篇)
电梯调度算法总结(大全五篇)第一篇:电梯调度算法总结1.传统电梯调度算法1.1先来先服务算法(FCFS)先来先服务(FCFS-First Come First Serve)算法,是一种随即服务算法,它不仅仅没有对寻找楼层进行优化,也没有实时性的特征,它是一种最简单的电梯调度算法。
它根据乘客请求乘坐电梯的先后次序进行调度。
此算法的优点是公平、简单,且每个乘客的请求都能依次地得到处理,不会出现某一乘客的请求长期得不到满足的情况[12]。
这种方法在载荷较轻松的环境下,性能尚可接受,但是在载荷较大的情况下,这种算法的性能就会严重下降,甚至恶化。
人们之所以研究这种在载荷较大的情况下几乎不可用的算法,有两个原因:(1)任何调度算法在请求队列长度为1时,请求速率极低或相邻请求的间隔为无穷大时使用先来先服务算法既对调度效率不会产生影响,而且实现这种算法极其简单。
(2)先来先服务算法可以作为衡量其他算法的标准。
1.2最短寻找楼层时间优先算法(SSTF)最短寻找楼层时间优先(SSTF-Shortest Seek Time First)[14]算法,它注重电梯寻找楼层的优化。
最短寻找楼层时间优先算法选择下一个服务对象的原则是最短寻找楼层的时间。
这样请求队列中距当前能够最先到达的楼层的请求信号就是下一个服务对象。
在重载荷的情况下,最短寻找楼层时间优先算法的平均响应时间较短,但响应时间的方差较大,原因是队列中的某些请求可能长时间得不到响应,出现所谓的“饿死”现象。
1.3扫描算法(SCAN)扫描算法(SCAN)是一种按照楼层顺序依次服务请求,它让电梯在最底层和最顶层之间连续往返运行,在运行过程中响应处在于电梯运行方向相同的各楼层上的请求。
它进行寻找楼层的优化,效率比较高,但它是一个非实时算法。
扫描算法较好地解决了电梯移动的问题,在这个算法中,每个电梯响应乘客请求使乘客获得服务的次序是由其发出请求的乘客的位置与当前电梯位置之间的距离来决定的,所有的与电梯运行方向相同的乘客的请求在一次电向上运行或向下运行的过程中完成,免去了电梯频繁的来回移动[2]。
电梯调度算法
电梯调度算法
1.最省电算法,当一台电梯自下而上运行时,不同楼层的人呼叫电
梯时,出行方向与电梯运行方向一致的用户并且电梯所在楼层小于呼叫楼层将被响应,电梯方向反向运行后,出行方向与电梯一致的用户且电梯所在楼层大于呼叫楼层将被响应,电梯如此循环往复运行以最省电算法响应呼叫用户。
2.先按先服务算法,根据客户所按楼层电梯呼叫按钮的先后顺序做
出响应,谁先请求,先响应谁,并且后按的如果在电梯顺便的情况下(电梯还未到达且电梯运动方向与请求方向一致时)可以响应后按按钮用户的请请求。
3.优先级服务算法,给予不同楼层不同的优先级,优先级高的楼层
用户呼叫首先响应,同优先级相同楼层按先按先服务算法调度,优先级高的用户服务完后再服务优先低的用户提出申请,同一优先级用户按先按先服务算法调度,电梯内的请求可以划为一类优先级。
4.特权级服务算法,给予不同楼层及电梯内用户不同优先级,优先
级高的用户的要求满足后,再服务优先级低的用户,直至最后一级客户的请求被响应。
电梯优先调度算法
电梯优先调度算法电梯调度算法(ms InterView)移臂调度算法包括以下四种:1)先来先服务算法:根据访问者提出访问请求的先后次序来决定执行次序。
2)最短寻找时间优先调度算法:从等待的访问者中挑选寻找时间最短的那个请求执行,而不管访问者的先后次序。
3)电梯调度扫描算法:从移动臂当前位置沿移动方向选择最近的那个柱面的访问者来执行,若该方向上无请求访问时,就改变移动方向再选择。
4)单向扫描调度算法:从0柱面开始往里单向扫描,扫到哪个执行哪个。
*/// t1.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"#include"math.h"#include"stdlib.h"#include"string.h"struct Head{int nPosition;bool bVisited;};void Visit(struct Head *pHead){printf("visite cy:%d\n",pHead->nPosition); pHead->bVisited=true;}int ReadInputKeyboard(struct Head *pHead,int *pCurrentPosition,int nMaxNumber){int i;printf("please input Current position:");scanf("%d",pCurrentPosition);printf("please input will visit position:");for(i=0;i<nMaxNumber;i++){scanf("%d",&pHead[i].nPosition);pHead[i].bVisited=false;if(pHead[i].nPosition<0)break;}return i;}int ReadInputFile(struct Head *pHead,int *pCurrentPosition,int nMaxNumber){int i;char szFileName[256],*q,*p,szTemp[20];printf("please input filename:");scanf("%s",szFileName);FILE *pFile=fopen(szFileName,"r");if(pFile==NULL){printf("open file %s error",szFileName); return -1;}for(i=0;!feof(pFile) &&i<nMaxNumber;) {p=szFileName;fgets(p,256,pFile);while(q=strchr(p,',')){memset(szTemp,0,sizeof(szTemp)*sizeof(char)); strncpy(szTemp,p,q-p);p=q+1;if(i==0)*pCurrentPosition=atoi(szTemp);else{pHead[i-1].nPosition=atoi(szTemp);pHead[i-1].bVisited=false;}i++;}memset(szTemp,0,sizeof(szTemp)*sizeof(char));pHead[i-1].nPosition=atoi(p);pHead[i-1].bVisited=false;//i++;}fclose(pFile);return i;}int FifoVisit(int nCurrentPosition,struct Head *pHead,int nNumber) {//先来先服务int nHaveVisited=0;int nMoveDistance=0;int i;while(nHaveVisited<nNumber){for(i=0;i<nNumber;i++){if(pHead[i].bVisited)continue;Visit(&pHead[i]);nHaveVisited++;nMoveDistance+=abs(nCurrentPosition-pHead[i].nPosition); nCurrentPosition=pHead[i].nPosition;}}printf("the sum of move distance:%d\n",nMoveDistance); return nMoveDistance;}int SsfoVisit(int nCurrentPosition,struct Head *pHead,int nNumber) {// 最短寻找时间优先int nHaveVisited=0;int nMoveDistance=0;int nMinDistance=0;int nMinIndex=0;int i;while(nHaveVisited<nNumber){nMinDistance=0xffff;nMinIndex=0;//找最小值for(i=0;i<nNumber;i++){if(pHead[i].bVisited)continue;if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition)) {nMinDistance=abs(pHead[i].nPosition-nCurrentPosition); nMinIndex=i;}//访问Visit(&pHead[nMinIndex]);nHaveVisited++;nMoveDistance+=nMinDistance;nCurrentPosition=pHead[nMinIndex].nPosition;}printf("the sum of move distance:%d\n",nMoveDistance); return nMoveDistance;}int DtVisit(int nCurrentPosition,bool bOut,struct Head *pHead,int nNumber){//电梯调度算法int nHaveVisited=0;int nMoveDistance=0;int nMinDistance=0;int nMinIndex=0;int i;while(nHaveVisited<nNumber)nMinDistance=0xffff;nMinIndex=0;//找最小值for(i=0;i<nNumber;i++){if(pHead[i].bVisited)continue;if(bOut&&pHead[i].nPosition<nCurrentPosition||!bOut&am p;&pHead[i].nPosition>nCurrentPosition){if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition)){nMinDistance=abs(pHead[i].nPosition-nCurrentPosition);nMinIndex=i;}}}if(nMinDistance==0xffff){bOut=!bOut;continue;}//访问Visit(&pHead[nMinIndex]);nHaveVisited++;nMoveDistance+=nMinDistance;nCurrentPosition=pHead[nMinIndex].nPosition;}printf("the sum of move distance:%d\n",nMoveDistance); return nMoveDistance;}int DxVisit(int nCurrentPosition,struct Head *pHead,int nNumber) {//单向调度算法int nHaveVisited=0;int nMoveDistance=0;int nMinDistance=0;int nMinIndex=0;int i;while(nHaveVisited<nNumber){nMinDistance=0xffff;nMinIndex=0;//找最小值for(i=0;i<nNumber;i++){if(pHead[i].bVisited)continue;if(pHead[i].nPosition>nCurrentPosition ){if(nMinDistance>abs(pHead[i].nPosition-nCurrentPosition)) {nMinDistance=abs(pHead[i].nPosition-nCurrentPosition); nMinIndex=i;}}}if(nMinDistance==0xffff){nMoveDistance+=199-nCurrentPosition;nCurrentPosition=0;continue;}//访问Visit(&pHead[nMinIndex]);nHaveVisited++;nMoveDistance+=nMinDistance;nCurrentPosition=pHead[nMinIndex].nPosition;}printf("the sum of move distance:%d\n",nMoveDistance); return nMoveDistance;}int main(int argc, char* argv[]){//p114struct Head mylist[20];//={98,false,183,false,37,false,122,false,14,false,124,false,65,f alse,67,false};//int nCurrentPosition=53;//int nRealNumber=8;int nCurrentPosition=0;int nRealNumber=ReadInputFile(mylist,&nCurrentPosition,20);// FifoVisit(nCurrentPosition,mylist,nRealNumber);// SsfoVisit(nCurrentPosition,mylist,nRealNumber);//DtVisit(nCurrentPosition,false,mylist,nRealNumber);DxVisit(nCurrentPosition,mylist,nRealNumber);return 0;}。
双向扫描算法 电梯调度算法
双向扫描算法电梯调度算法
双向扫描算法(Bi-directional Scan Algorithm)和电梯调度算法(Elevator Algorithm)都是用于解决电梯调度问题的算法。
双向扫描算法是一种优化算法,它的基本思想是从电梯的起始位置开始,向上下两个方向扫描,扫描到有请求时,将该请求加入请求队列中,继续扫描,直到扫描到电梯的终点位置。
在这个过程中,电梯会尽量选择距离自己较近的请求服务,以提高效率。
当电梯完成一个方向的扫描后,它会根据请求队列中的请求顺序,依次响应并完成这些请求,然后再进行另一个方向的扫描。
这种算法能够充分利用电梯的移动能力,提高服务效率。
电梯调度算法则是一种更一般化的算法,它可以应用于多个场景。
基本的电梯调度算法是轮询算法,即按照一定的顺序依次响应各楼层的请求。
这种算法简单易懂,但是效率不高。
为了提高效率,人们提出了许多改进的算法,如扫描算法、分区算法、群控算法等。
这些算法的基本思想都是通过优化电梯的调度策略,以提高服务效率。
总的来说,双向扫描算法和电梯调度算法都是为了解决电梯调度问题而提出的优化算法,它们的目的是通过合理的调度策略,提高电梯的服务效率。
电梯调度算法的应用与实现
电梯调度算法的应用与实现
一、几种电梯调度算法
1、最短路径法
最短路径法是一种以最短路径为标准的电梯调度算法,其核心思想是:为了使乘客乘坐电梯时花的时间最少,应选择一条能够把乘客从出发楼层
运至目的楼层的最短路径。
该算法通过计算触发楼层到目的楼层的距离,
来选择最佳的电梯调度路线。
2、先进先出法
先进先出法的核心思想是,电梯优先按照接受乘客请求的先后顺序传
输乘客,也就是先处理最先提出的请求。
当电梯调度系统接收到乘客的请
求后,会将请求加入到一个队列中,先进先出法的工作方式就是把队列中
的第一个乘客请求处理掉,再处理队列中的第二个乘客请求,以此类推。
3、最少停留时间法
最少停留时间法的核心思想是,在每一次调度时,尽可能地减少电梯
的停留时间,这样可以使更多的乘客得以尽快搭乘电梯,提高电梯的客流量。
主要就是要求把多个乘客之间的最短距离作为调度的依据,选择一条
最短的乘客路线,在此路线上最大限度地减少电梯的停留时间,以达到提
高乘客搭乘率的目的。
4、一边进一边出法
一边进一边出法是所有电梯调度算法中最简单有效的一种,也是最常
用的一种。
电梯调度算法
电梯调度算法LOOK(查找)调度(电梯)电梯算法。
磁臂仅移动到请求的最外道就回转。
反方向查找服务。
磁头从53号磁道开始移动,按照65, 67, 98, 122, 124, 183, 14, 37的顺序依次查找,并将数据输入内存。
电梯问题需求分析文档(讨论稿)1.电梯的基本需求功能每一架电梯都有一个编号,以方便监控与维修。
每一架电梯都有一实时监控器,负责监控电梯上下,向电梯升降盒发送启动、制动、加速、减速、开关电梯门的信号。
若电梯发生故障,还应向相应的电梯负责人发送求救信号。
2.电梯按钮功能分析电梯(升降盒)上下来回地运动,电梯内部有一些按钮,每一个按钮代表一层楼,当按下按钮时,按钮的灯亮。
电梯沿某一方向运动,在将要到达某一层楼时,实时监控器判断电梯内是否有乘客要在此层楼下电梯,若有,则发送信号给电梯升降架,让其减速,同时让电梯在此层楼的电梯入口处平稳地停下,电梯停下后,实时监控器让电梯内相应的按钮灯灭,让乘客出电梯,然后关闭电梯门,而且继续朝原方向运动,直至到达当前运动方向上,有乘客要求到达的最后一层楼为止(即如:若该建筑物有50层,电梯当前正向上运动,若有乘客要求到达的最高楼层为30层,则电梯运动到30层之后,若30层以上没有乘客发出请求,则电梯可根据电梯内是否“有人”而向下运动或停止)。
除底层和顶层只有一个按钮外,每个楼层有两个按钮,分别指示上楼和下楼请求,当按下后,按钮灯亮,并向实时监控器发送请求,实时监控程序负责判断乘客的上下楼请求是否与电梯的当前运动方向一致,若不一致,则暂不受理此请求,此时按钮灯继续亮;若一致,则实时监控器将相应的上下请求按钮灯熄灭,并让电梯平稳地停在此层楼的电梯入口处,让相应的乘客入电梯,而后继续朝原方向运动。
若同时有两层或两层以上的楼发出请求,产生了冲突,则实时监控器调用冲突处理器进行抉择,受理其中的一个请求,并负责将各请求上下楼的按钮灯熄灭。
3.当电梯发生异常现象时的功能需求若电梯发生故障时,则实时监控器立即将电梯置为“不可用”状态,并且忽略任何请求,同时向相应的电梯管理人员发送求救信号。
电梯调度算法
目录一、算法设计 (1)1.算法思想 (1)2.运行环境 (1)3.问题描述 (1)二、实验步骤及方法 (1)三、源程序代码 (2)四、运行结果图 (15)五、课程总结 (15)一、算法设计1.算法思想本算法设计一部电梯,通过往返寻找方法,即先查询电梯运行方向的楼层是否存在有其他键被按下,有就继续往该方向运行,如果没有就查询电梯运行反方向的楼层是否有按键被按下,如果有电梯就改变方向,反方向运行。
如果没有电梯就停止在该楼层,30秒后如果没有任何键被按下,电梯就自动返回1楼停住。
同时,电梯乘客所去的楼层方向与电梯当前方向一致的话,则电梯优先搭载该乘客。
随后再搭载去反方向的乘客,以此实现电梯的升降操作。
2.运行环境本程序用java语言、eclipse平台编写。
3.问题描述电梯调度算法的基本原则就是如果在电梯运行方向上有人要使用电梯则继续往那个方向运动,如果电梯中的人还没有到达目的地则继续向原方向运动。
具体而言,如果电梯现在朝上运动,如果当前楼层的上方和下方都有请求,则先响应所有上方的请求,然后才向下响应下方的请求;反之。
二、实验步骤及方法1.由于鼠标单击每个楼层按钮时,需要作出相应的动作,所以我们使用jbutton按钮类,通过jbutton的单击事件来模拟楼层按钮并通过改变颜色来表示按钮是否被按下2.使用数组存储每个按钮的状态,1表示被按下,0表示未被按下。
用于电梯是否到达目标层的判断,及按钮颜色的刷新判断;3.“电梯”也是一个jbutton类,通过改变颜色来模拟电梯的运行,需要在此类中设置一个方向值,用0,1,2分别表示电梯的停止向上向下运行。
三、源程序代码import java.awt.Color;import java.awt.Container;import java.awt.Font;import java.awt.GridLayout;import java.awt.TextField;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.util.*;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.Timer;public class Lifta{/*** @param args*/public static void main(String[] args){Brick brick=new Brick();} }class Brick{ //方块类public int octime=0; //计算开关门事件。
python电梯调度算法
python电梯调度算法Python电梯调度算法是一种基于Python编程语言的技术,用于管理电梯运行和乘客乘坐的指令。
电梯调度算法的目标是最大化电梯的运行效率,并确保乘客在最短的时间内到达目的地。
在本文中,我们将逐步解释并介绍Python电梯调度算法的实现。
1. 算法优化的背景电梯调度是一个经典的优化问题,它涉及到了多个因素,如乘客的楼层请求、当前电梯位置以及电梯的负载情况等。
有效的电梯调度算法可以显著减少乘客的等待时间和电梯的运行时间。
在Python中使用合适的数据结构和算法可以更好地解决这个问题,并提高算法的性能。
2. 数据结构设计在实现电梯调度算法之前,我们需要定义一些合适的数据结构来存储电梯的相关信息。
这些数据结构可以包括电梯的状态、每层楼的请求队列、电梯内乘客信息以及乘客的目的地等。
2.1 电梯状态:电梯的状态可以用一个整数表示,例如0代表静止状态,1代表上行状态,-1代表下行状态等。
我们可以使用Python的变量来表示电梯的状态,并根据需要进行更新和修改。
2.2 请求队列:请求队列是一个存储电梯外部乘客请求的数据结构。
当乘客按下电梯按钮时,他们的请求将被添加到相应的请求队列中。
每个请求可以包含请求发出的楼层和请求的方向(上行或下行)。
我们可以使用Python的列表来表示请求队列,并使用适当的方法来插入和删除请求。
2.3 乘客信息:乘客信息包含每个乘客的目的地楼层。
当乘客进入电梯时,他们的目的地将被记录下来。
我们可以使用Python的字典来存储每个乘客的信息,并在需要时进行更新。
3. 电梯调度算法的实现3.1 初始化:在实现电梯调度算法之前,我们需要进行一些初始化操作。
这包括创建请求队列和初始化电梯的状态。
我们可以使用Python的列表和变量来实现这些初始化操作。
3.2 请求处理:当乘客按下电梯按钮时,他们的请求将被添加到请求队列中。
电梯调度算法需要从请求队列中选择一个请求来处理。
选择的依据可以有多种,例如最早发出的请求、最近发出的请求或者最近的请求方向等。
电梯调度算法
电梯调度算法1 有关结对编程的思考结对编程技术是指两位程序员肩并肩地坐在同⼀台电脑前合作完成同⼀个设计、同⼀个算法、同⼀段代码或同⼀组测试。
通过这次的结对编程练习我结识了李承晗同学,体验了结对编程这样⼀种新的编程⽅式。
在结对编程的过程中,对结对编程的体验总结如下:结对编程的优点如下:在独⽴设计、实现代码的过程中不免要犯这样那样的错误。
在结对编程中,因为有随时的复审和交流,程序各⽅⾯的质量便取决于⽔平较⾼的那⼀位。
这样,程序中的错误就会少得多,程序的初始质量会⾼很多,同时也省下很多以后修改、测试的时间。
这样⾼质量的产出能够给程序员,尤其是能⼒较低的(我)那⼀位带来⼀些信⼼。
⽽且,在结对编程的过程中两位程序员互相交流,相互学习传递经验,能够在结对编程的过程中学习到更多的东西。
但是结对编程也存在着⼀定的缺点:结对编程的过程中,代码⼀直处于“复审”的过程,即不断地审核,提⾼设计和编码质量的过程。
这样对于提⾼代码质量有很⼤的帮助,但是在互审的过程中也存在着⼀些问题:例如,复审的程序员对代码不及编写代码的程序员深⼊了解降低了复审的效果。
⽽且,这次结对编程是随机分组的,以前并不熟悉,这次结对编程的过程也会因为互相并不熟悉⽽产⽣⼀些缺少交流的问题。
结对编程队员的优缺点:李承晗学习态度⽐较好,且基础扎实,不懂就问,积极上进,就是有点内向,需要交流。
2 有关Information Hiding, interface design, loose couplingInformation Hiding:在⾯向对象⽅法中Information Hiding是通过对象的封装实现的。
隐藏对象的属性和实现细节,仅对外公开接⼝,控制在程序中属性的读和修改的访问级别;将抽象得到的数据和⾏为(或功能)相结合,形成⼀个有机的整体。
在程序设计过程中可以通过控制访问权限来实现。
例如⽤private,public,protected修饰属性和⽅法。
电梯优化调度方案
电梯优化调度方案引言随着城市的发展和人口的增长,高层建筑日益增多。
电梯在这些建筑中起到至关重要的作用,能够提供快捷便利的垂直交通方式。
然而,由于电梯容量和速度的限制,电梯运行效率和乘客体验往往无法得到最大化的优化。
因此,为了提高电梯的调度效果,并减少乘客的等待时间,电梯优化调度方案显得尤为重要。
电梯调度问题电梯调度问题是指如何合理安排电梯的运行路径和乘客的乘梯顺序,以最小化乘客的等待时间和电梯的运行时间。
这个问题在现实生活中非常常见,尤其是在高层建筑中,有时电梯调度不当甚至会导致拥堵和安全隐患。
传统的电梯调度算法传统的电梯调度算法主要包括先来先服务(FCFS)和最短寻找时间(SSTF)。
•先来先服务(FCFS)算法:按照乘客的到达时间先后,安排乘客乘坐电梯。
这种算法简单易实现,但是因为乘客所在楼层的分布可能不均匀,导致等待时间不合理。
•最短寻找时间(SSTF)算法:寻找距离电梯当前位置最近的乘客所在楼层,优先服务该乘客。
这种算法能够减少乘客的等待时间,但是在高峰期会导致部分乘客长时间等待。
遗传算法优化电梯调度遗传算法是一种模拟自然遗传机制的优化算法,通过模拟进化过程寻找优化问题的解。
在电梯调度问题中,遗传算法可以应用于优化乘客的乘梯顺序。
遗传算法主要包含以下几个步骤:1. 初始化种群随机生成一组初始的解,即一组乘客的乘梯顺序。
2. 适应度评估用一个适应度函数评估每个解的好坏程度,适应度函数可以用乘客的等待时间、电梯的行程时间等指标来衡量。
3. 选择操作根据适应度函数的结果选择部分优秀的解作为父代,用于产生下一代。
4. 交叉操作从父代中选择两个个体,并按照某种规则进行基因交叉,生成两个子代。
5. 变异操作对子代进行变异操作,即通过改变个体中的某些基因,产生新的解。
6. 更新种群将父代与子代合并,组成新的种群。
7. 终止判断根据设定的终止条件(如达到最大迭代次数或满足目标函数值要求),判断是否满足终止条件。
电梯调度算法的性能分析与改进
电梯调度算法的性能分析与改进电梯在现代生活中发挥着重要的作用,它们提供了便捷的垂直交通方式。
然而,在高层建筑和大型商场等繁忙的场所,电梯的调度算法是十分关键的。
一个高效的电梯调度算法不仅可以提高电梯的运行效率,减少乘客的等待时间,还可以降低能源消耗和维护成本。
本文将对电梯调度算法的性能进行分析,并提出改进方法。
首先,我们将分析现有的电梯调度算法。
目前常见的电梯调度算法有先来先服务算法(FCFS)、最近调度算法(LSD)、最短路程算法(SD)和最少积压任务算法(STC)等。
这些算法各有优劣,我们将对它们进行评估。
先来先服务算法是一种最简单的调度算法,它按照乘客发出请求的顺序依次执行。
这种算法简单、易于实现,但是乘客的等待时间比较长,尤其是在高峰时段,容易造成拥堵。
最近调度算法是一种根据电梯当前位置选择距离最近任务的算法。
这样可以减少乘客的等待时间,但是它存在贪心选择的问题,容易导致电梯进入某个区域多次,而忽略其他等待乘客的扶梯请求。
最短路程算法是一种根据电梯当前位置选择距离最短路程的算法。
这样可以最大化地减少每个乘客的等待时间,但是可能存在某些乘客等待时间过长的情况,因为算法只关注最短路程,忽略了其他因素如成本、乘客负载等。
最少积压任务算法是一种根据电梯的负载情况选择积压任务最少的算法。
这样可以避免电梯超载,但是容易导致某些乘客等待时间过长,且需要维护电梯每个大厦的积压任务数量,增加了实现的复杂性。
针对上述算法的不足之处,我们可以做出改进。
首先,我们可以将多个调度算法结合起来,根据不同的情况选择合适的算法。
比如在低峰时段,可以采用先来先服务算法来减少电梯负载和停留时间;在高峰时段,可以采用最短路程算法来最大限度地缩短乘客的等待时间。
其次,我们可以利用人工智能技术来优化电梯调度算法。
通过对电梯乘客需求的实时监测,可以根据乘客的楼层、目的地、人数等信息来调度电梯。
这样可以根据实际需求进行智能调度,提高电梯的运行效率和乘客的满意度。
电梯运行的算法
电梯运行的算法一、引言电梯是现代化城市生活中不可或缺的交通工具,其运行算法直接影响到电梯的运行效率和乘客的出行体验。
因此,研究电梯运行算法对于提高电梯运行效率和乘客出行体验具有重要意义。
二、传统电梯运行算法传统电梯运行算法主要包括以下几种:1. 队列调度算法:根据乘客按下楼层的顺序,将其加入到一个队列中,然后按照队列中的顺序进行调度。
该算法简单易实现,但是容易造成电梯空载或重载等问题。
2. 循环调度算法:在一定时间内,将电梯不断往上或往下移动一定距离,直到没有人按下按钮为止。
该算法可以避免空载或重载等问题,但是会导致等待时间过长。
3. 最短路径调度算法:根据乘客所在楼层和目标楼层之间的距离来确定电梯的运动方向和停靠楼层。
该算法可以最大限度地减少等待时间和路程长度,但是需要计算复杂。
三、智能电梯运行算法随着人工智能技术的发展,智能电梯运行算法逐渐成为研究热点。
智能电梯运行算法主要包括以下几种:1. 基于数据分析的调度算法:通过对乘客出行数据进行分析,预测乘客出行趋势和流量,从而优化电梯调度策略。
该算法可以实现精准调度,提高电梯的运行效率和乘客出行体验。
2. 基于机器学习的调度算法:通过对历史数据进行学习和训练,建立预测模型,并根据模型结果来制定电梯调度策略。
该算法可以自适应地调整调度策略,适应不同场景和需求。
3. 基于人工智能的调度算法:通过引入人工智能技术如神经网络、遗传算法等来优化电梯调度策略。
该算法可以实现更加精细化的调度,提高电梯的运行效率和乘客出行体验。
四、未来发展趋势随着科技水平的不断提高,未来电梯运行算法将会呈现以下发展趋势:1. 互联网+电梯:通过将电梯与互联网进行深度融合,实现电梯的智能化、自动化和可视化管理。
2. 多维度数据分析:在乘客出行数据的基础上,结合气象、交通等多种因素进行分析,从而更加精准地预测乘客出行趋势和流量。
3. 人机协同调度:通过引入人机协同调度技术,实现人工智能与人类智慧的有机结合,提高电梯运行效率和乘客出行体验。
BUAA_OO第二单元电梯调度作业总结
BUAA_OO第⼆单元电梯调度作业总结BUAA_OO 第⼆单元电梯调度作业总结⼀、作业总结这⼀次作业开始引⼊了线程的概念,并以电梯的形式进⾏考察。
三次作业⼀层层递进的关系展开,与第⼀单元每次作业都进⾏重构相⽐,这⼀单元的电梯作业代码能够很好的得以复⽤,整体写下来很好地体会到了⾯向对象编程时有⼀个良好的建构设计的优势所在。
关于多线程设计模式这三次的作业是⼀个很典型的⽣产者消费者模型,输⼊部分作为⽣产者,电梯根据需求进⾏调度属于消费者的部分,另外需要⼀个共享队列来保证⽣产者和消费者之间的通信。
但由于本单元是我第⼀次进⾏多线程的编写,所以在刚开始我虽然不知道如何下⼿,但⾄少我知道了⾸先要构造⽣产者、托盘、调度器以及消费者,这相当于有了⼀个基本的⼤⽅向。
另外,作为资源共享区的tray⼀开始⼗分让我头疼,因为我知道要保证我们的tray是线程安全的,因为我们可能会同时要往⾥放东西,⼜要从⾥⾯取东西;另外,如果共享区没有⽣产者⽣产的需求,那么消费者需要等待⽣产者⽣产,这就涉及到了wait()、notifyall()的使⽤,下⾯我将具体分析。
SOLID分析SOLID设计原则中:SRP原则在elevator类中体现较差,本来内部调度单独采⽤了⼀个Dispatch类与elevator类进⾏交互,两者实际上完全耦合在⼀起,没有很好的做到功能上的区分,最后将Dispatch类的⽅法集成在elevator类中了。
这两个类中⽅法规模及其庞⼤,在Metrics分析中疯狂飘红。
OCP原则在三次作业中有⼀定的体现,后⾯的两次作业都是多电梯,加⼊Controller类进⾏调度分配任务后实际上都是第⼀次作业的单电梯在执⾏任务,第⼀次作业基本没有改变,实现了第⼀次的程序的向外拓展,开闭原则得到了体现。
由于本单元未采⽤⽗类继承和接⼝实现所以没有LSP、ISP和DIP原则的体现。
第⼀次作业第⼀次作业是三次作业中上⼿最为困难的⼀次,正如上⽂所述,由于对多线程设计的不熟悉,对⽣产者消费者模式也处于⼀知半解的状态,我做这次作业花费了较多的时间。
多路电梯调度算法(二)
输入:乘客请求事件,所有电梯状态输出:电梯命令其中,电梯状态电梯命令乘客请求事件最高层数添加电梯停时响应事件X楼上行请求剩余负载取消电梯停时响应事件X楼下行请求运行方向(上、下、静止)E电梯内有乘客请求去Y楼能否到达X楼开往X楼开往(静止时:上、下)设置开往方向(上、下)算法思想一、统计每层楼的“剩余负载”转变情形若是0、1层“剩余负载”的平均增量大于其它楼层,那么是下班若是0、1层“剩余负载”的平均增量小于其它楼层,那么是上班二、流程:a. 电梯按环形线路运行,向上至顶,再向下至底,再向上至顶,。
b. 电梯停时,按a从近向远扫描,若是在某一站,有必要停的话(参考c,d),就开往那一站。
c. 若是有乘客请求在E电梯的X层停,那么标志E电梯需要在X层停。
d. 若是有乘客请求上/下行,下班时,标志一个电梯需要在那停。
上班时,标志所有电梯都需在那停。
e. 若是c、d发生,执行b算法很简单,但模式识别思想很赞。
算法很粗糙,能够有很多优化。
比如,上班时,环形线路并非是最正确的,咱们已经证明内线、外线的模式更佳。
即是说,适当的时候能够拒绝去高层的请求。
下班时,如何选择电梯来响应乘客上/下行的请求。
咱们的方案很粗糙:电梯ID==楼层*电梯总数/(楼层高度+1)。
更精细的方案是考虑电梯的“剩余负载”,或更精细地依照楼层远近绑定电梯和楼层。
但因为时刻关系没有实现他们。
有爱好的读者能够尝试。
相关工作按钮为了过滤重复请求,咱们引入了“Button”(这更应该在电梯中实现)IButton-Press(ID)-UnPress(ID)-IsPressed(ID)-NotPressed(ID)每一个电梯有个Button,记录需要停的楼层四个电梯共享一个Button,记录上行、下行的情形。
最正确算法在没有新的外部请求的情形下,咱们找取得了最正确调度算法(动态计划法)目标:让电梯里的人为零转移:电梯在任何状态下,只有两种选择,上行一层,或下行一层。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.1先来先服务算法(FCFS)
先来先服务(FCFS-First Com e First Serve)算法,是一种随即服务算法,它不仅仅没有对寻找楼层进行优化,也没有实时性的特征,它是一种最简单的电梯调度算法。
它根据乘客请求乘坐电梯的先后次序进行调度。
此算法的优点是公平、简单,且每个乘客的请求都能依次地得到处理,不会出现某一乘客的请求长期得不到满足的情况[12]。
这种方法在载荷较轻松的环境下,性能尚可接受,但是在载荷较大的情况下,这种算法的性能就会严重下降,甚至恶化。
人们之所以研究这种在载荷较大的情况下几乎不可用的算法,有两个原因:
(1)任何调度算法在请求队列长度为1时,请求速率极低或相邻请求的间隔为无穷大时使用先来先服务算法既对调度效率不会产生影响,而且实现这种算法极其简单。
(2)先来先服务算法可以作为衡量其他算法的标准。
1.2最短寻找楼层时间优先算法(SSTF)
最短寻找楼层时间优先(SSTF-Shortest Seek Time First) [14]算法,它注重电梯寻找楼层的优化。
最短寻找楼层时间优先算法选择下一个服务对象的原则是最短寻找楼层的时间。
这样请求队列中距当前能够最先到达的楼层的请求信号就是下一个服务对象。
在重载荷的情况下,最短寻找楼层时间优先算法的平均响应时间较短,但响应时间的方差较大,原因是队列中的某些请求可能长时间得不到响应,出现所谓的“饿死”现象。
1.3扫描算法(SCAN)
扫描算法(SCAN)是一种按照楼层顺序依次服务请求,它让电梯在最底层和最顶层之间连续往返运行,在运行过程中响应处在于电梯运行方向相同的各楼层上的请求。
它进行寻找楼层的优化,效率比较高,但它是一个非实时算法。
扫描算法较好地解决了电梯移动的问题,在这个算法中,每个电梯响应乘客请求使乘客获得服务的次序是由其发出请求的乘客的位置与当前电梯位置之间的距离来决定的,所有的与电梯运行方向相同的乘客的请求在一次电向上运行或向下运行的过程中完成,免去了电梯频繁的来回移动[2]。
扫描算法的平均响应时间比最短寻找楼层时间优先算法长,但是响应时间方差比最短寻找楼层时间优先算法小,从统计学角度来讲,扫描算法要比最短寻找楼层时间优先算法稳定。
1.4 LOOK 算法
LOOK算法[18]是扫描算法的一种改进。
对LOOK算法而言,电梯同样在最底层和最顶层之间运行。
但当LOOK算法发现电梯所移动的方向上不再有请求时立即改变运行方向,而扫描算法则需要移动到最底层或者最顶层时才改变运行方向。
1.5 SAFT 算法
SATF(Shortest Access Time First)[15,19]算法与SSTF算法的思想类似,唯一的区别就是SATF算法将SSTF算法中的寻找楼层时间改成了访问时间。
这是因为电梯技术发展到今天,寻找楼层的时间已经有了很大地改进,但是电梯的运行当中等待乘客上梯时间却不是人为可以控制。
SATF算法考虑到了电梯运行过程中乘客上梯时间的影响。
2.1最早截止期优先调度算法
最早截止期优先(EDF-Earliest Deadline First)[16]调度算法是最简单的实时电梯调度算法,它的缺点就是造成电梯任意地寻找楼层,导致极低的电梯吞吐率。
它与FCFS调度算法类似,EDF算法是电梯实时调度算法中最简单的调度算法。
它响应请求队列中时限最早的请求,是其它实时电梯调度算法性能衡量的基准和特例。
2.2 SCAN-EDF 算法
SCAN-EDF[16]算法是SCAN算法和EDF算法相结合的产物。
SCAN-EDF算法先按照EDF算法选择请求列队中哪一个是下一个服务对象,而对于具有相同时限的请求,则按照SCAN算法服务每一个请求。
它的效率取决于有相同deadline 的数目,因而效率是有限的。
2.3 PI 算法
PI(Priority Inversion)[16]算法将请求队列中的请求分成两个优先级,它首先保证高优先级队列中的请求得到及时响应,再搞优先级队列为空的情况下在相应地优先级队列中的请求。
2.4 FD-SCAN 算法
FD-SCAN(Feasible Deadline SCAN)[17]算法首先从请求队列中找出时限最早、从当前位置开始移动又可以买足其时限要求的请求,作为下一次SCAN的方向。
并在电梯所在楼层向该请求信号运行的过程中响应处在与电梯运行方向相同且电梯可以经过的请求信号。
这种算法忽略了用SCAN算法相应其它请求的开销,因此并不能确保服务对象时限最终得到满足。
3 电梯调度的高水平研究
以上两个小结介绍了几种在目前本人的能力上能进行研究的、简单的电梯调度算法。
但是并不是说目前电梯调度只发展到这个层次。
目前电梯的控制技术已经进入了电梯群控的时代。
随着微机在电梯系统中的应用和人工智能技术的发展,智能群控技术得以迅速发展起来。
由此,电梯的群控方面陆续发展出了一批新方法,包括:基于专家系统的电梯群控方法、基于模糊逻辑的电梯群控方法、基于遗产算法的电梯群控方法、基于胜景网络的电梯群控方法和基于模糊神经网络的电梯群控方法。
4 电梯问题的需求分析
4.1 电梯的初始状态
本人设置的电梯的初始状态,是对住宅楼的电梯的设置。
(1)建筑共有21层,其中含有地下一层(地下一层为停车场及货物运送场所)。
(2)建筑内部设有两部电梯,编号分别为A梯、B梯。
(3)电梯内部有23个按钮,其中包括开门按钮、关门按钮和楼层按钮,编号为-1,1,2,3,4……20。
(4)电梯外部含有两个按钮,即向上运行按钮和向下运行按钮。
建筑顶层与地下一层例外,建筑顶层只设置有向下运行按钮,地下一层只设置有向上运行按钮。
(5)电梯开关门完成时间设定为1秒。
电梯到达每层后上下人的时间设定为8秒。
电梯从静止开始运行到下一层的时间设置为2秒,而运行中通过一层的时间为1秒。
(6)在凌晨2:00——4:30之间,如若没有请求信号,A梯自动停在14层,B梯自动停在6层。
(7)当电梯下到-1层后,如果没有请求信号,电梯自动回到1层
4.2 电梯按钮功能
电梯内部的楼层按钮:电梯内部对应每一个楼层的按钮成为楼层按钮,即本章第一结提到的编号为-1,1,2,3,4……20的按钮。
当乘客进入电梯后按下楼层按钮,此按钮显示灰色,代表不可以用。
这样就表示乘客将要去往此层,电梯将开往相应层。
当电梯到达该层后,按钮恢复可以使用状态。
电梯内部开门按钮:当电梯达到乘客想要去往的某楼层后,乘客需要准备离开电梯,当电梯停稳后,乘客可以按下开门按钮,电梯门将打开,让用户离开。
如若电梯到了乘客曾经按下的楼层,但是无乘客按开门按钮,电梯将自动在停稳后1秒后自动开门。
电梯内部关门按钮:当所有想要乘坐电梯的乘客都进入电梯以后,准备让电梯开始运行的时候,乘客需要按下关门按钮,让电梯门关闭,使电梯进入运行状态。
设置电梯的自动关门时间为8秒。
电梯外部向上按钮:此按钮表示上楼请求,当按下此按钮时,如果电梯到达按下此按钮的楼层,且电梯运行方向是向上的,那么电梯响将停下,并在电梯停稳之后自动开门,此请求被响应后,取消此请求信号。
电梯外部向下按钮:此按钮表示下楼请求,当按下此按钮时,如果电梯到达按下此按钮的楼层,且电梯运行方向是向下的,那么电梯响将停下,并在电梯停稳之后自动开门,此请求被响应后,取消此请求信号。