AnyLogic使用帮助文档一概要本文档内容包含AnyLogic的简单介绍,AnyLogic使用入门以及在使用过程中常见的一些问题。且所有内容仅针对pedestrian模型。二安装除按正常模式安装AnyLogic以外,我们还需要额外添加一个shp文件导入控件,以及安装neatbean。控件的安装方法很简单,把InputShape_1.0.0.jar和openmap.jar复制到C:\ProgramFiles\AnyLogic6Professional\plugins下即可(具体路径请参考自己的anylogic安装路径)。三创建一个简单的pedestrian模型1打开anylogic程序,File-new-model。2输入模型文件相关信息,next。3选择usetemplatetocreatemodel,并选择PedestrianDynamics。Next。4Addwaitingarea和Addserviceandqueue都不勾选。Finish。5运行程序观察效果。四基础对象介绍关于各个对象的属性行为,仅说明一些比较常用的。构建一个完整的模型,以下对象是必不可少的。PedConfiguration,PedGround,PedSource,PedSink,PedGoTo。下面一一介绍。1PedConfigurationPedConfiguration主要标示模型中的一些配置信息。1)Timestep,seconds时间步长,即pedestrian每隔多久移动1次。0.3是通过社会调查获得的一个比较合理的数据。这个值越小,peds移动的更精确,但是需要更多的计算。2)Animationscale,pixelspermeterPedConfiguration中需要格外关注一个数据,即多少像素为1米。模型中的单位分为像素和米,所以在使用中需要注意他们之前的差别。3)RenderpedasPed的显示样式。circle在表现上要好看一些,但是会让程序慢一下。Cross会让程序跑的快一些,point会更快,但是point无法表现出ped的大小。2PedGroundPedGround主要表示模型的模拟器环境。可以简单的理解为墙的设置。1)Walls(group,optional)peds不能穿过的地方,简称为墙。可以通过walls来表示实际的模拟器环境。参数可以null,不为null时必须为group。2)Wallstouchtolerance,pixels人与墙之间的间隔,单位为像素。0.2米是一个比较合适的值。3)Additionalties(groupoflines,optional)额外的ties当PedGoto的寻路方式为manual时会使用到该参数。可以为空4)Showadvancedparameters勾选将显示一些高级设置。a)Gapbetweentieandwall,meters系统自动生成的tie和墙之间的距离。缺省值为0.3米。这个值必须大于0。b)Maximumtielength,meters系统自动生成的tie的最大长度。缺省值为5米。在某些模型里面,将该参数设置到最小,可以显著提高性能。c)Minimumanglebetweenties,radiantie之间的最小角度。单位为弧度。缺省值为0.3。由两点之间生成的tie,如果与角平分线之间的角度小于该值,将会被移除。d)Deletecrossingties是否删除相交的tie。e)Shownodes程序运行过程中,是否显示节点。f)Colorfornodes节点颜色。g)Showedges是否显示边缘。h)Colorforedges边缘颜色。i)Showties是否显示tiej)Colorfortiestie的颜色k)Showobstacles显示障碍l)Colorforobstacles障碍的颜色3PedSourcePedSource主要作用是生成ped。通常作为模型的起点。1)Creationmode选择ped生成模式,是单个模式还是组模式。2)Pedarrivalsdefinedby指定生成ped的模式。a)Arrivalrate,pedspertimeunit按时间比率生成。如1000/hour()。b)Pedinterarrivaltime间隔时间生成。如:exponential(1000/hour())。具体时间间隔由AngLogic内部定义,该参数仅定义生成比率。c)Ratetable,pedsperminute生成比率有TableFunction提供。d)Arrivaltable生成比率有TableFunction提供。TableFunction中一个条目(20,10)表示第20s生成10个人。e)Manual(callinject()method)手动调用inject(intn)函数生成人。3)Grouparrivalsdefinedbygroup和ped的区别主要在于,ped每次生成时单个的。group生成每次生成是以group的size大小的人为1个单位生成的。如group的size为10,则每次生成人的时候都是10人。生成模式与ped相同。4)Limitednumberofarrivals是否限制生成ped的数量。如果选择是,则需要输入人数上限。5)Newpedped实例化。可以实例为newped()或者ped的子类。6)Diameter,metersped的大小。单位为米。7)Comfortablespeed,meterspersec.ped的速度,米/秒。默认值为uniform(0.5,1)。8)Animationshape设定动画演示时的形状。具体用途还没摸索出来^^9)color设定生成的ped的颜色。默认情况下为空,随机设置颜色。10)Arrivalground(PedGround)ped生成时所处的环境。11)Appearsat(line,polyline)ped生成时所处的位置。12)InitialSpedd,meterpersecond初始速度。单位为米/秒。13)Withoffset,meters定义ped生成位置位于线上的位置。缺省位置为uniform(0,length)。如果改成uniform(0.5*length,0.75*length),则表示生成的均匀分布在线段/折线距离起点1/2线段/折线长度到3/4长度的这一部分。起点为折线/线段上带+的点。14)initialdirection,radianped生成时的初始朝向。单位为弧度。可选择下拉单提供的North,South,East,West。15)Onexit可以在这里编码。ped离开该组件时会调用这段代码。16)advancedparameters—Pedsimulationalgorithmped的模拟器算法。默认值为pedConf.algorithmSocialForceModel。这个参数我没有深入研究过。高端人士可以自己编写模拟器算法来试验一下。4PedGoTo设定ped的行走目的地和路线。1)Target(point,line)ped的目的地,可以是line,也可以是point。2)Pathchoicemode有两种模式,auto和Manual。auto模式,ped会自动计算到达目的地的路径。Manual模式,ped则根据指定的path行走。若选择Manual模式,则必须在Parameters栏path项填写设定的path。path为ShapePolyLine。3)Targetreachtolerance,meters定义ped距离目的地多少范围内算完成pedgoto。4)Onenter,Onexit,Oncancel分别定义ped进入,离开,取消pedGoto时的行为。5)Blockingdetectiontimeout当ped进入一个死角,从该位置无法沿既定路径到达目的地,则会进入timeout计时,超时后会重新计算路径。5PedSinkped的最终端,进入该对象的ped会从画面消失。1)Onenter自定义进入该对象的行为。以上为该模型中对象的基本介绍。其他模型介绍请参考help文档。关于其他对象的示例,请查看help-SampleModels。PedestrianDynamics的三个示例。五进阶功能。这一块内容比较乱,基本上以我在做地铁疏散遇到的问题为主。1path的画法可以这样理解,ped按path行走,实际是按于path关联的一连串ties行走。表示path的polyline,以+点为起点,每条tie必须放在polyline的点上面。以上polyline2位path。左下带+的点为path起点,ped先到达line2上一点,再通过line3上一点,以此来完成该path。line2和line3为ties。创建一个group,把这两条line加入这个group,并把group名填入PedGround的Addtionalties,这些ties才被认可,可以起作用。2pedGototarget缓冲区的实现。本身PedGoto有一个参数Targetreachtolerance来实现该功能,但是由于实际效果来看,该参数对pointtarget效果很不错,但是对linetarget支持很不好。实现该方法时,需指定pedGotocancel端口连接的对象。方法一:自定义算法计算缓冲区。代码如下:distanceLine(doubleax,doubleay,doublebx,doubleby,doublecx,doublecy){doublef=(bx-ax)*(cx-ax)+(by-ay)*(cy-ay);//c到直线ab的投影点不在线段ab上,而且离a点最近if(f0)returndistancePoints(ax,ay,cx,cy);doubled=(bx-ax)*(bx-ax)+(by-ay)*(by-ay);//c到直线ab的投影点不在线段ab上,而且离b点最近if(fd)returndistancePoints(bx,by,cx,cy);//c在ab线段上的投影点在线段ab上f=f/d;doublefDx=ax+f*(bx-ax);doublefDy=ay+f*(by-ay);doublefDistanceCD=sqrt(pow((cx-fDx),2)+pow((cy-fDy),2));returnfDistanceCD;}distanceLine(doubleax,doubleay,doublebx,doubleby){doublefDistance=sqrt(pow((ax-bx),2)+pow((ay-by),2));returnfDistance;}该方法主要是计算ped与targetline的距离。如果距离小于某个值,判定ped已经实现该pedGoto,调用PedGoto.cancel(ped)进入下一个对象。方法二:利用pedArea自定义缓冲区。当ped进入pedArea以后,判定ped已经实现该pedGoto,调用PedGoto.cancel(ped)进入下一个对象。3pedArea的几个用途1)电梯。pedArea有一个参数GroundisMoving。可以设定地面的移动速度。2)可以控制区域开关。Enableaccesscontrol可以控制区域开关。当选定该参数之后,可以调用pedArea.setOpen(booleansOpen)来设置区域开关。一个比较常见的用法就是当区域内人数达到一定限制后,就不允许再继续进去了。3)可以实现靠边行走。Keepdirection参数会给进入区域的每一个ped指定方法的加速度,该方向就是Keepdirection的值,可以是下拉列表的east,west,sourth,north,也可以是特定的弧度值。4)限制区域内peds的行走速度。可以通过SpeedisLimited来限制ped的最大速度。5)每个ped的速度增加百分比的速度。可以通过Speedism