基于Erlang的人工交通系统实现方法与流程

文档序号:11146022阅读:340来源:国知局
基于Erlang的人工交通系统实现方法与制造工艺

本发明涉及交通系统技术领域,尤其是涉及一种基于Erlang的人工交通系统实现方法。



背景技术:

交通是关系社会发展的重要基础设施,世界各国都投入巨大的人力和物力加以建设。但发展过程中出现了各种问题,如交通拥堵、事故频发等。作为一种重要的研究手段,交通仿真方法试图在建立传统数学模型的基础上,对交通系统进行还原分析;然而,随着城市化进程的加快和汽车拥有量的迅猛增长,交通系统的规模越来越大,与人口、自然、政治、经济等要素的相互作用日益复杂,难以建模和分析,因此这种试图通过对交通部分行为的单独分析而完全确定整体交通的行为的研究思路也正变得日渐困难。在此背景下,有学者于2003年提出了人工交通系统的概念。

人工交通系统是传统微观交通仿真系统的延伸。人工交通系统的基本思想是利用基于代理的建模和模拟方法,将现实交通系统中的每个参与者表示成具有一定自主性、社会性、学习性、主动性和移动性的代理,然后通过代理与代理、代理与环境、环境与环境的相互作用,自底向上“涌现”出各种复杂的交通现象。实践表明,结合人工交通系统理论和计算实验方法,不仅能够方便地分析交通系统的各种复杂行为,对各种决策进行量化的评估,而且还能够设计和实施各种在现实中无法进行的试验,找出影响交通系统的可控因素朝着既定的目标实施(实验)控制策略。在人工交通系统的理想模型中,交通行为的产生和演化是自我完备的,而且为了体现交通的整体特性,系统还包括了能够对交通产生影响的社会环境相关子系统,如物流、天气、法规等;因而其建模的对象更为广泛,对象间的交互更为频繁,不可避免地也带来更大的计算量,也更需要有类似并发、分布式这类高性能的计算手段。

有鉴于此,特提出本发明。



技术实现要素:

为了解决现有技术中的上述问题,即为了解决如何使人工交通系统具有并发和分布式运行的能力,高效利用计算资源的技术问题而提供一种基于Erlang的人工交通系统实现方法。

为了实现上述目的,提供以下技术方案:

一种基于Erlang的人工交通系统实现方法,所述方法包括:

获取交通场景信息以及个体的信息、状态和交通行为;

设定操作进程、区域进程和个体进程;其中,所述操作进程用于控制所述人工交通系统的运行;所述区域进程用于控制某一区域并管理所述区域内的所有个体同时为各所述个体提供环境信息,还用于统计并模拟所述交通场景中所述个体的信息和状态;所述个体进程用于根据所述环境信息模拟各所述个体的交通行为;一个所述操作进程管理一个或多个所述区域进程;一个所述区域进程生成和管理一个或多个所述个体进程;

基于所述交通场景信息以及所述个体的信息、状态和交通行为,利用所述操作进程、所述区域进程和所述个体进程,利用Erlang进行仿真,得到所述交通场景的路况。

进一步地,所述基于所述交通场景信息以及所述个体的信息、状态和交通行为,利用所述操作进程、所述区域进程和所述个体进程,利用Erlang进行仿真,得到所述交通场景的路况,具体包括:

所述操作进程向所述区域进程发送初始化指令,所述初始化指令包含区域编号;

所述区域进程接收到所述初始化指令后,根据Mnesia数据库的内容生成所述交通场景中与所述区域编号对应区域的个体进程;

所述操作进程发送步进指令至所述区域进程;

所述区域进程接收到所述步进指令后,向所述个体进程发送环境信息;

所述个体进程接收到所述环境信息后向所述区域进程反馈状态信息;

所述操作进程向所述区域进程发送终止指令;

所述区域进程接收到所述终止指令后,终止所述个体进程。

进一步地,所述方法还包括:

采用Erlang的Gen_Server行为模式用于接受所述区域进程的注册请求;

