基于netlogo的大规模人群行为仿真.docx
《基于netlogo的大规模人群行为仿真.docx》由会员分享,可在线阅读,更多相关《基于netlogo的大规模人群行为仿真.docx(22页珍藏版)》请在冰豆网上搜索。
基于netlogo的大规模人群行为仿真
题目:
基于netlogo的大规模人群行为仿真
基于netlogo的大规模人群行为仿真
摘 要
随着数字化人体运动仿真技术的日趋成熟,尤其是其应用的迅速,也得到了很好的推广,虚拟合成领域中的大规模的人口流动模拟技术开始成为研究的热点。
大规模的人群运动模型的主要工作是研究在各种环境中,情节下的人群的运动规律和特征,建立大规模的人群运动仿真模型,并在计算机上生成的三维空间(虚拟环境)中逼真的描述在运动过程中的人群的运动过程。
人口规模的运动仿真技术提供了一个人群的运动分析和演示工具,具有广泛的应用领域。
Netlogo是一个基于Agent的仿真建模工具。
本文主要描述了Netlogo的工作原理和主要特性,并通过一个简单的实例描述了该工具的建模和实验过程。
虚拟人群行为的驱动方法可以通过设计的虚拟人群行为属性来描述人群将采取的行为;以生产规则来实现虚拟仿真人群行为事件/响应模式。
最后,将人群行为建和实现方法模应用在人群紧急疏散逃生模拟中,并可取得了良好的效果。
关键词:
虚拟人群;人群仿真;行为研究;虚拟视觉;路径规划
Asimulationofalargepopulationbehaviorbasedonnetlogo
ABSTRACT
WiththedevelopmentofSimulationindigitalhumanbehavior,especiallytherapidpromotionofitsapplication,large-scalepopulationbehaviorsimulationtechnologyhasbecomeanewresearchfocusinthefieldofvirtualhumansynthesis.Large-scalehumanmotionsimulationistostudythecharacteristicsandregularityofpopulationmovement.Invariousenvironments,buildmodelSimulationoflarge-scalepopulationmovement,andshowlarge-scalepopulationmovementbythree-dimensionalwayrealisticallyinthecomputer'sspaceofgeneration.Large-scalepopulationbehaviorsimulationtechnologyprovidesthecrowdmotionanalysisanddemonstrationtool,thefieldofapplicationisquiteextensive.
NetlogoisanAgentBasedModeling(ABM)utility.Themechanismandmainfunctionsareintroducedandexperimentisillustratedthroughanexample.Inallusiontothemethodofdrivingthevirtualcrowd'sbehavior,thenextactionstatewasdescribedthroughdesigningtheactionattributes.Furthermore,theeventresponsemodeofthevirtualcrowd'sactionsimulationwiththeproductionruleisrealized.Intheend,thisbehaviormodelandsimulationmethodareappliedtothethree-dimensionalsimulationofcrowdurgentescapeandgoodresultisobtained.
Keywords:
virtualcrowd;crowdsimulation;behavioralresearch;artificialvision;pathplanning
目 录
1 引言
1.1 课题研究意义及其应用
大规模人群运动仿真,就是研究人群在各种环境、情节下的运动特征与规律,建立大规模人群运动的仿真模型,并在计算机生成空间(虚拟环境)中以三维的方式逼真地展示大规模人群的运动过程[1]。
随着计算机数值模拟技术的迅速发展,人群行为仿真技术开始成为人群疏散仿真、城市规划和计算机疏散软件开发方面的研究热点。
人群行为仿真是研究人群运动的基础,综合考虑各方面因素对人群运动的影响,对人群运动进行分析,建立相应的模型,从而将在虚拟的环境中模拟出的人群的行为应用于各个领域[2]。
大规模人群运动仿真技术,提供了人群运动的分析和演示工具,可应用的领域相当广泛。
研究影响人群行人的运动因素,建立一个适当的行人的运动模型,通过计算机对行人的运动进行模拟,模拟人群聚集过程中可能出现的状况,预测发生事故的场景,给公共活动场所的建设和人群疏散提供参考,并对群体活动现场的工作布置与安全工作安排的积极意义,极大地保证了人身安全。
大规模人群的运动仿真技术可应用于许多公共安全领域,如码头,机场,体育场馆,地铁站等大型公共设施与设计[3]。
以体育馆为例,可应用大规模的人群流动数值模拟技术,根据球场的规模、常规情况和特殊情况下得疏散情况来设置安全出口。
无论是对走廊宽度设计,还是出口和出口位置的合理数量的设计都需要复杂的辅助分析,才能够更好地设计出更合适的公共场作。
人群运动仿真可以在球迷发生冲突,火灾,恐怖袭击和其他非常规的情况下,辅助人员建立在紧急疏散计划,可以应用于消防设备的合理布置,警力分布;也可作为场馆管理人员的消防安全,反恐演习和训练的辅助工具。
与传统方法相比,大规模人群仿真技术,具有直观,灵活,高效,经济和人员等诸多优点的安全风险。
人口规模的运动仿真技术示范功能能够逼真的模拟人群运动,如地购物商场,欢呼的体育场,铁站等人流量很大的公共场作的人群行为。
因此,它可以应用于国防科研,电影和电视媒体,娱乐,游戏等[4]。
大规模人群仿真技术是一个新兴的技术,技术还处在初级阶段,各方面的技术还不够成熟,但随着计算机硬件的发展和研究领域,技术的快速发展,迅速改变。
国内外学者进行了大量的研究工作,大规模人群运动仿真技术的应用现状及前景非常好[5]。
1.2 Netlogo的特性与开发
Netlogo具有多智能体建模语言,它功能强大,易于使用,易于开发。
Netlogo包含完整的文档和教程,很多可以直接使用和修改,系统还提供了大量的模型,模型库提供涉及医学,计算机科学,化学,物理学,数学,生物学和经济社会的哲学,自然科学和社会科学,特别适合初学者学习[7]。
在Netlogo中有海龟(turtles)、块(patches)和观察员(observer)三类智能体。
观察员可以观察和控制仿真世界的运行。
海龟是可以移动的对象,可以代替现实世界中的任何一种有活动特性的物体,可以代替模型中的一个人、一只昆虫、一辆汽车或一片草地;而块则代表了海龟所生存的环境,整个环境是由若干个块拼接构成,可代替模型中的一个房间、一片绿地、一个桌子等[8]。
通过控制海龟和块,通过编程为其设定各种属性和运行规则,可以并行地控制成千上万的海龟和块,使其具有自己的运动规则并在彼此的相会作用中形成群体的运动。
这里的交互作用包括海龟和块的交互及海龟和海龟的交互,前者体现了主体与环境的关系,后者则体现了主体之间的关系,在人群行为仿真过程中,可表现为人与人的相互作用及人与环境之间的相互作用[9]。
1.3 课题研究的内容
该课题研究模拟的是人群处在陌生的环境中,在各种外界与心理条件的影响下找到出口的时间的检测。
人群运动是大自然中一种既复杂又有趣的运动,它有同蚁群、蜂群、鱼群和鸟群等动物群体的行为相似的地方,又有其独特的规律它的研究真是耐人寻味。
人群的运动的特殊性主要表现在它是由离散的流动的人群组成的,并受到心理因素的影响。
它的视觉效果和规律都很复杂,似乎是随机排列,但却有着一定的规律,令人难以捉摸。
人群行为的研究是仿真建模的重要环节,而其仿真模型对于电影动画的制作、生物学研究以及现代军事化大型战斗群体协同作战控制都有重要的意义。
本文构建了基于Netlogo的开发平台,根据自然界人群运动的特点进行建模仿真,这个模型同时满足人群的基本运动特征,并可以通过全局变量的设置是人群行为更加生动逼真。
利用大规模人群仿真技术的演示功能,分析每个人的心理行为,结合人与人之间和人与环境之间的差异想不同的方向移动,最终找到安全出口。
2 人群行为仿真建模
2.1 人群行为仿真模型的初始化
NetLogo是一个多主体建模仿真集成环境,大量的可移动主体在二维空间中交互作用,随着时间推进,微观个体的属性不断发生变化,系统的宏观特征也因此而变化。
虚拟世界由主体构成,主体能够接受命令,进行活动,所有主体的行为并行发生。
NetLogo中共有三类主体,turtles(小海龟)、patches(瓦片)、observer(观察者)。
tosetup;;定义例程setup
clear-all;;设置整个世界为初始状态
;;创建100个turtles,创建后各turtle默认坐标是(0,0)
create-turtles100
;;命令所有turtle执行语句setxyrandom-xcorrandom-ycor
;;各turtle坐标随机产生,实现turtles在空间中的随机分布
askturtles
[setxyrandom-xcorrandom-ycor]
end
turtles指能够在世界中移动的主体。
crtpopulation
[setcolorblue;;randomshadeslooknice
setsize1.5;;easiertosee
setxy(random-float(world-height-10)+min-pycor+1)
(random-float(world-height-2)+min-pycor+1)
;;setheadingrandom-pycor+90
]
世界是二维的,划分为由patches组成的网格,每个patch占据一个矩形小块。
observer是一个全局主体,它观察着由turtles和patches构成的世界,能够执行指令获取世界全部或部分的状态,或实现对世界的控制。
三个主体空间之间的关系如图2-1虚拟空间所示:
图2-1 虚拟空间
在NetLogo主界面窗口中建立一个陌生环境模型。
将世界重设为初始、全空状态,所有瓦片变黑,基本上是将过去一笔勾销,为新模型运行做好准备。
在视图中设置来定义陌生环境的边界。
整个视图是由许多瓦片组成的网格,每个瓦片是一块正方形的“地面”(ground),瓦片也有自己的坐标。
瓦片原点(origin)的坐标是(0,0),一般位于整个环境的中间位置,其他瓦片的坐标也就是与原点的垂直距离和水平距离。
用pxcor和pycor表示瓦片的坐标,像几何中标准坐标平面一样,向右移动pxcor增加,向上移动pycor增加。
设置不同位置瓦片的颜色,形成黄色的墙体和红色的出口,并能通过调节滑轴设置出口的大小[10]。
askpatcheswith[(pxcor=min-pxcor)or
((pxcor<30)and(abspycor=max-pycor))
]
[setpcoloryellow]
askpatcheswith[pxcor=30]
[ifelseabspycor>window-edge
[setpcoloryellow]
[setpcolorred]]
可以把瓦片想象成地板上铺的方形瓷砖。
默认情况下房子正中的一片瓷砖标记为(0,0),意味着如果我们在水平和垂直方向画等分线,交叉点这在此处。
这样我们就有了一个在房间中定位对象的坐标系统,如图2-2坐标系统所示:
图2-2 坐标系统
在NetLogo中,从右到左的瓷砖数称为世界宽度(world-width)。
如图2-3世界宽度所示:
图2-3 世界宽度
从顶到低的瓷砖数称为世界高度(world-height)。
图2-4世界高度所示:
图2-4 世界高度
这些数字由顶、低、左、右边界(top,bottom,leftandright)来定义。
在这些图中,max-pxcor是3,min-pxcor是-3,max-pycor是2,min-pycor是-2.当你改变瓦片大小时,瓦片(瓷砖)的数量不变,只是屏幕上瓦片的大小变化了。
askpatcheswith[(pxcor=min-pxcor)or
((pxcor<30)and(abspycor=max-pycor))
]
[setpcoloryellow]
askpatcheswith[pxcor=30]
[ifelseabspycor>window-edge
[setpcoloryellow]
[setpcolorred]
]
海龟是在世界中移动的主体,设置滑动条调节海龟数量的多少,设置海龟形状为人。
控制者可“控制所有的仿真变量:
人口数量、出口大、影响人群运动的各种心理因素等。
在netlogo中形成的界面如图2-5程序实现界面所示:
图2-5 程序实现界面
建模的一个目的是对那些难以在实验室中进行研究的问题收集数据。
绘图室NetLogo显示数据的一个主要方式。
人群仿真这个模型的图只有一条线:
人的数量。
这条线显示了随着时间推进模型中人口数量发生了怎么样的变化。
如果忘记这条线代表的是什么时,可以在图形窗口的右上角单击”Pens”,打开画笔图例。
一个关键字说明了每条线是什么。
在本例中就是人口数量,纵坐标表示的是人口的数量,横坐标表示的是时间。
按下"go"按钮在图中会绘制出一条随着时间变化人口数量降低的一条曲线。
如图2-6人数数量和疏散时间关系曲线所示:
图2-6 人数数量和疏散时间关系曲线
视图的尺寸由5个设置共同决定:
最小X、最大X,最小Y、最大Y和瓦片尺寸。
当图快被充满时,水平轴增加,以前的数据被压缩只占一部分空间,更多的空间用来绘制将来的图形。
如果你想保存图上数据以备查看,或在另一个程序里进行分析,使用File菜单的"ExportPlot"。
这些数据就被保存,数据格式可以被电子表格,如Excel,或数据库程序识别。
也可以通过Ctr+单击(Mac)或右击(Windows)弹出快捷菜单,然后选择"Export..."。
2.2 人群运动的仿真
仿真的基本框架中至少要有初始化例程和仿真执行例程:
初始化例程实现对模型初始状态的设置,生成所需的turtles,设置其状态,以及其它工作。
该仿真程序执行通过go实现,在例程中需要执行各种命令来完成一个仿真步长的工作。
创建一个按钮,和gol例程相联系,设置该按钮为一个永久(forever)按钮,点击后会不断重复执行仿真例程,直到它接到停止命令或用户再次点击按钮时仿真停止。
NetLogo模型包括例程和可视化部件两部分,二者相互联系,共同作用完成仿真。
首先在Interface中创建可视化控件,然后在Procedures中实现相应的代码,通过设置控件的属性将二者联系起来。
Interface中主要有三类部件:
参数控制、运行控制、仿真显示[11]。
仿真的基本框架如图2-7所示:
否
图2-7 仿真的基本框架
当一个人处在过陌生的环境中时,他们是通过怎样的找到安全出口的。
通过观察你会发现人们找到安全出口的方法很多,有的人单独的找来找去,而有的人是很容易的结成团队走来走去。
当个人走来走去时,碰到墙壁时人们的运动方向发生怎样的变化?
如果你长期观察这种变化,你应该注意到模式的形成具有一定的规律。
此模型是一个研究处于陌生状态中的人群行为。
此运动规则也像鱼群、羊群、鸟群等。
)每个人随机的处于不同的位置,各自的运动方向从很大程度上取决于各自的心理需求。
当人们处在陌生的环境中是处于恐慌状态下,不自觉的会根据恐慌程度的不同引发不同的心理问题,从而影响个体的运动方向,影响结队的程度,进而影响人群的运动。
研究发现人处在陌生的公共环境中影响其运动规律的因素主要是心理活动。
心理活动是人们对环境的认知与理解所作出的反应,进而影响人的行为活动,这与他们对待环境的态度和价值判断有关。
所以,环境心理学与公共设施的设计有着密切的关系。
在某些陌生场合,人们人们不自觉的结成团队。
在某种程度上满足心理上的安全感。
例如人们处在无标识出口的陌生的校园环境里,人们以更加随机的方式形成小组,在各个小组之间的影响下和小组内人与人之间的影响下有规律的运动。
群体的运动过程是每个个体的简单运动行为的密集相互作用的结果。
群体的运动规则主要表现在:
“对齐”、“分离”、“凝聚力”。
“对齐”意味着一个人会把这运动在附近的人都朝同一方向。
如图2-8“对齐”规则所示:
图2-8 “对齐”规则
“分离”意味着一个人会避免另一个人离得太近了。
如图2-9“分离”规则所示:
图2-9 “分离”规则
“凝聚力”意味着一个人将走向附近的其他的人(除非另与另一个人离得太近)。
如图2-10“凝聚力”规则所示:
图2-10 “凝聚力”规则
当两个人太近,“分离”规则取代了其他两个,直到达到最小分离停用“分离”规则。
三条规则只影响人的移动的方向,与人的运动速度没有关系,每只鸟都向前移动用相同的恒定速度。
当人群处于一个封闭性的房间里,会有目的但漫无方向的找到安全出口,无法避免的会碰到障碍物、墙壁,当人遇到不可抗的阻力时会产生一定的心理反应,影响人群的运动方面向相反的方向运动。
如图2-11“碰壁返回”规则所示:
图2-11 “碰壁返回”规则
创建生物群体,并将它们随机分布在空间中并能随机的运动。
当人群个体遇到墙体时会自动的按一定的角度反方向返回,遇到出口时个体消失,场景内的人数减一。
例程如下:
if[pcolor]ofpatch-ahead1=red
[setpopulation(population-1)
die
]
if[pcolor]ofpatch-ahead1=yellow
[
;getthecoordinatesofthepatchwe'llbeonifwegoforward1
letnew-px[pxcor]ofpatch-ahead1
letnew-py[pycor]ofpatch-ahead1
if(absnew-px=max-pxcor)or(pxcor!
=0andnew-px=0)
;ifso,reflectheadingaroundxaxis
[setheading(-heading)]
if(absnew-px=30)and(pycor>=window-edge)
;ifso,reflectheadingaroundxaxis
[setheading(-heading)
]
if(absnew-px=30)and(pycor<=window-edge)
;ifso,reflectheadingaroundxaxis
[setheading(-heading)
]
;check:
hittingtoporbottomwall?
if(absnew-py=max-pycor)or(pxcor=0)
;ifso,reflectheadingaroundyaxis
[setheading(180-heading)]
]
3 模型的结果及分析
3.1 构建实验控件
使用netlogo软件构建实验所需的条件控件。
在本次实验中可以调节的变量分别是:
实验主体(agent)的个数;最大旋转角;最大凝聚力;最大对齐程度,最大独立转弯。
由于数值变量的不同人群行为有很大的区别,采用滑轴的方式改变变量值,经过多次调节在最大程度上接近现实世界人群运动行为。
变量滑轴的左下角为变量名称或对该变量的注释,滑轴上的红色游标提取滑轴上的数值并且所提取的数值将显示在滑轴的右下角。
主体个数可根据实验需要通过"population"滑轴调节;出口的大小可由"window-edge"滑轴调节;"vision"滑轴表示最大旋转角度;"minimun-separation"滑轴表示最小分离;"max-alingn-turn"滑轴表示最大化对齐度;"max-cohere-turn"滑轴表示最大凝聚度;"max-separate-turn"表示最大独立转弯;调节滑轴大小,改变影响人群行为的因素,比较仿真结果的变化。
图3-1实验控件是人群仿真模型中的开关和滑动条:
图3-1 实验控件
3.2 实验结果及分析
模型的配置给了你尝试不同场景或假设的机会。
修改配置,运行模型,观察这些改变所引起的反应,使你能更深入的了解所模拟的现象。
开关和滑动条用来修改模型配置。
3.2.1 最大旋转角对实验的影响
我们来试试这些行为的效果。
我们看看如果改变vision的设置的话,人群会怎么变化。
设置"population"滑动条为500.
设置"window-edge"滑动条为10.
设置"vision"的值为2.
按下"setup"和"go",运行的ticks为1000时记录下数据。
设置"population"滑动条为500.
设置"window-edge"滑动条为10.
设置"vision"的值为7.
按下"setup"和"go",运行的ticks为500时记录下数据。
在比较运行相同时间长度同一模型多次运行得到的图时,让模型在特定的时刻停止或启动很有帮助,因为我们可以让模型在同一时刻停止。
实现这一功能,要使用NetLogo内建的时钟计数器(tickcounter)
修改go例程:
togo
ifticks>=500[stop]
askturtles[bounce]
askturtles[flock]
;;thefollowinglineisusedtomaketheturtles
;;animatemoresmoothly.
repeat5[askturtles[fd0.2]display]
;;forgreaterefficiency,attheexpenseofsmooth
;;animation,substitutethefollow