Step2: 人群代理的编写
创建人群族
首先,我们将人群族的基本属性编写完成。
global {
...
//初始人群数量
int nb_people <- 100;
//路网图形
graph the_graph;
init {
...
//初始化人群族,初始位置为随机一个居住建筑内的任意位置
create people number: nb_people {
location <- any_location_in (one_of (residential_buildings));
}
}
}
species people {
//显示颜色
rgb color <- #yellow ;
//显示方式
aspect base {
draw circle(10) color: color border: #black;
}
}
experiment road_traffic type: gui {
output {
...
display city_display type:opengl {
...
//增加人群族的显示
species people aspect: base ;
}
}
}编写人群行为
我们希望人群在上班时间沿着道路出发去工作地点,下班时间从工作地点回到居住地点,为了实现这些行为,我们为人群族添加必要的技能moving,然后为人群族增加必要的属性。
skills: skills是GAMA为仿真模型预设的行为模块,每个skill都包含了相应的属性和行为动作,以moving为例,moving包含了speed、heading、destination等属性以及move、goto、follow、wander、wander_3D等内置行为函数,使用者可以更加方便快捷地完成复杂行为设计,而无需从零编写。更多skills相关,可查看官方文档-Attaching Skills。
接下来,我们编写具体的移动规则。
current_date : current_date是一个内置的全局变量,调用current_date系统会根据step的值返回当前时间,current_date.hour即返回当前的小时数。 do goto target: ... on: ... : goto是skill moving的内置函数,代理将会沿着关键字on所设置的图形以最短路径前往目的地。这里the_graph是一个全局变量,我们会在初始化时为它赋值,详见下一小节。
初始化人群族
接下来,我们在全局设置中初始化人群族,为了仿真模型更好的模拟真实状态,我们通过初始化为人群族中每个代理分配不同的速度、工作时间、下班时间、生活地点与居住地点,实现代码如下:
as_edge_graph(...) : 通过给定的边的列表,创建一个由边组成的网状图形,更多使用方式,详见官方文档。
实验设置
最后我们在实验设置中,设置好可调整参数,并设置好人群组的显示。
至此一个基本的交通仿真模型编写完成,本节最终代码如下:
Last updated
Was this helpful?