采用Erlang的Supervisor行为模式生成所述个体进程;

采用Gen_Fsm模式来实现有限状态机模型,用于模拟所述个体的所述交通行为。

进一步地,所述方法还包括:

采用Erlang的Gen_Server行为模式,初始化所述人工交通系统,并设定所述人工交通系统的开始、暂停以及终止条件。

进一步地,所述区域进程根据ETS数据表发送所述环境信息给所述个体进程,其中所述ETS数据表存储所有所述个体进程的初始行为状态信息。

进一步地,所述交通场景信息包括:路口的数量、路口的地理信息、路长、路宽、车道数量及信号灯的情况。

进一步地,所述个体的信息包括人的性别、年龄和职业以及车辆的型号;所述个体的状态包括在所述交通场景的场所内活动的状态、出行在所述交通场景的任一区域的道路上的状态、请求离开所述交通场景的任一区域的状态及请求进入所述交通场景的目标区域的状态;所述个体的交通行为包括活动行为和出行行为。

本发明实施例提供一种基于Erlang的人工交通系统实现方法。该方法包括获取交通场景信息以及个体的信息、状态和交通行为;设定操作进程、区域进程和个体进程;其中,操作进程用于控制人工交通系统的运行;区域进程用于控制某一区域并管理区域内的所有个体同时为各个体提供环境信息,还用于统计并模拟交通场景中个体的信息和状态;个体进程用于根据环境信息模拟各个体的交通行为;一个操作进程管理一个或多个区域进程;一个区域进程生成和管理一个或多个个体进程;基于交通场景信息以及个体的信息、状态和交通行为,利用操作进程、区域进程和个体进程,利用Erlang进行仿真,得到交通场景的路况。通过该技术方案解决了如何使人工交通系统具有并发和分布式运行的能力,高效利用计算资源的技术问题。

附图说明

图1a为Erlang并发机制示意图;

图1b为另一Erlang并发机制示意图;

图2为根据本发明实施例的基于Erlang的人工交通系统实现方法的流程示意图;

图3为根据本发明实施例的人工交通系统的Erang进程树的结构示意图;

图4为根据本发明实施例的操作进程、区域进程和个体进程之间信息流的交互示意图;

图5为根据本发明实施例的启动node1节点示意图;

图6为根据本发明实施例的启动操作进程的示意图;

图7为根据本发明实施例的启动node2节点示意图;

图8为根据本发明实施例的向运行在node1节点上的操作进程发送注册请求的示意图;

图9为根据本发明实施例的启动node3节点的示意图;

图10为根据本发明实施例的对人工交通系统数据进行初始化的示意图;

图11为根据本发明实施例的开始运行示意图;

图12为根据本发明实施例的在node2上每个个体每秒的运行记录示意图;

图13为根据本发明实施例的在node3上每个个体每秒的运行记录示意图。

具体实施方式

下面参照附图来描述本发明的优选实施方式。本领域技术人员应当理解的是,这些实施方式仅仅用于解释本发明的技术原理,并非旨在限制本发明的保护范围。

本发明实施例的基本思想是利用Erlang在并发和分布式计算方面的独特优势,来实现人工交通系统搭建和实现方法,使其同样具有并发和分布式运行的能力,从而实现对计算资源的高效利用。

Erlang是一种通用的面向并发的编程语言,它由瑞典电信设备制造商爱立信所辖的CS-Lab开发,目的是创造一种可以应对大规模并发活动的编程语言和运行环境。Erlang问世于1987年,经过十年的发展,于1998年发布开源版本。Erlang最大的特点是在语言层面原生地支持并发,其并发的基本单位是进程。每个Erlang进程代表一个持续的活动,是某段程序代码的执行代理,与其他按各自的节奏执行自身代码的进程一起并发运行。Erlang进程之间没有共享内存,每个进程都有自己的内存空间和私有邮箱,想修改其他进程的内存,只能向其发送消息。这种隔离使得并发和分布式更为容易,也使得Erlang更适应当下多核和云计算的计算环境变革。Erlang的并发是透明的,如图1所示,如果有额外的CPU(或核、或超线程),Erlang自动利用它们并行执行更多并发任务,否则利用现有的CPU处理能力交替执行任务。

