global {
// 定义食草动物数量
int nb_preys_init <- 200;
//初始化
init {
//创建食草动物数量为nb_preys_init
create prey number: nb_preys_init;
}
}
然后定义食草动物(pred)和草(vegetation),这里我们将食草动物定义为族群(species)草定义为网格(grid),因为草地是承载食草动物行为的环境。
//创建一个50x50的四边形网格(注:neighbors控制网格的形状,如6边形、8边形等)
grid vegetation_cell width: 50 height: 50 neighbors: 4 {
//定义网格属性
//food代表每个网格的食物量
//max_food每个网格最大食物量
float max_food <- 1.0;
//每次模拟网格中食物量随机增加的数值(0-0.01)
float food_prod <- rnd(0.01);
//每个网格初始食物量为(0-1)的随机数,每次模拟更新加food_prod,最大值为max_food
float food <- rnd(1.0) max: max_food update: food + food_prod;
//根据食物量的大小,网格的颜色也会发生变化
rgb color <- rgb(int(255 * (1 - food)), 255, int(255 * (1 - food))) update: rgb(int(255 * (1 - food)), 255, int(255 * (1 - food)));
}
GAML中颜色的表示可以用#+颜色名表示,如#blue、#red 等(颜色列表可以查看官方文档)。也可以用三通道rgb(red,green,blue)表示,如rgb(255,255,255)。
//创建食草动物族
species prey {
//定义属性
//显示大小
float size <- 1.0;
//颜色
rgb color <- #blue;
//所在的草地网格
vegetation_cell my_cell <- one_of (vegetation_cell);
//初始化位置为所在草地网格位置
init {
location <- my_cell.location;
}
//显示方式:大小为size的圆,颜色为color
aspect base {
draw circle(size) color: color;
}
}
//实验名称为prey_predator,输出方式为图形界面
experiment prey_predator type: gui {
//定义食草动物的数量为可在图形界面调整的参数
parameter "Initial number of preys: " var: nb_preys_init min: 1 max: 1000 category: "Prey";
//定义输出
output {
//输出窗口名为main_display
display main_display {
//显示vegetation_cell网格,线型为黑色
grid vegetation_cell lines: #black;
//以prey族中aspect定义的base方式显示prey族
species prey aspect: base;
}
}
}
model prey_predator
global {
// 定义食草动物数量
int nb_preys_init <- 200;
//初始化
init {
//创建食草动物数量为nb_preys_init
create prey number: nb_preys_init;
}
}
//创建食草动物族
species prey {
//定义属性
//显示大小
float size <- 1.0;
//颜色
rgb color <- #blue;
//所在的草地网格
vegetation_cell my_cell <- one_of (vegetation_cell);
//初始化位置为所在草地网格位置
init {
location <- my_cell.location;
}
//显示方式:大小为size的圆,颜色为color
aspect base {
draw circle(size) color: color;
}
}
//创建一个50x50的四边形网格(注:neighbors控制网格的形状,如6边形、8边形等)
grid vegetation_cell width: 50 height: 50 neighbors: 4 {
//定义网格属性
//food代表每个网格的食物量
//max_food每个网格最大食物量
float max_food <- 1.0;
//每次模拟网格中食物量随机增加的数值(0-0.01)
float food_prod <- rnd(0.01);
//每个网格初始食物量为(0-1)的随机数,每次模拟更新加food_prod,最大值为max_food
float food <- rnd(1.0) max: max_food update: food + food_prod;
//根据食物量的大小,网格的颜色也会发生变化
rgb color <- rgb(int(255 * (1 - food)), 255, int(255 * (1 - food))) update: rgb(int(255 * (1 - food)), 255, int(255 * (1 - food)));
}
//实验名称为prey_predator,输出方式为图形界面
experiment prey_predator type: gui {
//定义食草动物的数量为可在图形界面调整的参数
parameter "Initial number of preys: " var: nb_preys_init min: 1 max: 1000 category: "Prey";
//定义输出
output {
//输出窗口名为main_display
display main_display {
//显示vegetation_cell网格,线型为黑色
grid vegetation_cell lines: #black;
//以prey族中aspect定义的base方式显示prey族
species prey aspect: base;
}
}
}