APP下载

基于O riginPro的交通流NaSch模型的仿真开发

2010-03-23

华东交通大学学报 2010年2期

胡 辉

(1.华东交通大学经济管理学院,江西南昌330013;2.北京交通大学交通运输学院,北京100044)

作为数据、图形处理的一种有力工具,OriginPro在教学科研、工程技术中的应用日益受到青睐[1-4]。除了利用软件的菜单进行数据分析和图形绘制外,其内嵌的Origin C语言使得应用者能灵活地根据自己的需求开发出相应的程序以解决自己的问题,如软件中自带的元胞自动机模型和图形的边缘检测处理等程序。

在交通流系统仿真领域,1992年提出的NaSch模型一直被认为是基于元胞自动机的交通流建模的经典模型,后续的各种改进模型大多以此为基础来分析解释实际中的各种交通现象。该模型的实现方法有很多(如用Visual C++把模拟数据存储在文件中),但模型仿真的两个主要输出结果图:流量密度图和时空相位图在不少研究[5-7]中是通过OriginPro导入数据文件来完成实现的。因此为充分利用OriginPro(以下介绍的OriginPro均为7.5版本)内在的强大功能,一次性地完成建模仿真的任务,我们在分析OriginPro软件体系的基础上,充分挖掘了软件潜在的强大功能,以NaSch模型为例首次应用软件中内嵌的Origin C语言和相关开发工具进行二次开发实现了模型的仿真输出。

1 Origin C及Origin Pro辅助开发工具

OriginPro的二次开发有两种方法:一是使用脚本语言Lab Talk,二是应用Origin C。在实际应用中,由于脚本语言本质上是一种解释性语言,程序执行速度慢,所以一般从性能角度会选择编译性的Origin C。除了支持几乎完全的ANSIC语言语法及C++和C#的特征子集外,在OriginPro中Origin C包含两方面的内容:

(1)全局函数。涉及到数据分析Analysis、基本输入/输出Basic I/O、字符/字符串处理、COM对象、绘图Plot等26个方面,用户在程序中可直接调用这些函数。

(2)类。包含应用程序通信类Application Communication(目前仅支持Matlab)、复合数据类(如Curve,Matrix,Dataset,Vector等)、内部Origin类(如Project,Worksheet,Datasheet,Column等)、系统类(如file,Registry等)、用户接口控制类(如DeviceContext,progressBox,waitCursor,Window等)。

图1是内部Origin类的关系表示,绝大多数类的基类是OriginObject。

除利用Origin C提供的函数和类外,OriginPro还提供了一些工具帮助用户进行二次开发,主要有以下5类辅助开发工具。

图1 O rigin内部类结构图

(1)COM组件客户端编程。与其他的应用程序如Excel,Word进行交互,从数据库Access,SQL Server等读入数据等。

(2)自动化服务器编程。在支持COM编程的应用程序如Excel中作为服务器进行交互。

(3)对话框构造器Dialog Builder。在标准控件(如Edit,Button)的基础上支持各种复杂的人机界面,适应用户的特定需求。

(4)ActiveX控件。在对话框构造器中可插入ActiveX控件,使得应用程序的适应性更强。

(5)应用程序加密保护。为了保证开发者的知识产权,可对应用程序的源代码加密。使用者可运行程序,但无法看到源程序。

2 基于OriginPro的NaSch模型的设计

2.1 NaSch元胞自动机模型

作为对184号元胞自动机模型的推广,1992年Nagel和Schreckenberg提出了著名的NaSch模型。在这一模型中,时间、空间、速度都被整数离散化。道路被划分为离散的元胞,每个元胞或者是空的,或者是被一辆车占据,每辆车可取0,1,2,…,vmax,vmax为最大速度。相对于184号规则,NaSch模型的主要改进之处是引入了慢化概率和最大车速不再是1。在t→t+1的过程中,模型按如下规则并行演化:

(1)加速:vn→min(vn+1,vmax),对应于现实中司机期望以最大速度行驶的特性。

(2)减速:vn→min(vn,dn),驾驶员为了避免和前车发生碰撞而采取减速的措施。

(3)随机慢化:以概率p,vn→max(vn-1,0),由各种不确定因素造成的车辆减速。

(4)运动:xn→xn+v,车辆按调整后的速度向前行驶。

xn,v分别表示n车的位置和速度;dn=xn+1-xn-l表示n车和前车n+1之间空的元胞数;l表示车辆长度。

2.2 NaSch模型的分析设计

为了实现模型的仿真,从以下3个方面对模型进行分析设计。