Erlang运行时环境是一个虚拟机(VM,Virtual Machine),每一个Erlang VM称为一个节点,每个节点都有自己的名字,当节点知道彼此的名字之后就形成了集群,可以实现位置透明的分布式计算。

本发明实施例提供一种基于Erlang的人工交通系统实现方法。如图2所示,该方法可以包括:

S100:获取交通场景信息以及个体的信息、状态和交通行为。

其中,交通场景信息包括但不限于路口的数量、路口的地理信息、路长、路宽、车道数量、车道转向及信号灯的情况。

其中,个体信息包括人口数据(例如人的性别、年龄和职业、人口数量等)和车辆数据(例如:车辆的型号等)。个体可以为交通场景中的行人、车辆。个体的状态可以包括:在交通场景的场所内活动的状态、出行在交通场景的任一区域的道路上的状态、请求离开交通场景的任一区域的状态及请求进入交通场景的目标区域的状态。其中,出行在交通场景的任一区域的道路上的交通方式包括但不限于机动车、自行车、步行以及公共交通。交通行为可以包括活动行为和出行行为。其中,活动行为指在交通场景的场所内的活动,例如:上班、居家等。出行行为指活动在不同交通场景的场所之间的转移。在具体实施过程中,个体状态和个体交通行为可以通过交通系统相关模型来生成。

这里,区域指实际中的一片地理区域。区域内可以有道路,也可以有很多场所,比如学校、商场等,这些场所是个体进行活动行为的地方。

S110:设定操作进程、区域进程和个体进程;其中,操作进程用于控制人工交通系统的运行;区域进程用于控制某个区域并管理该区域内的所有个体同时为每一个个体提供环境信息,还用于统计并模拟交通场景中个体的信息和状态;个体进程用于根据环境信息模拟每一个个体的交通行为;一个操作进程管理一个或多个区域进程;一个区域进程生成和管理一个或多个个体进程。

其中,操作进程控制人工交通系统的运行包括操作进程控制人工交通系统的开始、步进和结束。

其中,可以根据交通场景中个体状态确定环境信息。环境信息例如可以为:当个体驾驶车辆行驶在道路上时,该个体周围车辆的位置信息以及前方信号灯的信息,当个体驾驶车辆即将行驶出当前区域时,其相邻区域的,当个体在场所内活动时,其当前的时间信息。区域进程利用环境信息用于个体进程的仿真。

在一个优选的实施例中,区域进程根据ETS数据表发送环境信息给个体进程,其中ETS数据表存储所有个体进程的初始行为状态信息。

区域进程在启动后将创建一个ETS私有表(也即ETS数据表),ETS私有表存储所有个体进程的初始行为状态信息。在每次接收步进指令时,区域进程都将根据该ETS数据表中记录的个体进程的状态信息分别发送环境信息给个体进程,然后等待个体进程处理消息后返回状态信息来更新该ETS表。

S120:基于交通场景信息以及个体的信息、状态和交通行为,利用操作进程、区域进程和个体进程,利用Erlang进行仿真,得到交通场景的路况。

本步骤仿真出路况后,就可以统计其中的车流量、车辆速度、路口的拥堵情况等交通流参数指标。

在一些可选的实施方式中,步骤S110具体可以包括:操作进程向区域进程发送初始化指令,该初始化指令包含区域编号;区域进程接收到初始化指令后,根据Mnesia数据库的内容生成交通场景中与区域编号对应区域的个体进程;操作进程发送步进指令至区域进程;区域进程接收到步进指令后,向个体进程发送环境信息;个体进程接收到环境信息后向区域进程反馈状态信息;操作进程向区域进程发送终止指令;区域进程接收到终止指令后,终止个体进程。

