Plataforma GAMA
Plataforma GAMA
Plataforma GAMA
En
este
captulo
nos
introducimos
en
la
plataforma
GAMA.
visualizar
el
comportamiento
de
las
variables,
crear
instalador
se
puede
bajar
de
la
direccin:
Models Library: contiene las libreras y proyectos que vienen por defecto al
instalar GAMA, los modelos que estn aqu ocupan como espacio de trabajo
directamente
la
carpeta
GAMA,
se
encuentran
ubicados
dentro
de
Edicin de modelos
Editar modelos en GAMA es muy sencillo debido a que utiliza el
framework de eclipse.
Se organizan en proyectos, que contienen modelos y estos a su vez
datos
asociados,
ubicados
en
las
diferentes
categoras
indicadas
Los estados del modelo se visualizan fcilmente por una franja horizontal
de color ubicada por encima del rea de edicin, los estados dependen de este
color.
Cabecera (Modelo Header): todo modelo inicia con la declaracin del nombre
del modelo. Se diferencia del resto de declaraciones porque no termina con un
punto y coma (;): model name_of_the_model
Ejemplo: model trafico
Despus de darle el nombre al modelo debemos declarar las variables
globales (global {}), variables que vamos a poder utilizar a lo largo de
nuestro modelo.
Declaracin de especies: tras la declaracin de las variables globales
debemos declarar las diferentes especies de agentes que intervienen en el
modelo, estas especies pueden utilizar las variables globales en su estructura.
Ejemplo: species A {...}
species b {...}
con:
Ejemplo:
experiment exp_name type: gui {
[input]
output {
[display statements]
[monitor statements]
[file statements]
}
}
donde:
Advertencias semnticas
La fase de validacin semntica no slo informa del error, tambin emite
varios indicadores que ayudan al modelador a verificar la semntica, mostrando
advertencias para que sean consideradas, puede ser que se declare una
variable de un tipo diferente al que la lgica de GAML espera cuando es
asignado dentro de una especie o procedimiento, por ejemplo:
string numero <- 100 ;
create personas number: numero;
Podemos ver en el ejemplo que la declaracin y la asignacin de la
variable numero es correcta, pero cuando la invocamos en el procedimiento
para crear una especie, personas, no tiene consistencia lgica para el lenguaje
GAML, que espera un valor numrico para crear una cantidad especfica de
personas.
Informacin semntica
Otra forma de retroalimentar a los modeladores en la fase de validacin
semntica son los marcadores de informacin, que sirven para dar mayor
informacin til durante el desarrollo del cdigo, por ejemplo cuando hemos
definido ms de una vez una especie, o si alguna operacin ser ejecutada al
correr el programa. Se muestra como un icono (i) en la lnea en cuestin.
Esto nos permite visualizar de forma fcil temas que debemos tener en
cuenta para ir depurando nuestro programa a medida que lo vamos ingresando
y no esperar a ejecutarlo para empezar a validar el cdigo o ver si la operacin
que hemos definido es la correcta.
Documentacin semntica.
Por ltimo, encontramos en la fase de validacin semntica una
documentacin completa de los diversos elementos presentes en el modelado,
basta con poner el mouse sobre la lnea de la cual deseamos informacin para
visualizar en un recuadro datos completos asociados a esta lnea.
Cleaning models
Cuando vemos que los metadatos en GAMA se han corrompido por la cantidad
de marcadores y errores que se han producido en los diferentes proyectos
emprendidos en la plataforma, o porque hemos cambiado constantemente de
espacio de trabajo, es necesario realizar una limpieza, aunque es
recomendable no esperar que el programa empiece a reportar errores
incorrectos o tenga un comportamiento extrao, sino hacerlo de forma
continua.
Para ello, accedemos a la opcin Project y luego escogemos clean, se
despliega una ventana con todas las carpetas contenedoras de proyectos, y se
escoge una de las dos opciones que aparece: Clean all projects que por
y asignarle dentro de la entidad que corresponda, una vez que terminemos con
el modelado damos clic derecho en la parte de edicin y escogemos la opcin
Generate Gaml model, lo que genera de forma automtica una nueva ventana
con el cdigo correspondiente.
model example
global {
}
species personas {
}
species personas {
float size <- 1.0 ;
*/
model agentes
/* Insert your model definition here */
global {
int personas_numero <- 200 ;
init {
create personas number: personas_numero ;
}
}
species personas {
float size <- 1.0 ;
rgb color <- #blue ;
aspect base {
draw circle(size) color:color ;
}
}
experiment peatones type: gui {
parameter "Nmero inicial de personas: " var: personas_numero min: 1
max: 1000 category: "Personas" ;
output {
display visualizar_personas {
species personas aspect: base ;
}
}
Donde:
width (anchura): define el nmero de celdas a lo largo del eje x .
height (altura): nmero de celdas a lo largo del eje y
neighbours (vecinos): Tipo de vecinos (4 - Von Neumann, 6 - hexgono u 8 Moore).
Como ejemplo vamos a definir un rea de accin de los agentes. Para ello,
como primer paso, se define el tamao del rea de 20X20 (va crear un grid
compuesto por 20 celdas horizontales y 20 verticales) y con una vecindad 4Von Neumann:
grid area_personas width: 20 height: 20 neighbours: 4
Con lo que solo nos resta crear el experiment y mediante display visualizar
nuestro modelo.
En GAML el cdigo correspondiente es:
/**
* trafinal
* Author: zoila
* Description:
*/
model ejemplo
global {
int personas_numero <- 200;
init {
create personas number: personas_numero ;
}
}
species personas {
float size <- 1.0 ;
rgb color <- #red;
area ubicacionPer <- one_of (area) ;
init {
}
aspect base {
draw triangle(size) color: color ;
}
Donde:
value: aqu vamos a asignar la variable que declaramos como variable global,
este campo es obligatorio.
refresh_every: es un campo opcional que nos permite ingresar el nmero de
pasos de la simulacin necesaria para el clculo de la expresin, en caso de no
ponerla se toma el valor por defecto, que es 1 (en cada paso actualiza la
expresin).
Ahora vamos a ver cmo definir funciones que nos permitan darles
movimientos, acciones, reacciones etc.
Para poder da algn tipo de accin o comportamiento a la especie
debemos definir un reflejo, que es un bloque de instrucciones que se ejecutan
internamente durante la simulacin, la forma general de definirla es la
siguiente:
reflex reflex_name when: condition {}
float energy <- (rnd(1000) / 1000) * max_energy update: energy energy_consum max: max_energy ;
init {
location <- ubicacionPer.location;
}
reflex basic_move {
ubicacionPer <- one_of (ubicacionPer.neighbours) ;
location <- ubicacionPer.location ;
}
reflex die when: energy <= 0 {
do die ;
}
aspect base {
draw circle(size) color: color ;
}
}
}
}
Las palabras claves que nos permiten hacer referencia a la especie que
est ejecutando las acciones son self y myself, la primera nos hace referencia
al agente que est ejecutando la funcin, y la segunda a la sentencia que est
ejecutando dentro de la funcin.
4.6 Manejo de SIG con GAMA
Una vez definido el manejo de los agentes sobre medios simples, como son
las reas generadas con celdas, ahora debemos ver la posibilidad de tener
como medio una cartografa que nos permita realizar simulaciones ms reales.
Por ello vamos a ver el manejo de mapas dentro de GAMA.
4.6.3 Carga de datos SIG y geometras en GAML
En GAML podemos cargar capas vectoriales, sean estas polilneas,
polgonos o puntos. No slo permite visualizar las capas vectoriales, sino que
tambin permite interactuar con los atributos de cada uno de ellos.
Como vimos en el punto anterior se deben crear especies y asignarlas al
tipo de elemento que va a representar dentro del modelo. Al igual que las
especies creadas para personas, podemos definir una especie del tipo de capa
que vamos a utilizar:
species calles {
init {
create manzana from: shape_file_manzanas with: [type::string(read
("TIPO"))] {
if type="TERRENO" {
color <- #red ;
}
}
Como podemos ver en la definicin del mtodo, este permitir a los agentes
moverse. Definimos el destino con la variable el_objetivo, y mediante la accin
goto el agente se mover en direccin al destino, as tambin asignamos un
grfico a la restriccin del movimiento de los agentes, cuando este llegue a su
destino el_objetivo=ubicacin, el agente se detendr y el objetivo se fijar en 0.
MODELO DE APLICACIN
Una vez revisados los conceptos bsicos de SMA, SIG y urbanismo, vamos
a definir un problema urbano para ser resuelto con la plataforma GAMA,
aplicando los ejercicios realizados en el captulo anterior.
las especies, vamos a modelar cmo las personas se movilizan por las calles
desde su casa hasta los terrenos definidos en la capa manzanas.
El cdigo completo es el siguiente:
/**
* mayorista
* Author: zoila
* Description: trafico en el mayorista
*/
model mayorista
global {
file shape_file_manzanas <file("../includes/mapas/manzana_mayorista.shp");
file shape_file_calles <- file("../includes/mapas/calle_mayorista.shp");
file shape_file_zona <- file("../includes/mapas/mayorista.shp");
geometry shape <- envelope(shape_file_zona);
float step <- 10 #mn;
int personas_numero <- 50;
int hora_actual update: (time / #hour) mod 24;
int min_ini_terr <- 6;
int max_ini_terr <- 8;
int min_sal_terr <- 16;
int max_sal_terr <- 20;
float vel_min <- 1.0 #km / #h;
float vel_max <- 5.0 #km / #h;
graph grafico;
init {
species manzanas {
string type;
rgb color <- #blue ;
aspect base {
draw shape color: color ;
}
species calles {
rgb color <- #black ;
aspect base {
draw shape color: color ;
}
}
species personas skills:[moving] {
rgb color <- #yellow ;
manzanas lugar_vivienda <- nil ;
manzanas lugar_trabajo <- nil ;
int init_terr ;
int fin_terr ;
string objetivo_per ;
point the_target <- nil ;
reflex tiempo_terr when: hora_actual = init_terr and objetivo_per =
"resting"{
objetivo_per <- "working" ;
the_target <- any_location_in (lugar_trabajo);
}
reflex tiempo_casa when: hora_actual = fin_terr and objetivo_per =
"working"{
objetivo_per <- "resting" ;
the_target <- any_location_in (lugar_vivienda);
}
reflex move when: the_target != nil {
do goto target: the_target on: grafico ;
if the_target = location {
the_target <- nil ;
}
}
aspect base {
draw circle(10) color: color;
}
output {
display mayorista type:opengl {
species manzanas aspect: base ;
species calles aspect: base ;
species personas aspect: base ;
}
}