(1)核心类Lane。从面向对象的角度看,Lane类包括的属性有车道长度、车长、最大速度、慢化概率、车流密度、车流量、平均速度、车道状态等,包括的方法有更新、车流量与平均速度及车道速度的获得等。其中,基于上述规则的更新方法是类的关键,以下代码说明了如何实现周期条件下的更新规则。

(2)界面输入。为便于控制相关的参数,如车道长度、车长、慢化概率、车流密度等参数,需要设计相应的话框获得用户的输入。此外,考虑到程序运行的时间较长,加入OriginPro中的Progresss Box和Wait Cursor控件提示用户程序的运行情况。

(3)结果输出。为一次性得到仿真的输出,设计两个函数获得输出结果。其一是流量密度关系图,主要是利用OriginPro的内嵌类Worksheet、Graphlayer、Curve等获得仿真的模拟数据,并把这些数据通过调用相关类的方法实现图形的输出。其二是时空相位图,主要是利用Matrix等内嵌类获得不同时间空间的车道数据,然后以图形方式展现。

3 NaSch模型的仿真实现

通过以上的分析设计,借助Origin C及OriginPro的辅助可开发工具,从分析设计的3个方面实现了模型的仿真。

3.1 核心类Lane的实现

进入OriginPro的Code Builder窗口,建立一个新的c或cpp文件,用关键词class定义Lane,并实现其中的方法,具体过程与一般的C++类似。

3.2 界面输入的实现

虽然OriginPro提供了简单对话框,但对于复杂的人机界面设计,需要利用前面介绍的Dialog Builder。应用Dialog Builder的前提是Visual C++应用程序向导中有“Origin Dialog AppWizard”,一般只要安装完OriginPro,Visual C++的应用程序向导中会有此项,否则需要手工导入软件中自带的ODialog.awx文件。图2是计算流量密度关系图的界面输入结果,通过输入相关参数,对模型的主要参数进行设置。

3.3 输出结果及其意义

NaSch模型的仿真结果主要有两个即流量密度图和时空相位图。为此,定义两个函数NaSch-DensityFlux()和NaSh-TimeSpace()实现模型仿真结果的输出,图3是程序执行NaSch-DensityFlux运行过程中的情况。图4是分别执行这两个程序后的输出结果,左边是流量密度图,右边是时空相位图,模型参数与设置界面中一样,时空相位图的时间步为50000到50500。其中,流量-密度图表明路段密度与路段流量的关系并非简单的线性关系:开始没有车辆时,路段密度为0,流量也为0;而随着路段密度的增大,路段流量也逐渐增大,但当路段密度大约为0.22辆/单位长度时,路段流量达到最大约为0.45辆/单位时间,此后随之递减,当路段密度为1(也即路段上全充满车辆时),流量为0,意味着路段完全拥堵,车辆无法前行,这在一定程度上反映了实际中的流量-密度关系。而时空相位图中颜色较深的则反映了随着时间的递进,路段上出现了拥挤现象,而且拥挤在往后传播,这也与实际中通过航拍发现路段的拥挤现象类似[5],说明采用的模型能模拟出现实交通中拥堵的形成。

图2 NaSch模型参数设置界面

图3 NaSch模型运行过程

图4 NaSch模型运行仿真结果

4 结束语

深度挖掘OriginPro功能自动化实现交通流中的元胞自动机建模是一次新的尝试,相信他的应用对于类似系统的仿真研究(如其他的元胞自动机模型)有一定参考价值。从实际应用结果来看,虽然达到了要求,但程序运行的时间相对于用Visual C++编写的程序时间长了不少。因此,可以改进的方向应是如何在Visual C++类似的环境中调用OriginPro的对象方法来实现结果输出,或封装成独立的模块供其他应用程序(如一些专业的交通规划与管理软件)调用。

[1] 常彬彬,刘山洪,韩健.Origin软件在隧道监控量测数据处理中的应用[J].重庆交通大学学报:自然科学版,2008,27(2):221-224.

[2] 覃贵菊.用OriginC编程自动化处理制动试验数据[J].铁道机车车辆,2005,25(5):28-30.

[3] 金淑华,秦艳芬,贺梅英.Origin软件在大学物理实验数据处理中的应用[J].宁波工程学院学报,2008,20(2):4-7.

[4] 刘洋,郭莹.基于Origin软件的土工试验数据处理[J].山西建筑,2006,32(5):336-337.

[5] 贾斌,高自友,李克平,李新刚.基于元胞自动机的交通系统建模与模拟[M].北京:科学出版社,2007.