在上述实施方式的基础上,在另一些实施方式中,采用Erlang的Gen_Server行为模式用于接受区域进程的注册请求;采用Erlang的Supervisor行为模式生成个体进程;采用Gen_Fsm模式来实现有限状态机模型,用于模拟个体的交通行为。

具体地,本实施例以Erlang编程工具为例。采用Erlang的Gen_Server行为模式用于接受区域进程的注册请求,并利用Erlang的Mnesia数据库实现数据存储,该数据库同时为区域进程和个体进程提供数据服务。采用Erlang的Supervisor行为模式生成对应该区域人口的所有个体进程,并为它们的行为提供环境信息并进行相关的数据统计。采用Gen_Fsm模式来实现有限状态机模型,用于模拟个体的行为。

在一些可选的实施方式中,本发明实施例在步骤S100之前还可以包括:采用Erlang的Gen_Server行为模式,初始化人工交通系统,并设定人工交通系统的开始、暂停以及终止条件。

下面以一优选实施例来详细说明人工交通系统实现的过程。

本优选实施例通过三种进程来实现。例如:三个进程可以为操作进程、区域进程和个体进程。图3示例性地示出了人工交通系统的Erang进程树的结构示意图。其中,一个人工交通系统只有一个操作进程,一个操作进程可以管理一个或多个区域进程,一个区域进程生成和管理一个或多个个体进程,从而呈现成一棵进程树的结构。

操作进程被配置为控制人工交通系统的运行,具体包括人工交通系统的初始化、开始、暂停以及终止等。在具体实施过程中,可以采用Erlang的Gen_Server行为模式用于接受区域进程的注册请求,并利用Erlang的Mnesia数据库实现数据存储,该数据库同时为区域进程和个体进程提供数据服务。在具体实施过程中,仿真出路网信息,并配置每个路口的信号控制方案,然后,将配置好的数据导入Mnesia数据库。Mnesia数据库可以根据实际应用情况导入路口的数量、路口的地理信息、车道数量及信号灯的情况等。

区域进程被配置为对应于人工交通系统所模拟路网或交通场景中的某个区域。在具体实施过程中,可以采用Erlang的Supervisor行为模式生成对应该区域人口的所有个体进程,并为这些个体进程的行为提供环境信息并进行相关的数据统计。当区域进程启动时,首先,先向操作进程发送注册请求,该注册请求中包含所在节点的计算资源,以便操作进程根据计算资源分配计算任务;而当区域进程被要求退出时,它将反序停止它的所有子进程,然后在终止自己。

个体进程被配置为对应于个体。在具体实施过程中,可以采用Erlang的Gen_Fsm行为模式实现。Gen_Fsm模式可以实现有限状态机模型。

三种不同进程之间通过消息进行交互。图4示例性地示出了三个进程之间信息流的交互示意图。

其中,初始化指令用于操作进程向区域进程分配计算任务。该指令包含了一个区域ID,区域进程在接收到该指令后将从Mnesia数据库中根据该ID取出相关数据,然后生成对应所在交通场景中某个区域人口的所有个体进程。因此,在操作进程初始化之前,需要根据区域进程的数量和计算资源,对所模拟的路网或交通场景中的区域进行人工或自动划分。步进指令用于操作进程控制了整个人工交通系统的运行进度。具体地,操作进程根据仿真步长发送步进指令,操作进程只有收到所有区域进程的“步进完成”回复后,才能发送下一个步进指令;而区域进程只有向所管理的所有个体进程发送“环境消息”,并等待所有个体进程完成一定的计算,返回“状态消息”后才能回复“步进完成”消息。终止指令用于通知区域进程退出工作,从而终止整个人工交通系统的运行。区域进程根据个体的不同状态,向个体进程发送不同的环境信息。

区域进程在启动后将创建一个ETS私有表(也即ETS数据表),ETS私有表存储所有个体进程的初始行为状态信息。在每次接收步进指令时,区域进程都将根据该ETS数据表中记录的个体进程的状态信息分别发送环境信息给个体进程,然后等待个体进程处理消息后返回状态信息来更新该ETS表,例如,删除(增加)请求离开(进入)该区域的个体的状态数据。统计分析也是基于该ETS表进行,并将分析结果存储到Mnesia数据库中。

