DOCUMENTATION TUTORIALS DOWNLOAD NEWS CONTRIBUTE

Attaching Skills

GAMA allows to attach skills to agents through the facet skills. Skills are built-in modules that provide a set of related built-in attributes and built-in actions (in addition to those already proposed by GAMA) to the species that declare them.

Index

Skills

A declaration of skill is done by filling the skills facet in the species definition:

species my_species skills: [skill1,skill2] {
}

A very useful and common skill is the moving skill.

species my_species skills: [moving] {
}

Once your species has the moving skill, it earns automatically the following attributes: speed, heading, destination and the following actions: move, goto, follow, wander and wander_3D.

Attributes:

Actions:

follow

moves the agent along a given path passed in the arguments.

goto

moves the agent towards the target passed in the arguments.

move

moves the agent forward, the distance being computed with respect to its speed and heading. The value of the corresponding variables are used unless arguments are passed.

wander

Moves the agent towards a random location at the maximum distance (with respect to its speed). The heading of the agent is chosen randomly if no amplitude is specified. This action changes the value of heading.

wander_3D

Moves the agent towards a random location (3D point) at the maximum distance (with respect to its speed). The heading of the agent is chosen randomly if no amplitude is specified. This action changes the value of heading.

Other skills

A lot of other skills are available. Some of them can be built in skills, integrated by default in GAMA, other are linked to additional plugins.

This is the list of skills: Advanced_driving, communication, driving, GAMASQL, graphic, grid, MDXSKILL, moving, moving3D, physical3D, skill_road, skill_road, skill_road_node, SQLSKILL

Example

We can now build a model using the skill moving. Let’s design 2 species, one is “species_red”, the other is “species_green”. Species_green agents are moving randomly with a certain speed and a certain heading. Species_red agents wait for a species_green agent to be in a certain range of distance. Once it is the case, the agent move toward the species_green agent. A line link the red_species agent and its target.

images/green_and_red_species.png

Here is an example of implementation:

model green_and_red_species

global{
	float distance_to_intercept <- 10.0;
	int number_of_green_species <- 50;
	int number_of_red_species <- 50;
	init {
		create speciesA number:number_of_green_species;
		create speciesB number:number_of_red_species;
	}
}

species speciesA skills:[moving] {
	init {
		speed <- 1.0;
	}
	reflex move {
		do wander amplitude:90;
	}
	aspect default {
		draw circle(1) color:#green;
	}
}

species speciesB skills:[moving] {
	speciesA target;
	init {
		speed <- 0.0;
		heading <- 90;
	}
	reflex search_target when:target=nil {
		ask speciesA at_distance(distance_to_intercept) {
			myself.target <- self;
		}
	}
	reflex follow when:target!=nil {
		speed <- 0.8;
		do goto target:target;
	}
	aspect default {
		draw circle(1) color:#red;
		if (target!=nil) {
			draw polyline([self.location,target.location]) color:#black;
		}
	}
}

experiment my_experiment type:gui
{
	output{
		display myDisplay {
			species speciesA aspect:default;
			species speciesB aspect:default;
		}
	}
}