群控电梯控制方案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
群控电梯控制方案设计和优化
研究小组:
030710107 周扬、
030710125潘天亮、
030710113 于启炟
二OO九年十一月八日
【课题前景】
随着人民生活水平的提高和城市建筑的高速发展,楼宇需要配置多台电梯以提高交通服务质量和可靠性。
然而,仅使电梯数量的增加不仅不能完全满足现代楼宇的多种要求,还会带来诸如环境污染、能源损耗、运营效率低下等问题。
电梯群控系统所要解决的是一个复杂的、具有非线性和不确定性的多目标随机决策问题。
因此,现代建筑多采用电梯群控技术来调度电梯群的运行,在提高系统服务质量和运营效率的同时降低能耗。
i
【电梯群控系统的多目标性】
实现电梯的多功能优化,找到时间最优和路程最优的最佳契合点。
从而达到节省时间和能耗的效果。
(1) 平均候梯时间要求短
候梯时间是指从乘客按下层站呼梯按钮直到所派电梯到达此层乘客进入轿厢所经过的时间。
在群控电梯控制中,传统的概念集中于解决“减少候梯时间”这一指标。
平均候梯时间是所有候梯时间的平均值,它是评价电梯群控系统性能的重要指标。
(2)电梯能耗
电梯系统的能耗越少,其服务成本就越低。
电梯的运行距离与能耗有着密切的联系,但在很多情况下能耗评价指标并未被列入考
虑之列。
【实验过程】
(1)分配二个同学到图书馆和网络上查找相应的文件介绍并整理出有用的文件资料,到南航一号楼采集必要的数据并调查电梯的运行情况是否良好。
(2)整理所查找到的文件资料,探讨初期实验模型,确定算法,并编写群控电梯的仿真程序,并输入数据得到目标函数值。
(3)结合具体情况,分析比较目标函数值,在基础模型的基础上加以改进,得出优化模型。
(4)总结试验,撰写实验报告。
【初步解决方案】
一、问题描述
某大楼共有十层楼,设有载客电梯一部,以南航一号楼6号电梯为例。
设计一算法以实现乘客平均侯梯时间最短、耗能最少。
二、模型简化
1、电梯可到达各层。
2、仿真开始前,电梯静止为空梯,且停靠楼层为任意的。
3、仿真开始后,有若干人在不同楼层开始乘梯活动,且所在楼层和目标楼层都是随机输入的。
4、不考虑电梯超载情况,且每次呼叫每楼层只有一人。
5、电梯运行速度为3秒/层,电梯平均每秒耗能600w,乘客上下进入轿厢的是假忽略不计,如需修改可以在程序里面加以修改。
6、电梯在运行过程中运行方向不受其他信号的改变。
三、调度原则:
距离优先原则
四、控制目标
优化平均等待时间,减少电梯能耗即满足电梯运行路程D最短的同时也要使得电梯运行时间T的取值要尽量的小。
五、基础模型算法分析与程序设计
1.程序介绍
(1)程序初始化
这是一个实现电梯调度的算法,以距离优先原则(详细见附件一)。
电梯初始停靠在X层,X=L.lift[0];
L.list[11]用来存储各层的目的层
L.flag[11]用来标识各楼层的响应情况:
(2)算法设计
定义调度函数void Control(Lcontrol &L); 找出离X最近的响应层,用flag1表示。
①若flag1>=X,则电梯先向上。
在向上的过程中找出X---10层中有响应的楼层,并求出它们目的层中的最大值up11作为电梯到达的最高层,在上升过程中,在有向上响应的楼层及其目的楼层停。
到达up11后,在从up11下到第1层,在向下过程中,在有向下响应的楼层及其目的楼层停。
下至1层后再向上运动,一直到最高目的层up22(该目的层位1---X层中有向上响应的楼层的目的层的最大值)。
②若flag1<X,则电梯先向下。
从X层下至1层,在此过程中,在有向下响应的楼层及其目的楼层停。
到达1后,在从1升至up11,在向上过程中,在有向下响应的楼层及其目的楼层停。
上至up11层后再向下运动,一直到1层,在有向下响应的楼层及其目的楼层停。
2.举例示意
楼层响应标识目的层
2 1 7
1 1 5
注释:红色表示向上、黄色表示向下、初始停靠层为绿色;
1代表向上0代表没有响应-1代表向下。
↓输入输出显示
3、方案的检验
基础模型的调度算法,运
行结果和我们分析的一致,符合优化群控电梯控制的原则。
六、优化模型模型算法分析与程序设计
在基础模型基础上,我们计划研究两部电梯的控制,实现优化设
计。
主要从奇偶层控制和高低层控制两方面去设计,最后将两者的性能进行比较,初步预计,这两种方案在调度上面还是存在很多问题。
最后,把电梯的承载能力也考虑在内,设计一种智能调度。
【实验总结】
但是由于初期研究方案不当,花费过多的时间去建立电梯运行的基于模糊算法和遗传算法的数学模型,走了弯路,导致最后没能实现课题的全部研究。
同时,本次试验又一次的跟我们展示了C++语言程序的重要性,同时也让我们了解了仿真编程的实际应用性,我们在实践的时候不仅复习了C++的编程而且还接触到了MATALAB等这些新的软件,最重要的是这次实践是我们第一次把我们所学的东西运用到了实际生活中,让我们对我们所学的知识有了更深层次的理解。
以后如果有机会,在次基础上可以尝试考虑多部电梯同时运行的优化控制设计。
【参考文献】
1.《现代电梯构造和使用》
张崎主编北京交通大学出版清华大学出版社
2.《电梯群控技术》
付国江中国电力出版社
3.东北大学硕士学位论文
群控电梯多目标智能最优调度算法的研究林琳
附件一:电梯调度优化算法程序
#include<iostream.h>
#define S 3 //电梯运行速度为S秒/层,
#define w 600 //电梯平均每秒耗能
int t; //全局变量,为电梯运行总时间
int m; //全局变量,为侯梯总人数
typedef struct Lift
{
int flag[11]; //各层响应标志,若为up则其值为1,若为down,则其值为-1,否则为0
int lift[11]; //各层的目的层,若无响应则目的层为0
}Lcontrol;
void Control(Lcontrol &L);//调度函数
//主函数
void main()
{
Lcontrol L;
int i;
cout<<"电梯最初停靠层为:"<<endl;
cin>>L.lift[0];
cout<<"其相应控制条件为:"<<endl;
cin>>L.flag[0];
if(L.flag[0]!=0)
{
cout<<"输入不符合条件!该层控制条件必须为0!请从新输入:"<<endl;
cin>>L.flag[0];
}
cout<<endl;
for(i=1;i<=10;i++)
{
cout<<"第"<<i<<"层的控制条件为:";
cin>>L.flag[i];
cout<<"其相应目的层为:";
cin>>L.lift[i];
if(L.flag[i]==1)//电梯向上,则目的层数必须大于该楼层if(L.lift[i]<=i)
{
cout<<"输入不符合条件!请从新输入:"<<endl;
cout<<"其相应目的层为:";
cin>>L.lift[i];
}
if(L.flag[i]==-1)//电梯向下,则目的层数必须小于该楼层if(L.lift[i]>=i)
{
cout<<"输入不符合条件!请从新输入:"<<endl;
cout<<"其相应目的层为:";
cin>>L.lift[i];
}
cout<<endl;
}
Control(L);
}
//调度函数
void Control(Lcontrol &L)
{
int
begin,k,j,i,n1,m1,n2,m2,up11,up22,flag1,up1[10],up2[10],list[3 0],stop[30]={0};
if(L.flag[1]!=0 )//找距离电梯最初停靠层最近的响应层flag1 if(1>L.lift[0])
begin=1-L.lift[0];
else
begin=L.lift[0]-1;
for(j=2;j<=10;j++)
{
if(L.flag[j]!=0)
if(j>=L.lift[0])
k=j-L.lift[0];
else
k=L.lift[0]-j;
if(k<begin)
{
k=begin;
flag1=j;
}
}
// cout<<"距离电梯最初停靠层最近的楼层为:"<<flag1<<endl; /**************************************************************** ****
/****************************************************************
****
if(flag1>=L.lift[0])//若距离电梯最初停靠层最近的响应层在最初停靠层之上,则电梯先向上
{
i=0;
for(j=L.lift[0];j<=10;)//将L.lift[0]层至10层中有响应的楼层的目的层存放在up1[10]中
if(L.flag[j]==1)
{
up1[i]=L.lift[j];
i++;
j++;
}
else if(L.flag[j]==-1)
{
up1[i]=j;
i++;
j++;
}
else
j++;
n1=i;//有响应的楼层数
/**************************************************************** **************************/
up11=up1[0];
for(j=0;j<n1;j++)//找出停靠的最高楼层up11
if(up1[j]>=up11)
up11=up1[j];
i=0;
for(j=L.lift[0];j<=up11;j++)//电梯向上至最高层,中途有向上的则在该更及其相应目的层停靠
if(L.flag[j]==1)
{
list[i]=j;
list[i+1]=L.lift[j];
i+=2;
}
k=i;//k为向上过程中停靠的楼层数
/********************************************************/ for(j=up11;j>=1;j--)//电梯从最高层向下至第一层,中途有向下的则在该更及其相应目的层停靠
if(L.flag[j]==-1)
{
list[k]=j;
list[k+1]=L.lift[j];
k+=2;
}
m1=k;//向下的楼层数
/*********************************************************/ for(j=1;j<=L.lift[0]-1;j++)//电梯向上至最高层目的层,中途有向上的则在该更及其相应目的层停靠
if(L.flag[j]==1)
{
list[m1]=j;
list[m1+1]=L.lift[j];
m1+=2;
}
m2=m1;
//求电梯最后停靠层up22
i=0;
for(j=1;j<=L.lift[0]-1;j++)//将1层向上
if(L.flag[j]==1)
{
up2[i]=L.lift[j];
i++;
}
up22=up2[0];
for(j=0;j<n2;j++)//找出停靠的最高楼层
if(up2[j]>=up22)
up22=up2[j];
t=((up11-L.lift[0])+(up11-1)+(up22-1))*S;//计算运行总时间
cout<<"电梯运行总时间为:"<<t<<"秒"<<endl;
}
/*********************************************************/
/*********************************************************/ else//若距离电梯最初停靠层最近的响应层在最初停靠层之下,则电梯先向下
{
i=0;
for(j=L.lift[0];j>=1;j--)//向下至第一层
if(L.flag[j]==-1)
{
list[i]=j;
list[i+1]=L.lift[j];
i+=2;
}
/*********************************************************/ i=0;
for(j=1;j<=10;j++)//将1至10层中有响应的楼层的目的层存放在up2[10]中
if(L.flag[j]==1)
{ up1[i]=L.lift[j];
i++; }
else if(L.flag[j]==-1)
{ up1[i]=j;
i++;}
n1=i; //向上的楼层数
up11=up1[0];
for(j=1;j<n1;j++)//找出停靠的最高楼层up11
if(up1[j]>=up11)
up11=up1[j];
for(j=1;j<=up11;j++)//电梯向上至最高层,中途有向上的则在该更及其相应目的层停靠
if(L.flag[j]==1)
{ list[n1]=j;
list[n1+1]=L.lift[j];
n1+=2;}
m1=n1;
/*********************************************************/ for(j=up11;j>=L.lift[0];j--)//向下
if(L.flag[j]==-1)
{ list[m1]=j;
list[m1+1]=L.lift[j];
m1+=2;}
t=((L.lift[0]-1)+2*(up11-1))*S;//计算运行总时间
cout<<"电梯运行总时间为:"<<t<<"秒"<<endl;
}
for(i=1;i<=10;i++)
{ if(L.flag[i]!=0) m++; }
float ts; ts=t/m;
cout<<"正在侯梯的人数为"<<m<<"人"<<endl;
cout<<"平均侯梯时间为"<<ts<<"秒。
"<<endl;
cout<<"总耗能为"<<w*t<<"焦耳。
"<<endl;
}
i。