下面以一优选实施例来详细说明模拟分布式运行的过程。

本优选实施例利用一台计算机,以windows操作系统启动多个节点为例进行说明。在实际应用中,操作系统包括但不限于windows操作系统、Unix类操作系统、Linux类操作系统、Mac OS等。

S1:启动第一节点。

具体地,本步骤可以通过windows系统的cmd窗口,输入“erl-setcookie abc-name node1@127.0.0.1”,在本机上启动一个名为node1的Erlang节点来实现,如图5所示。

S2:进行编译。

本步骤可以通过切换到操作进程源文件(dashboard.erl)的所在目录,进行编译(c(dashboard).)。

S3:启动操作进程。

本步骤可以通过指令“dashboard:start().”启动操作进程。

图6示例性地示出了启动操作进程的示意图。

S4:启动第二节点。

具体地,本步骤可以通过windows系统的cmd窗口,输入“erl-setcookie abc-name node2@127.0.0.1”,在本机上启动一个名为node2的Erlang节点来实现,如图7所示。

S5:进行编译。

本步骤可以通过切换到区域进程源文件(subarea.erl)和个体进程源文件(person.erl)所在目录,分别进行编译(c(subarea).、c(person).)。

S6:向运行在第一节点上的操作进程发送注册请求。

本步骤可以通过指令“subarea:start('node1@127.0.0.1').”向运行在node1节点上的操作进程发送注册请求。

图8示例性地示出了向运行在node1节点上的操作进程发送注册请求的示意图。注册成功时,将打印“Reigister succeed!”的提示信息。在node1的窗口中,操作进程也会打印收到注册请求的提示信息。

S7:启动第三节点。

图9示例性地示出了启动第三节点的示意图。

S8:启动和注册一个区域进程。

S9:对人工交通系统数据进行初始化。

本步骤可以在node1节点上,执行“dashboard!{self(),{init,1}}.”,通过发送消息告诉操作进程dashboard加载ID为“1”的人工交通系统数据进行初始化,如图10所示。

初始化成功后,将看到相应的提示。初始化过程中,操作进程也将发送包含区域ID的消息通知区域进程进行初始化。区域进程主要根据区域ID加载区域路网数据和人口数据,然后生成个体进程。

S10:开始运行指令。

完成人工交通系统的初始化后,就可以开始运行。通过在node1节点上执行“dashboard!{self(),run}.”启动运行,如图11所示,其仿真10秒(06:00:00-06:00:10)的运行过程。在node2和node3上可以看到每个个体每秒的运行记录,如图12和13所示。

S11:运行结束。

运行到指定的时间点(“06:00:10”)后,系统将自动结束运行。在运行过程中,可根据需要在node1上执行“dashboard!{self(),pause}”暂停运行,或执行“dashboard!{self(),run}”恢复运行,或执行“dashboard!{self(),stop}”终止运行。

需要说明的是,虽然上面的实施例是在一台计算机上完成的,但在实际部署时,只要节点间能进行网络通信,然后将指令中的“127.0.0.1”对应地修改为所在节点的IP地址即可实现分布式运行。

上述实施例中虽然将各个步骤按照上述先后次序的方式进行了描述,但是本领域技术人员可以理解,为了实现本实施例的效果,不同的步骤之间不必按照这样的次序执行,其可以同时(并行)执行或以颠倒的次序执行,这些简单的变化都在本发明的保护范围之内。

至此,已经结合附图所示的优选实施方式描述了本发明的技术方案,但是,本领域技术人员容易理解的是,本发明的保护范围显然不局限于这些具体实施方式。在不偏离本发明的原理的前提下,本领域技术人员可以对相关技术特征作出等同的更改或替换,这些更改或替换之后的技术方案都将落入本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1