You are on page 1of 37

Agent Based Simulation

J. ngel Gonzlez *, Alberto Donet **


Departamento de Sistemas Informticos y Computacin
Universidad Politcnica de Valencia
Marzo 2015
Resumen
Los modelos basados en agentes nos permiten modelar sistemas sociales
compuestos por agentes (ABMS) con caractersticas bien definidas: autnomos,
proactivos, reactivos, autocontenidos -con tareas bien delimitadas- , sociales,
adaptativos y dirigidos por objetivos que interactan entre s y se influyen
mutuamente, aprendiendo de sus experiencias para poder adaptarse al entorno al
que han sido destinados. Vase que una caracterstica imprescindible para modelar
este tipo de sistemas es la heterogeneidad, que da lugar a la aparicin de la autoorganizacin y otros fenmenos emergentes entre el conjunto de agentes que
componen el sistema, formando sistemas complejos basados en la interaccin de
componentes autnomos que tienen el objetivo de adaptarse a nivel individual o de
poblacin. Nuestro trabajo, por tanto, se centrar en realizar una aproximacin a
este tipo de sistemas, basndonos en el trabajo de (C.M Macal et al., 2010,
Journal of Simulation, 151-162) y analizar un subconjunto de todas las posibles
aplicaciones, que abarcan una amplia gama de reas y disciplinas tales como la
fsica, biologa, redes (propagacin de virus en una red -Uri Wilensky-) ,matemtica,
computacin (autmatas celulares -Juego de la vida-), ciencia de la tierra (cambio
climtico -Uri Wilensky-) , ciencias sociales y sistemas dinmicos entre muchos
otros, empleando y analizando la aplicacin de modelado basado en agentes
NetLogo que ha sido posible gracias a los avances en el desarrollo y diseo de
software orientado a agentes.

PALABRAS CLAVE: ABMS, agentes, interaccin, sistemas sociales.


Abstract
Agent-based models allow us to model social systems composed by agents (ABMS)
with well defined characteristics: autonomous, proactive, reactive, self-contained,
with well delimitadas- tasks, social, adaptive and directed by goals interact and
influence each other learning from their experiences to suit the environment to
which they are destined. See an imperative to model these systems feature is the
heterogeneity, leading to the emergence of self-organization and other emergent
phenomena among the set of agents that compose the system, forming complex
systems based on the interaction of autonomous components which aim to adapt to
the individual or population level. Our work, therefore, will focus on an approach to
such systems, based on work (CM Macal et al., 2010, "Journal of Simulation", 151162) and analyze a subset of all possible applications, covering a wide range of

*Departamento de Sistemas Informticos y Computacin, Universidad


Politcnica
de
Valencia,
Camino
de
Vera,
Valencia,
46022,
jogonba2@inf.upv.es. El autor es estudiante de 3 curso del grado de
ingeniera informtica -Computacin** Departamento de Sistemas Informticos y Computacin, Universidad
Politcnica
de
Valencia,
Camino
de
Vera,
Valencia,
46022,
aldool2@inf.upv.es. El autor es estudiante de 3 curso del grado de
ingeniera informtica -Computacin1

areas and disciplines such as physics, biology, networks (spread of virus in a -uri
Wilensky- network), mathematics, computing (cellular automata -Game life-), earth
science (climate change -uri Wilensky-), social sciences and dynamic systems
among many others, using and analyzing the application of NetLogo agent-based
modeling has been possible thanks to advances in the development and design of
agent-oriented software.

KEYWORDS: ABMS, agents, interaction, social systems

*Departamento de Sistemas Informticos y Computacin, Universidad


Politcnica
de
Valencia,
Camino
de
Vera,
Valencia,
46022,
jogonba2@inf.upv.es. El autor es estudiante de 3 curso del grado de
ingeniera informtica -Computacin** Departamento de Sistemas Informticos y Computacin, Universidad
Politcnica
de
Valencia,
Camino
de
Vera,
Valencia,
46022,
aldool2@inf.upv.es. El autor es estudiante de 3 curso del grado de
ingeniera informtica -Computacin1

ndice
1.

Introduccin

2.

Definicin y componentes ABMS


2.1. Caractersticas de un Agente
2.2. Interaccin entre Agentes
2.3. Entorno

3. Diseo e implementacin de un ABMS


4. Anlisis de NetLogo
4.1. Utilidad de la herramienta
4.2. Proyectos Recientes
5. Anlisis de aplicaciones
5.1. Juego de la vida
5.1.1. Agentes e interacciones
5.1.2. Diferencias con ABMS actuales
5.2 Bug Hunt Speeds
5.2.1. Agentes e interacciones
5.2.2. Implementacin NetLogo
5.2.3. Casusticas y resultados de experimentos
6. Conclusiones
7. Anexo
7.1. Implementaciones.
7.2. Manual NetLogo
7.2.1. Vistas
7.2.1.1. Interfaz
7.2.1.2. Ajustes del entorno
7.2.1.3. Ajustes de la simulacin
7.2.1.4. Informacin
7.2.2. Agentes y propiedades
7.2.2.1. Propiedades adicionales
7.2.2.2. Razas
7.2.3. Primitivas bsicas
7.2.4. Procedimientos
7.2.5. Variables
7.2.6. Listas
7.2.7. Sentencias condicionales, procedimientos con retorno y
bucles

8. Bibliografa

1. Introduccin
El modelado y simulacin
basado en agentes- a partir de
ahora ABMS - ofrece una manera
de modelar sistemas sociales
compuestos por agentes que
interactan y se influencian entre
ellos , aprendiendo de sus
experiencias y adaptando su
comportamiento
para
convivir
mejor en el entorno al que han
sido destinados, tanto de forma
individual como colectiva. Dichos
agentes
poseen
ciertas
caractersticas como: autonoma,
capacidad social a nivel de
cooperacin,
negociacin
y
coordinacin y capacidad de
adaptacin,
entre
otras.
Modelando
estos
agentes
mediante simples reglas y de
forma individual (primando la
heterogeneidad entre la poblacin
de agentes) se desarrollan una
serie de interacciones que generan
patrones, estructuras, influencias
y comportamientos emergentes
que no han sido explcitamente
programados en los modelos pero
surgen entre el conjunto de
agentes de la poblacin.
En el marco citado se desarrolla
la tecnologa ABMS, que ha sido
utilizada en una gran variedad de
disciplinas y reas como el
modelado del comportamiento del
mar (Hill et al, 2006), el desarrollo
de guerras biolgicas (Carley et al,
2006) incluso la comprensin de la
cada de civilizaciones antiguas
(Kohler et al, 2005). En dichos
casos slo ha sido necesario

implementar
los
detalles
esenciales de los sistemas, a partir
de los cuales se han dado ciertas
interacciones y comportamientos
que
han
ofrecido
posibles
soluciones
a
los
problemas
planteados.
Existen
incluso
sistemas basados en agentes en
los que los agentes son modelados
con un alto nivel de detalle (con el
coste computacional que ello
conlleva) y que han sido posibles
gracias a los avances dados en el
desarrollo de software orientado a
agentes y en la ingeniera del
software orientada a agentes, en
los nuevos enfoques de ABMS y en
el
incremento
del
poder
computacional de los dispositivos
actuales.
Por todos los detalles dados y
debido a las posibilidades de los
sistemas basados en agentes, el
inters en dicha rea se encuentra
en constante crecimiento, que
puede ser comprobado viendo la
gran cantidad de conferencias,
artculos
de
investigacin
y
jornadas acadmicas en los que se
emplean ABMS a una amplia gama
de aplicaciones (ABMS Google
Scholar, 603.000 resultados).
En ste trabajo se realizar una
sntesis del artculo (C.M Macal et
al., 2010, Journal of Simulation,
151-162) y se comentar un
subconjunto de todas las posibles
aplicaciones empleando software
orientado a agentes (NetLogo) : el
conocido "Game of Life" desde un
enfoque orientado a agentes
4

comentando ciertas caractersticas


de ste, as como un modelo
NetLogo que simula la seleccin
natural entre una especie presa y
una especie predadora, donde
comentaremos su implementacin
y los resultados de diversas
casusticas probadas sobre el
modelo.
Para todos los cdigos
empleados en el presente trabajo,
se adjuntarn links al GIT de uno
de los autores en el apartado
Implementaciones
del
anexo,
adems acompaarn al PDF en el
.zip
del
proyecto
en
su
correspondiente formato, dando la
implementacin del modelo Bug
Hunt Speeds en cdigo NetLogo y
"Game of Life" en Java.

2. Definicin y componentes
ABMS
Los modelos basados en
agentes tambin son tratados en
las investigaciones como sistemas
complejos, sistemas adaptativos
complejos, vida artificial, entre
otros. Sin embargo a pesar de que
todos los sistemas mencionados
consisten en la interaccin de
agentes autnomos, algunos de
ellos
tienen
caractersticas
especiales como los sistemas
adaptativos complejos en los que
dichos agentes tienen la capacidad
adicional de adaptarse a su
entorno tanto de forma individual
como colectiva.
Las investigaciones sobre dichos
sistemas han tenido como objetivo
identificar
los
principios
universales que permiten, a partir
de
un
modelado
mediante
sencillas reglas (con los aos los

entornos de desarrollo, la potencia


computacional
y
las
nuevas
herramientas orientadas a ABMS
han
permitido
expandir
las
capacidades de dichos agentes y
por tanto complicar tales reglas),
generar fenmenos emergentes
tales como la auto-organizacin, la
adaptacin a los entornos y la
aparicin
de
comportamientos
emergentes que no haban sido
programados explcitamente.
Siguiendo la convencin del
artculo base de este trabajo (C.M
Macal et al., 2010, Journal of
Simulation, 151-162), emplearemos

el trmino ABMS para referirnos


tanto a simulaciones basadas en
agentes donde se modela un
proceso dinmico dependiente del
tiempo
como
para
otras
aplicaciones ms generales que,
del mismo modo, estn basadas
en agentes.

De la misma forma, sean tales


simulaciones o aplicaciones ms
generales, siempre que estn
basadas en modelos de agentes,
estarn
compuestas
de
3
componentes principales que se
comentarn
en
el
presente
trabajo: un conjunto de agentes
con atributos y comportamientos
(explcitamente programados) que
darn lugar a una serie de
5

interacciones que definirn la


forma y entre que agentes
existirn dichas interacciones y un
entorno en el que convivirn los

agentes y se dar soporte tanto a


la interaccin agente-agente como
a la interaccin agente-entorno.

2.1 Caractersticas de un agente


Los agentes constituyen uno de
los 3 componentes necesarios en
un ABMS. Entre sus principales
caractersticas
destacan
la
reactividad: siendo capaces de
reaccionar tanto a las acciones
que realicen otros agentes como a
cambios en el entorno al que han
sido destinados, la proactividad:
dando a los agentes la capacidad
de tomar decisiones por si mismos
y tomar la iniciativa en las
situaciones que lo requieran y la
capacidad social: que permitir
a los agentes interactuar con los
dems agentes del entorno para
acciones
tales
como
la
coordinacin,
cooperacin
y
negociacin, imprescindibles para
la supervivencia en un entorno. Sin
embargo,
la
caracterstica
principal
que
puede
ser
encontrada en toda la literatura
relacionada es la autonoma,
caracterstica que permite a los
agentes actuar por si mismos de
forma autnoma como respuesta a
las situaciones que pueden darse
en el entorno y que afectarn a
dicho agente.
A pesar de lo claro que puede
resultar el trmino autonomay
las
dems
caractersticas
comentadas (existen muchas otras
que sern analizadas en el
presente apartado), en la literatura
no hay una definicin precisa de lo
que debe ser un agente en lo que

a
caractersticas
se
refiere,
variando dicha
definicin
en
funcin
del artculo, algunos
ejemplos son: Jennings (2000)
quien provee una definicin en la
que el agente nicamente debe
enfatizar la caracterstica de la
autonoma independientemente
de todas las dems o (Bonabeau,
2001) que considera como agente
a
cualquier
componente
independiente (pieza de software,
modelo, etc) entre otros que
consideran
necesarias
caractersticas como la capacidad
social para provocar interacciones
entre los agentes.
Debido a las discrepancias
existentes entre los autores,
nosotros nos ceiremos a la
definicin empleada en el artculo
base de C.M Macal et al, quienes
consideran que los agentes deben
poseer
las
siguientes
caractersticas esenciales:

Auto-contenido/Modular:
Implica que el agente tiene
fronteras,
haciendo
referencia a que debe
poseer un conjunto de
tareas bien definidas de
forma
que
sea
fcil
determinar qu pertenece al
agente y qu no pertenece
a ste. Esta caracterstica
facilita tambin que los
agentes
puedan
ser
conocidos y distinguidos
6

unvocamente
por
otros
agentes.
Autnomo:
Actuando
independientemente
del
entorno en el que se
encuentre y de los agentes
que lo rodeen para dar
respuesta a las situaciones
que puedan afectar a dicho
agente.
Dirigido por objetivos: El
agente debe tener metas
que alcanzar mediante sus
comportamientos
(que
pueden ser influenciados
por la interaccin con otros
agentes). Esto permite a un
agente
ajustar
sus
comportamientos
y
respuestas
a
ciertas
situaciones
en
futuras
interacciones para alcanzar
tales objetivos.
Capacidad social: A pesar
de que pueda parecer
imprescindible debido al
marco
que
estamos
tratando, algunos autores
no consideran la capacidad
social como un elemento
esencial en el desarrollo de
los agentes. Esta capacidad
permite a los agentes tener
interacciones
dinmicas
entre ellos e influenciarse
en sus comportamientos
mediante protocolos para la
interaccin entre agentes
(protocolos
de
comunicacin, lenguajes de
contenido, ontologas, etc),
por ello ser necesario que
los
agentes
tengan
la
capacidad de reconocer y
distinguir a los dems
agentes, para conocer la

procedencia
o
el
destinatario
de
un
determinado mensaje, entre
otras acciones.
Podemos hablar tambin
de
caractersticas
supeditadas a la poblacin
de agentes y ya no a un
agente en concreto, como
puede
ser
la
heterogeneidad. De forma
contraria por ejemplo a
simulaciones
moleculares
dinmicas en las que se
estudian las interacciones
entre
partculas
homogneas,
en
las
simulaciones basadas en
agentes
es
necesario
considerar
una
amplia
diversidad de agentes entre
una determinada poblacin.
Es interesante observar
como las caractersticas y
comportamientos de los
agentes varan en funcin
del grado de sofisticacin
con
el
que
ha
sido
desarrollado cada agente,
con la informacin que se
ha tenido en cuenta a la
hora del modelado e incluso
de eventos pasados que
sirven al agente para la
toma de decisiones. Por
tanto las caractersticas de
un agente pueden ser:
estticas, que no cambiarn
durante la simulacin
o
dinmicas,
cambiando
conforme vaya avanzando
la simulacin.
Una arquitectura tpica de
agente es la siguiente:

informarse, cooperar, coordinarse


e incluso realizar negociaciones
para un fin comn.
Los Sistemas Basados en
Agentes
(ABS)
son
sistemas

2.2
Interaccin
agentes

entre

La simulacin basada en
agentes est constituida en base a
las relaciones e interacciones
entre los distintos agentes que
forman parte del entorno. De
modo
que,
mediante
esas
interacciones, se consigue un
objetivo comn que no sera
alcanzable de manera individual.
Esta capacidad de interaccin
entre agentes es lo que se llama
sociabilidad (tambin recibe el
nombre de capacidad social). Cada
agente solo posee informacin
local, a la que solo l tiene acceso,
por lo quecada agente necesita
comunicarse con el resto de
agentes
del
entorno
para

descentralizados. No hay una


autoridad central que informe a
todos los agentes y que controle
su comportamiento en el esfuerzo
de mejorar el rendimiento. Es cada
agente el que interacta con los
dems agentes. Aunque no es
completamente cierto que todos
interacten entre ellos, puesto que
normalmente se comunican con un
subconjunto de esos agentes, lo
que generalmente se conoce como
el vecindario.
El conjunto de
agentes que forman parte de ese
vecindario va cambiando en el
tiempo conforme se va ejecutando

la simulacin y los agentes se van


desplazando por el entorno. Por
ejemplo, los agentes vecinos de
otro agente pueden ser aquellos
que se encuentren localizados
fsicamente cerca, o aquellos que
cumplen una relacin respecto del
agente (esta relacin debe fijarse
con anterioridad).
Lo ms importante a la hora de
modelar las interacciones entre los
agentes son las especificaciones
de quin es el agente que
interacta, o a quin va dirigido, y
los mecanismos de interaccin.
Estos mecanismos, que explican
cmo
los
agentes
estn
conectados, se conocen como
topologa o conectividad. Dos
ejemplos
de
topologa
son
Knowledge Query Management
Language (KQML), basado en
performativas; y Foundation for
Intelligent Physical Agents (FIPA),
basado en actos de habla con
protocolos de interaccin de alto
nivel (conversaciones).
Originalmente, los modelos
espaciales basados en agentes
eran implementados mediante
autmatas celulares (AC), que
representa la interaccin entre
agentes utilizando la informacin
local de una celda (un agente por
celda) y la informacin que
proporciona el vecindario (celdas
vecinas), donde existen dos tipos
muy conocidos: vecindario de
Moore y vecindario de von
Neumann. Un ejemplo de AC con
agentes inmviles es El juego de
la vida de John Conway, del cual
hablaremos en futuros apartados.
En cuanto a ejemplos de AC con
agentes
mviles,
tenemos
topologas en red, euclidiana y

sistemas
de
informacin
geogrfica (GIS), entre otras.

2.3 Entorno
Se ha podido comprobar a lo
largo del trabajo que los agentes
interactan entre ellos y/o con su
entorno.
Dicho entorno puede ser
utilizado de diversas formas para
realizar interacciones, bien sean
simples, como por ejemplo para
proveer informacin espacial de un
agente con respecto a los dems
agentes (vase el ejemplo en
clases de teora de los robots y las
piedras
dejando
partculas
radioactivas),
usando
esta
alternativa normalmente para que
los agentes sigan el movimiento
de los dems agentes que
avanzan de una forma correcta a
travs de un determinado entorno.
O de formas ms complejas (que
conllevan
un
modelado
ms
complejo) como por ejemplo los
entornos empleados en modelos
de
simulacin
hidrolgica
y
atmosfrica, en los cuales es
comn
encontrarse
con
limitaciones de las acciones de los
agentes por parte del entorno.
9

Estas interacciones entre los


agentes y el entorno tambin
dependen de las caractersticas
del entorno, normalmente los
entornos son complejos y los
agentes no suelen tener control
total sobre ste, pudiendo fallar
las acciones que realice el agente
sobre
dicho
entorno,
en
conclusin, los entornos son no
deterministas y los agentes deben
estar preparados ante posibles
fallos. Entre las propiedades de los
entornos
podemos
destacar:
accesibilidad, dependiendo de si
el
agente
puede
obtener
informacin completa, exacta y
actualizada del entorno (entornos
complejos suelen ser inaccesibles),
determinismo,
si
cualquier
accin por parte de un agente
tiene un efecto garantizado, el
entorno ser determinista (el
mundo fsico es indeterminista),
dinamicidad, si en el entorno se
producen cambios no nicamente
provocados por los agentes el
entorno ser dinmico, en otro
caso ser esttico y continuidad,
si hay un nmero fijo de acciones
y percepciones en el entorno, ste
ser discreto, en otro caso ser un
entorno continuo.

3 Diseo e implementacin
de un ABMS
Para realizar el diseo de un
ABMS, es necesario contestar a
una serie de preguntas que nos
ayudaran a prepararlo:
Qu problema debemos
resolver? Y, qu cuestiones
debe
ser
capaz
de
solucionar el modelo?
Qu funcin desarrollarn
los agentes? Qu atributos

de
los
agentes
sern
solamente
descriptivos?
Cules sern calculados y
actualizados
dinmicamente?
En qu entorno se van a
mover los agentes? Cmo
van a interactuar con l?
Qu
decisiones
podrn
tomar los agentes? Qu
acciones realizarn? Cmo
debern comportarse?
Cmo van a interactuar
entre s los agentes?
Cmo validar el modelo?

Encontrar la respuesta a estas


preguntas ser fundamental para
plantear el diseo. En general, las
metodologas de diseo altamente
iterativas parecen ser las ms
eficaces para el desarrollo del
modelo.
La comunicacin de un modelo,
la hiptesis de proyecto, as como
los elementos detallados son
esenciales si el modelo va a ser
posteriormente comprendido y/o
reutilizado. Para ello, Grimm et al
(2006) presenta un protocolo
estndar
para
describir
los
modelos basados en agentes, con
la esperanza de que sea un primer
paso para establecer un formato
comn.
En cuanto a la implementacin,
el modelado basado en agentes
puede implementarse empleando
diseo software y herramientas
especializados, que se ocupan de
los requisitos del modelo, o
utilizando
lenguajes
de
programacin. Como ejemplo ms
sencillo tenemos las Hojas de
clculo de Microsoft Excel, aunque
los
modelos
resultantes

10

generalmente
ofrecen
una
diversidad entre agentes bastante
limitada, adems de restringir los
comportamientos y de tener una
escalabilidad muy reducida. Un
ejemplo de software especializado
es la herramienta JASON (utilizada
en las prcticas de Agentes
Inteligentes, Ingeniera Informtica
Rama Computacin - ), que
permite realizar proyectos de
modelado de agentes, como el
robot
recogedor
de
basura
desplazndose en un entorno
unidimensional y bidimensional.

modificacin
y
ejecucin
de
modelos de una forma fcil y
sencilla;
de
hecho,
NetLogo
incluye tras su instalacin y
ejecucin (ejecutable slo si se
tiene instalada una Mquina
Virtual de Java -JVM) una coleccin
de modelos que pueden ser
alterados y que pertenecen a
mbitos muy diversos, tanto de las
ciencias
sociales
(incluye
matemticas, fsica y qumica,
biologa, medicina, computacin,
economa y psicologa social)
como de la naturaleza.

4. Anlisis de Netlogo

Es necesario remitir al lector a la


siguiente direccin: Diccionario
NetLogo , diccionario del manual
oficial de NetLogo, en caso de que
se quiera profundizar ms que lo
comentado en la sntesis del
manual realizada en el presente
trabajo.

En los siguientes apartados


vamos a proceder a describir,
analizar y explicar la utilidad de la
herramienta NetLogo en su versin
5.2, que es la ms reciente del
software hasta la fecha, realizando
primero una aproximacin al
manual de NetLogo (siendo ste
bastante extenso, se ha optado
por realizar una sntesis del mismo
y adjuntarla en el anexo del
presente documento) y analizando
posteriormente cundo puede ser
conveniente emplear este tipo de
software, as como algunos de los
proyectos que actualmente hacen
uso de l. Fue el matemtico,
informtico
y
profesor,
Uri
Wilensky, quien cre en el ao
1999 esta herramienta. Es la
generacin de una serie de
modelados
multi-agente
que
empez
con
StarLogo,
pero
aadiendo
funcionalidades,
caractersticas
nuevas
y
un
lenguaje rediseado y con interfaz
de usuario.
NetLogo es una herramienta que
sirve para modelar sistemas
complejos que evolucionan en el
tiempo,
como
pueden
ser
fenmenos naturales o sociales,
entre otros. Permite la creacin,

4.1.
Utilidad
herramienta

de

la

Una vez realizada la sntesis del


manual, cuyo conocimiento es
necesario para comprender las
aplicaciones
a
comentar
en
apartados posteriores, surge la
duda de cundo y por qu
emplear simulaciones en vez de
representar mediante modelos
matemticos los problemas a los
que queremos dar respuesta?.
Segn la concepcin semntica de
las
teoras
cientficas,
la
representacin de problemas se
suele
tratar
mediante
la
construccin
de
modelos
explicativos
(modelos
matemticos)
simblicos,
expresados mediante ecuaciones
matemticas o estadsticas, sin
embargo no es la nica alternativa
posible y, de hecho, tal modo de

11

representacin no es factible
cuando
la
modelizacin
matemtica
es
demasiado
compleja y/o es imposible tener en
cuenta todos los factores del
entorno que influirn en la
solucin. Es aqu cuando es
necesaria la lgica para desarrollar
modelos de simulacin social,
construyendo una representacin
del sistema a partir de la
observacin de fenmenos propios
de dicho sistema. Por tanto, la
simulacin social consiste:
1. Formalizar
teoras
sobre los procesos
del problema.
2. Realizar
experimentos a partir
de
dicha
formalizacin.
3. Observar
generacin de
fenmenos
emergentes.

la
los

Para
ello
emplearemos
la
herramienta comentada, NetLogo,
realizando experimentos sobre
poblaciones y observando los
resultados sobre los fenmenos
emergentes generados.

segn el buscador de Google,


encontramos el uso de NetLogo
como un entorno multiagente para
el desarrollo de modelos de
polielectrolitos definiendo agentes
simples
que
evolucionan
de
acuerdo a las reglas de un
autmata celular para representar
la formacin de cadenas de estos
tipos de polmeros. Otro de los
proyectos acadmicos en los que
se ha empleado, ha sido en la
simulacin de redes de Petri,
trabajo en el que se presenta una
propuesta para generalizar el
modelado de las redes de Petri
usando algoritmos genticos.
Como se ha visto, su utilizacin es
escasa, restringindose su uso al
mbito acadmico, emplendose
tambin como recurso educativo
para la introduccin a los sistemas
basados en agentes, objetivo para
la
cual
fue
desarrollada
la
herramienta.

5 Anlisis de aplicaciones

4.2. Actividades recientes


NetLogo es empleado actualmente
en algunos proyectos (nmero
reducido) normalmente en el
mbito acadmico, siendo escasa
su utilizacin en software que se
encuentre en fase de produccin,
sirviendo de base para realizar
simulaciones
o
incluso
proporcionando conceptos a otros
entornos de simulacin basada en
agentes como son REPAST y
MODELING4ALL.
Entre los proyectos que lo
emplean, con ms relevancia

El modelado basado en agentes


ha sido usado en una gran
variedad de reas como la fsica,
la biologa, las ciencias sociales e
incluso
las
ciencias
de
la
computacin
ofreciendo
una
estructura elegante y minimalista
para modelar sistemas complejos
que nos ayuden a responder y
comprender cuestiones del mundo
real relacionadas con dichas reas.
Diversos autores han realizado
ya sus aproximaciones mediante
modelado basado en agentes a
cuestiones
que
requeran
12

comprensin, siendo necesario


simular el comportamiento del
sistema
para
observar
su
evolucin. Entre stos podemos
destacar
aquellos
que
han
realizado trabajos similares al que
realizaremos
en
el
presente
documento como son: (Alber et al,
2003)
empleando
autmatas
celulares para modelar sistemas
celulares (nosotros analizaremos
desde un enfoque basado en
agentes un autmata celular
bidimensional muy conocido como
es "Game of Life").
Una
vez
realizada
la
aproximacin a los ABMS y
comentadas sus caractersticas,
componentes y algunas de sus
aplicaciones interesantes, estamos
en condiciones de poder analizar
dos de las posibles aplicaciones de
dichos sistemas, entre las que se
encontrarn: el autmata celular
bidimensional con las reglas de
Conway's "Game of Life" , el cual
explicaremos
brevemente
y
comentaremos sus diferencias con
los ABMS actuales, y un modelo ya
programado de NetLogo llamado
Bug
Hunts
Speed,
donde
realizaremos un anlisis ms
profundo (aplicacin principal del
presente trabajo) adems de
comentar una implementacin en
el
software
ABMS
NetLogo
realizada por Uri Wilensky.

celular bidimensional, capaz de


computar todo aquello que la
Mquina de Turing poda. En este
apartado hablaremos de cmo se
simula el autmata celular del
juego de la vida mediante
agentes.
Y,
adems,
comentaremos las diferencias del
ABMS que surge del juego de la
vida con los ABMS actuales.

5.1.1
Agentes
interacciones

El juego de la vida se desarrolla


sobre una cuadrcula, donde cada
celda es un agente inamovible que
se comunica con los agentes
vecinos. Cada agente comprueba
su estado, as como el estado de
los vecinos que lo rodean para
asignarse a ellos mismos un
estado u otro (vivo o muerto).
Para realizar la asignacin para la
siguiente iteracin hay una serie
de reglas, estas son las siguientes:

si hay menos de dos


agentes
vecinos
vivos,
entonces el agente muere

si hay ms de tres agentes


vecinos vivos , el agente
tambin muere

si hay exactamente dos


agentes vecinos vivos, el
agente mantiene el mismo
estado

si hay exactamente tres


agentes
vecinos
vivos,
entonces el agente cambia
su estado y vive

5.1. Juego de la vida


En 1970, el matemtico John
Conway cre un juego de la vida
basado en tres reglas sencillas:
nacimiento,
muerte
y
supervivencia. El juego de la vida
originalmente es un autmata

13

Todos los agentes comprueban las


reglas
en
paralelo
y
sin
detenimiento. El resultado de esta
ejecucin es la aparicin de
diversos patrones, como pueden
ser gliders (estructuras que se
desplazan) o blinkers (estructuras
que rotan entre una orientacin
horizontal o vertical).

5.1.2. Diferencias con ABMS


actuales

El juego de la vida fue una gran


innovacin en su origen, pero
presenta algunas diferencias con
los AMBS actuales. Aunque sigue
considerndose como un ABMS,
las caractersticas que presenta el
juego de Conway son lo ms
bsicas
posibles.
Al
basarse
simplemente en 3 reglas para su
funcionamiento, no cumple la
condicin de que los agentes se
comuniquen entre s o con su
entorno. Por el contrario, s la
cumplen los ABMS de la actualidad
de manera que los agentes
pueden organizarse y coordinarse
para conseguir un objetivo comn
y ms complejo que el del juego
de la vida. En ste, todos lo
agentes son inamovibles y se rigen
por las mismas reglas, mientras
que en los ABMS actuales los
agentes pueden desplazarse por
su entorno e incluso cada uno
puede comportarse de una forma
totalmente distinta a cualquier
otro. Adems, como cada agente
en el juego de la vida necesita del
estado de sus vecinos para poder
seleccionar
su
prxima
accin/estado,
no
podemos
considerar a estos agentes como
autnomos.
Vistas
estas
diferencias, podemos concluir que
los ABMS actuales son ms

complejos que el juego de la vida


de Conway (1970).

5.2 Bug Hunt Speeds


La parte final de este trabajo se
corresponde con el anlisis de uno
de los modelos presentes por
defecto en la biblioteca de
modelos
de
NetLogo,
concretamente el modelo Bug
Hunt Speeds. El modelo muestra el
resultado de la seleccin natural
sobre una especie Bug presa de
otra
predadora
Bird,
demostrando
cmo,
solo
los
individuos que alcancen una
mayor velocidad en la huida
sobreviven
de
la
especie
depredadora. Este modelado de la
seleccin natural permite explicar
la existencia de adaptaciones por
parte de los individuos presa,
quines, si no incrementan su
velocidad
de
huida
sern
rpidamente
erradicados,
simulando la adaptacin y la
evolucin
gentica
mediante
herencia de variacin a travs de
los descendientes de los individuos
de una determinada poblacin . En
el modelo, la especie presa, se
divide
inicialmente
en
6
subespecies
representadas
mediante diferentes colores, que
tendrn velocidades diferentes de
huida (representando por tanto
cierta variacin fenotpica) y ser
posible
observar
cmo
la
poblacin de aquellas subespecies
con una velocidad de huida menor
se ver reducida con mayor
rapidez que la poblacin de las
dems.

14

Una vez comprendido el objetivo


del modelo se pasan a comentar
los aspectos tcnicos del mismo.
Nos centraremos principalmente
en las grficas que nos permiten
observar la evolucin del entorno,
existen 3 grficas diferentes.
Avg.Bug Speed vs. Time que
mostrar la velocidad media de los
Bug con respecto al tiempo, es
interesante observar dicha grfica
porque se ver cmo, conforme se
va reduciendo la poblacin de
aquellas subespecies de menor
velocidad
en
la
huida,
se
incrementar la velocidad media
de la especie, al existir un mayor
nmero de individuos en aquellas
poblaciones de mejor eficacia
biolgica en el entorno que en
aquellas poblaciones con peores
cualidades.
Current
Bug
Population mostrar la cantidad de
individuos que quedan en cada
una de las subespecies y Bugs
Caught que indicar la cantidad de
Bugs
de
cada
subespecie
capturados por Bird siendo este
valor la diferencia entre el nmero
de individuos en la poblacin
inicial de cada especie y el nmero
de individuos capturados de cada
subespecie.
Tambin
existen
diversos
deslizadores
que
permiten
modificar
el
comportamiento de la simulacin,
siendo el ms importante initialbugs-each-speed
que
permite
configurar el nmero de bugs a
generar
de
cada subespecie
(distinguida por la velocidad).
Adems,
ser
el
agente
observador
el
encargado
de
desplazar la especie predadora por
el entorno, si el observador se

comportase como se comportara


el predador en una situacin real,
seran las poblaciones con una
menor
capacidad
de
huida
aquellas
que
se
extinguiran
primero ya que la tendencia de
ste ser ir a por aquellos
individuos de movimiento ms
lento, sin embargo, debido a la
posibilidad de actuar como el
predador, podemos alterar el
funcionamiento normal y observar
qu ocurrira en un conjunto
variado de casos.

5.2.1.
Agentes
interacciones

A pesar de que en los modelos de


NetLogo existen los mismos tipos
de agentes: patches (mundo),
turtles y links(interacciones); nos
vamos a centrar en los tipos bug y
bird que aparecen en esta
simulacin.
En cuanto al tipo bird, tan solo va
a existir uno de ellos cuyo
desplazamiento y acciones van a
ser controlados por el usuario. El
agente tipo bird es la especie
depredadora,
cuyo
objetivo
principal va a ser alimentarse
cazando agentes de tipo bug. El
depredador va a tener dos
posibles acciones: desplazarse y
alimentarse. La primera de ellas
va a realizarse mediante la
posicin del mouse, siempre que
se encuentre localizado en el
interior del mundo, es decir, el
predador va a ser el propio
puntero. La segunda accin, la de
alimentarse, va a tener efecto
cada vez que el usuario haga click
sobre un agente bug o en el caso
de que el bird sobrepase a un bug

15

estando el botn izquierdo del


mouse pulsado; cuando esto
ocurre,
el
agente
indicado
desaparecer y un nuevo agente
bug aparecer a partir de otro
para mantener la poblacin de
presas .
En cuanto al segundo tipo de
agentes, bug, son las presas del
agente tipo bird. Existirn tantos
como nmero de ellos se haya
seleccionado en la variable initialbugs-each-speed
para
cada
subespecie. Estos agentes son
autnomos y su funcin consiste
en desplazarse aleatoriamente por
el mundo e intentar no ser
cazados por el predador (existirn
subespecies con mejor o menor
capacidad para llegar a cumplir
esta tarea). Para poder comprobar
si el depredador est cerca y
escapar de l, el agente bug es
capaz de interactuar con el
entorno mediante un pequeo
campo-cono de visin. De esta
manera puede comprobar si el
depredador se encuentra enfrente
y, si es as, moverse hacia el
sentido opuesto para escapar.
Cuando el predador haya cazado a
la presa, y por lo tanto un agente
bug haya sido eliminado, se crear
un nuevo agente bug a partir de
un bug todava existente al azar y
de la misma subespecie del cual
ha sido creado. Esto implica que
cuando la ltima presa de una
subespecie haya sido cazada, esa
subespecie se habr extinguido y
no podr volver a aparecer.

5.2.2.
NetLogo

Implementacin

El modelo viene por defecto en la


biblioteca de modelos de NetLogo,
por lo que ya existe una
implementacin de dicho modelo
creada por Uri Wilensky, autor del
software ABMS que estamos
tratando
en
el
presente
documento. Comentaremos en
este apartado, paso a paso el
cdigo
empleado
para
la
implementacin
del
modelo,
centrndonos
en
aquellos
fragmentos ms importantes y
comentando
de
una
forma
superficial
aquellos
menos
relevantes.
breed [predators predator]
breed [bugs bug]
bugs-own [
speed ;; either 1, 2, 3, 4, 5, or 6
]

Primero se crean 2 razas para


realizar una distincin sobre los
agentes turtle, dando lugar a 2
tipos de agentes especficos de la
simulacin Bugs y Predators a los
que posteriormente se les dar un
shape diferente y los nombres
de bug y bird (en lneas de cdigo
posteriores)
respectivamente.
Adems se le asignar una
propiedad caracterstica a la raza
Bugs que ser la velocidad (de 1 a
6), dicha propiedad marcar el
comportamiento de la simulacin y
la divisin en subespecies dentro
de la misma raza ya que cada
individuo tendr una velocidad
diferente (pertenecer a una
subespecie diferente) y por ello
una capacidad de supervivencia
diferente (recordemos que en este
entorno nicamente es requisito
necesario
para
sobrevivir
la
velocidad, no entran otros factores
como podran ser el camuflaje o la
resistencia).
globals [
total-speed-6-caught
;; keeps
track of the number of bugs caught
with speed of 6

16

total-speed-5-caught
track of the number of
with speed of 5
total-speed-4-caught
track of the number of
with speed of 4
total-speed-3-caught
track of the number of
with speed of 3
total-speed-2-caught
track of the number of
with speed of 2
total-speed-1-caught
track of the number of
with speed of 1
]

;; keeps
bugs caught
;; keeps
bugs caught
;; keeps
bugs caught
;; keeps
bugs caught
;; keeps
bugs caught

Se definen tambin variables


globales que, tal como est
comentado, indican el nmero de
Bugs
capturados
de
cada
velocidad.
Pasaremos a comentar el mtodo
setup, que se emplea como
inicializador de las variables y
agentes del
modelo (turtles,
patches y links).

to setup
clear-all
set total-speed-6-caught 0
set total-speed-5-caught 0
set total-speed-4-caught 0
set total-speed-3-caught 0
set total-speed-2-caught 0
set total-speed-1-caught 0
set-default-shape bugs "bug"
set-default-shape predators "bird"
ask patches [ set pcolor white ] ;;
white background
foreach [1 2 3 4 5 6] [
create-bugs initial-bugs-each-speed
[ set speed ? ]
]
ask bugs [
setxy random-xcor random-ycor
set-color
]

;; the predator breed contains one


turtle that is used to represent
;; a predator of the bugs (a bird)
create-predators 1 [
set shape "bird"
set color black
set size 1.5
set heading 315
hide-turtle
]
reset-ticks
end

Inicialmente se limpia el entorno


mediante la instruccin clear-all ya
comentada y se les asigna un
valor 0 a las variables comentadas
antes total-speed-N-caught que
representaban el nmero de Bugs
de cada subespecie cazados.
Posteriormente se les asigna una
nueva forma a las razas creadas
mediante la directiva set-defaultshape,
bug
y
bird,
para
distinguirlas durante la simulacin,
tambin se colorea el entorno de
blanco para hacer ms visible la
simulacin.
La parte ms relevante del
procedimiento
setup
es
la
siguiente, donde se lleva a cabo la
creacin
de
las
turtles
pertenecientes a la raza Bugs y a
la raza Predators. Para crear los
bugs, se emplea la directiva
create-nombrederaza (bugs en
este caso) seguida del nmero de
individuos a generar de dicha raza,
que viene dado en este caso por el
valor del deslizador comentado en
la seccin anterior initial-bugseach-speed, dndole el valor a la
propiedad speed del iterador del
bucle mediante el smbolo ?, como
se ha comentado en la seccin 4.7
del presente trabajo. Para cada
bug generado, se sita en una
posicin aleatoria dentro del
entorno.
Finalmente,
para
la
creacin del turtle Predator se
procede de la misma forma que en
la creacin de los Bugs, mediante
la directiva create-nombrederaza
se le dan tambin las propiedades

17

deseadas, destacando la ejecucin


de la accin hide-turtle ya que no
debe ser visible si el cursor no est
posicionado
sobre
el
agente
mundo.
El siguiente procedimiento a
comentar es el procedimiento go.
to go
;; use EVERY to limit the overall speed
of the model
every 0.03 [
check-caught
move-predator
;; recolor the bugs in case the user
changed SPEED-COLOR-MAP
ask bugs [ set-color move-bugs]
;; advance the clock without
plotting
tick-advance 1
;; plotting takes time, so only plot
every 10 ticks
if ticks mod 10 = 0 [ update-plots ]
]
end

En este procedimiento cada 0.03


segundos
se
llaman
a
los
procedimientos check-caught y
move-predator,
que
se
comentarn
despus
y
que
actualizan las estadsticas de Bugs
capturados (entre otras acciones
que se comentarn) y llevan a
cabo el movimiento del turtle
Predator (situndolo en la posicin
del
cursor
cuando
ste
se
encuentra
sobre
el
mundo)
respectivamente.
Tambin,
tal
como est comentado, se colorean
los Bugs si es necesario (si se han
realizado
cambios
sobre
las
opciones de la simulacin) y se
avanza la simulacin en 1 tick.
A continuacin comentaremos los
2
procedimientos
que
son
llamados desde el procedimiento
anterior, move-predator y checkcaught.
El primero de ellos es muy simple:
to move-predator
ask predators [

setxy mouse-xcor mouse-ycor


;; only show the predator if the
mouse pointer is
;; actually inside the view
set hidden? not mouse-inside?
]
end

Se mover el agente Predator


cuando el cursor est situado
sobre
el
mundo
en
las
coordenadas mouse-xcor y mouseycor a la posicin indicada por
dichas coordenadas y se mostrar
el agente si y solo si el cursor
cursor se encuentra sobre el
entorno.
El mtodo check-caught es algo
ms elaborado:
to check-caught
if not mouse-down? or not mouseinside? [ stop ]
let prey [bugs in-radius (size / 2)] of
one-of predators
;; no prey here? oh well
if not any? prey [ stop ]
;; eat only one of the bugs at the
mouse location
ask one-of prey [
if speed = 6 [ set total-speed-6caught total-speed-6-caught + 1 ]
if speed = 5 [ set total-speed-5caught total-speed-5-caught + 1 ]
if speed = 4 [ set total-speed-4caught total-speed-4-caught + 1 ]
if speed = 3 [ set total-speed-3caught total-speed-3-caught + 1 ]
if speed = 2 [ set total-speed-2caught total-speed-2-caught + 1 ]
if speed = 1 [ set total-speed-1caught total-speed-1-caught + 1 ]
die
] ;; replace the eaten bug with a
random offspring from the remaining
population
ask one-of bugs [ hatch 1 [ rt random
360 ] ]

Si el cursor no est sobre el


entorno o no est el click izquierdo
pulsado (accin necesaria para
que el agente Predator haga
desaparecer un agente Bug),

18

entonces se para el procedimiento


porque no es necesario actualizar
nada ni generar nuevos individuos.
Si el cursor est en el entorno, la
primera accin que se realiza es
establecer la presa del agente
Predator en la variable prey, dicha
presa se escoge como uno de los
individuos de la raza Bugs que
estn en un radio de su_tamao/2
de proximidad del agente Predator
mediante la siguiente sentencia
let prey [bugs in-radius (size / 2)]
of one-of predators , en caso de
que no hubiese ninguna presa que
cumpla
tal
condicin,
el
procedimiento se parar.
Una vez elegida la presa, o
conjunto de presas, ntese que
puede existir ms de una y por ello
se emplea la directiva one-of, se
actualizar la variable global
correspondiente que almacena el
valor de los Bugs capturados de la
subespecie a la que pertenece,
incrementndose en 1.

Finalmente
comentaremos
procedimiento que gestiona
movimiento de los agentes Bug,
cdigo del procedimiento es
siguiente:

el
el
el
el

to move-bugs
let candidate-predator nobody
let target-heading 0
ask bugs [
if wiggle? [right (random-float
5 - random-float 5)]
fd speed * 0.001
ifelse flee? [

Posteriormente, se reemplazar el
Bug
eliminado
por
un
descendiente de un Bug elegido
aleatoriamente entre el resto de la
poblacin existente, que podr ser
de la misma subespecie o de de
otra subespecie diferente, de
mayor
eficacia
biolgica.
La
descendencia
se
consigue
mediante la primitiva hatch que no
ha sido comentada en el presente
trabajo y se remite al lector al
manual oficial de NetLogo indicado
en el anexo de este documento.
Adems, para evitar que dejando
fijo (o desplazando siempre al
mismo lugar tras eliminar un Bug)
al agente Predator, ste contine
eliminando
un
Bug
y
sus
descendientes, se le indica que
cambie de sentido en un ngulo
aleatorio entre 0 y 360.

ifelse any? predators in-cone


2 120 [
set candidate-predator oneof predators in-cone 2 120
set target-heading 180 +
towards candidate-predator
set heading target-heading
set label "!"
]
[set label ""]
]
[set label ""]

19

]
end

El mtodo move-bugs comienza


inicializando la variable candidatepredator a nobody, y la variable
target-heading
a
cero.
A
continuacin, si existe la variable
wiggle, que indicar realizar una
aleatoriedad en los movimientos
de los Bug, entonces los Bug
realizarn un cambio de ngulo a
derechas
o
izquierdas
dependiendo el signo del nmero
que se obtiene de la resta de dos
nmeros random entre 0 y 5, y
posteriormente cambiar el valor
de la velocidad a la que se
mueven, multiplicando sta por
0.001 como se ve en la siguiente
sentencia: fd speed * 0.001.
Seguidamente, si detectan que el
predador se encuentra enfrente de
ellos, es decir, lo observan de
frente mediante un arco de visin
que tiene 120 grados y un rango
de 2 unidades, entonces asignar
a la variable candidate-predator a
uno de los predadores que se
encuentren en el arco de visin.
Adems, asignar a la variable
target-heading la direccin en la
que va el predador + 180 grados
ms, para de esta forma poder
escapar en la direccin contraria,
asignando este nuevo valor a la
direccin en la que ir el Bug; y
asignndole, una etiqueta !
como seal de alarma de que est
escapando. En caso de que no se
encuentren predadores, la etiqueta
ser vaca.

5.2.3.
Casusticas
y
resultados de experimentos
En este apartado trataremos sobre
los diferentes escenarios que
pueden darse en el modelo a
analizar. Recordemos que dicho
modelo trata sobre la seleccin
natural, donde la especie presa
intenta sobrevivir de la especie
predadora utilizando como nico
mtodo en ste caso su velocidad.
Tal como se indica en el modelo (y
como refleja la teora de la
evolucin de Darwin) la especie
depredadora intentar capturar a
los sujetos con una menor eficacia
biolgica y si fuese as, la
poblacin tender a estar formada
nicamente por los individuos de
mayor capacidad. Realicemos el
experimento sobre nuestro modelo
de la forma en la que lo haran los
individuos en la naturaleza ,
comenzaremos eliminando a los
sujetos de la subespecies ms
lentas (por velocidad creciente),
por lo que se incrementarn las
poblaciones
de
las
dems
subespecies ya que si tienen
descendientes
de
la
misma
velocidad, desaparecern tambin
fcilmente, observamos que tal
como nos indica la lgica, el
modelo
y
Darwin
que
los
individuos que sobreviven y a los
que tiende la poblacin son
aquellos de mayor velocidad,
subespecies roja y naranja.
Sin embargo esto no tiene por qu
ser as, ya que el agente
observador es el que se encarga
de realizar el movimiento de la
especie predadora y no pierde
nada por dejar a las especies de
menor velocidad con vida (en la

20

naturaleza si
ocurriese
esto,
posiblemente la especie predadora
desaparecera
debido
a
la
dificultad de capturar presas de
gran velocidad), mientras se
dedica a eliminar aquellas de
mayor capacidad. En este caso el
resultado que observamos en el
modelo tras eliminar primero
individuos de la poblacin ms
veloz (subespecie de color rojo) es
que la poblacin de la subespecie
de una velocidad inmediatamente
menor se ve incrementada, yendo
esto en contra de los principios de
la seleccin natural ya que
empeoran
las
capacidades
biolgicas
de
los
nuevos
individuos, sin embargo, debido a
que la poblacin principalmente
eliminada
es
la
de
mayor
velocidad, parece lgico que para
que la especie pueda seguir
subsistiendo es necesario generar
nuevos
individuos
de
una
subespecie diferente a la que est
siendo erradicada. Al eliminar
todos
los
individuos
de
la
subespecie
roja,
continuamos
cazando los sujetos naranjas, y la
poblacin de los Bugs amarillos se
vi incrementada, por lo que
inferenciamos
que
continuar
ocurriendo lo mismo hasta las
poblaciones
ms
lentas,
"revirtiendo" en cierta manera la
evolucin de las especies.

en C usando la API de Windows


para realizar el movimiento del
cursor.
El
programa
es
dependiente
del
tamao
del
dispositivo de salida, pero se
puede obtener el cdigo ajustado
para el caso de los autores de
aqu.
Como
es
lgico,
los
resultados
variarn
en
cada
iteracin ya que visitamos puntos
aleatorios
donde
pueden
encontrarse cualquier tipo de
presas,
sin
embargo
hemos
observado cierta tendencia a que
los individuos que prevalezcan
sigan siendo aquellos de mayor
velocidad, eliminndose primero
aquellos individuos ms lentos.

Otro experimento que podemos


realizar
es
que
la
especie
predadora se dedique a visitar
puntos aleatorios en el mapa para
ver si en ese determinado punto
hay una presa y en ese caso
eliminarla, algo conocido cmo
bsqueda a ciegas. Para simular
este experimento (y el siguiente)
hemos implementado un programa

6. Conclusiones

Podemos probar otra casustica, en


este caso, hemos recorrido el
entorno de izquierda a derecha y
de arriba a abajo, pixel a pixel y
hecho varias pasadas de este
mismo
proceso
(todo
es
configurable, el nmero de pixels a
saltar y el nmero de iteraciones),
para ello hemos empleado ste
cdigo en C que hace uso, del
mismo modo que antes, de la API
de
Windows.
Realizando
el
experimento, se ha observado que
desaparecen equitativamente los
individuos de cada especie y no
parece existir ningn patrn a la
hora de la desaparicin de los
individuos.

La realizacin del trabajo ha sido


gratificante y divertida, ya que
hemos
podido
descubrir
propiedades de los ABMS que no
han sido vistas en teora o han
sido vistas muy superficialmente,
al analizar un artculo ms
especializado en el tema, como es

21

C.M Macal et al., 2010, Journal of


Simulation, 151-162, donde se
han analizado aspectos clave
sobre este tipo de sistemas como
la estructura tpica de un modelo
basado en agentes, as como sus
componentes,
caractersticas
sobre dichos componentes como
pueden ser la autonoma, la
adaptacin o la heterogeneidad
(entre muchas otras) en lo referido
a los agentes, los tipos de
interaccin posible entre agentes
ya sea mediante la utilizacin del
entorno o mediante paso de
mensajes, as como la importancia
de
tales
interacciones,
diferenciando claramente estas
interacciones a los ABMS, vase
las diferencias entre los autmatas
celulares y los actuales sistemas
de simulacin basados en agentes.
Tambin se ha realizado una
pequea aproximacin al entorno
donde se destinarn los agentes
(en este punto, quizs, con un
menor nfasis que el que se ha
hecho en clases de teora), as
como una metodologa de diseo e
implementacin de ABMS.
Adems, hemos podido conocer de
primera mano cmo es el manejo
de las herramientas de modelado
de ABMS desde el punto de vista
de la programacin de modelos,
as como algunos de los modelos
reales que se han empleado para
simular problemas complejos de
modelar matemticamente, en
nuestro
caso
empleando
la
aplicacin NetLogo y analizando
un modelo denominado Bug Hunt
Speeds.
Con todo ello, podemos concluir
que el trabajo ha cumplido con las
expectativas que tenamos cuando

tomamos
la
eleccin
de
seleccionarlo y lo aconsejamos
para futuros alumnos, ya que este
campo de la IA es de gran utilidad
en muchos de los problemas que
nos planteen grandes dificultades,
y como se ha mencionado
anteriormente, sean difciles de
modelar matemticamente.

7. Anexo
Junto con el trabajo a realizar en
este documento, se adjunta el
anexo, donde se incluyen las
implementaciones
de
las
2
aplicaciones comentadas: Juego de
la vida y Bug Hunt Speeds y una
sntesis del manual de NetLogo
necesaria para comprender las
aplicaciones
de
apartados
anteriores.

7.1. Implementaciones
Se adjuntan 2 links al GIT de uno
de los autores del trabajo en el
que
se
encuentran
las
implementaciones del Juego de la
Vida y del modelo NetLogo Bug
Hunt Speeds (por Uri Wilensky).

Juego de la vida: Aqu


Bug Hunt Speeds: Aqu

7.2. Manual NetLogo


A
partir
de
los
siguientes
apartados
realizaremos
una
sntesis del manual NetLogo,
comentando lo necesario para
comprender
los
ejemplos
expuestos en el documento,
debido a la gran extensin del
manual oficial de la aplicacin. Por
ello se ha optado, tal como se ha
dicho, por comentar los aspectos
fundamentales para poder trabajar
con dicha tecnologa.
22

7.2.1 Vistas
Comentaremos en este apartado
las caractersticas bsicas de
NetLogo en los temas relativos a
la interfaz de la aplicacin, como
pueden ser los paneles de
control, los ajustes tanto de la
simulacin como de los aspectos
del modelo (entorno, agentes,
etc) y la propia interfaz.

7.2.1.1 Interfaz
Una vez arrancada la aplicacin,
se nos presentar la siguiente
ventana:

interactuar para configurar su


comportamiento.
En el 2 apartado, Informacin,
obtendremos
informacin
de
nuestro modelo (previamente
establecida por el programador)
para informar a los usuarios
como pueden ser: qu significa el
modelo, cmo funciona, cmo
usarlo, etc.
Finalmente, en la ltima pestaa,
Cdigo,
sern
visibles
los
procedimientos (cdigo fuente)
que permitirn la ejecucin de
nuestro modelo en el apartado
Ejecutar.
Dentro del apartado Ejecutar,
podemos distinguir los diversos
widgets de los que se compone,
entre los que se encuentran:

Que nos permitirn aadir, editar


y borrar elementos para el
control de la simulacin, tales
como botones, sliders, grficos,
etc.
Nos fijamos en la aparicin de 3
pestaas principales en la parte
superior
de
la
aplicacin:
Ejecutar, Informacin y Cdigo.
En el apartado Ejecutar veremos
una representacin grfica de
nuestro modelo (la evolucin de
la
simulacin
ser
visible
tambin) junto con una serie
botones que nos permitirn

Que es el panel de control de la


simulacin,
donde
podremos
cambiar
la
velocidad
de
simulacin e incluso indicar
cundo se actualizar el mundo,
pudiendo
incluso
indicar
manualmente el nmero de ticks
para el refresco.

23

En la parte derecha podemos


encontrar
el
botn
de
configuracin
que
permitir
cambiar las propiedades del
mundo (entendiendo mundo en
el mbito de NetLogo como el
entorno ya comentado).

realizar acciones que tengan un


efecto sobre el mundo, como
pueden
ser
crear
tortugas
(tambin se comentar despus
el papel de stas) y ordenarles la
realizacin de acciones.

7.2.1.2 Ajustes del modelo

El entorno de nuestro modelo,


donde
se
visualizar
el
comportamiento de los agentes
de
nuestro
modelo.
Dicho
entorno est formado por celdas
(de forma similar al robot
recogedor de basura de las
prcticas) cuyo tamao y nmero
puede ser modificado en el
apartado configuracin. Dicho
entorno estar poblado por
agentes que sern comentados
en apartados posteriores.
Otro elemento importante es la
ventana de comandos que nos
permitir llevar a cabo la
simulacin en caso de que no
hayamos definido un cdigo
formado por procedimientos, en
caso de que se emplee la
ventana de comandos (terminal
de instrucciones), el propio
agente
observador
(se
comentar despus el papel de
ste en la arquitectura de
NetLogo) ser el programador
del modelo. En ella podremos

En ste apartado, alcanzable al


clickear
en
el
apartado
Configuracin presentado antes,
se
puede
modificar
la
configuracin de nuestro modelo,
desde las caractersticas del
entorno como pueden ser la
anchura y la altura dadas por las
variables de Netlogo worldwidth y world-height (por
defecto 33 y 33, que dan un total
de 1089 patches en total), que
almacenan la anchura y la altura
del "mundo", cumpliendo que el
tamao del mundo es el producto
entre estas 2 variables. Adems
el tamao del mundo queda
definido
tambin
por
las
variables max-pxcor y maxpycor,
que
representan
la
coordenadas centrales de las
celdas ms alejadas del origen.

24

Tambin es posible configurar el


tamao de las celdas por las que
est compuesto el mundo que
ser el tamao que tendr el
mundo en la representacin,
dicho tamao depender tanto
del tamao de las celdas como
de max-pxcor y max-pycor, ya
que cuanto mayor sean estas 2
variables ms celdas cabrn en
la representacin.

La frontera del mundo tambin


se puede modificar con 2
parmetros, lmite horizontal y
lmite vertical, indicando si los
agentes se podrn desplazar ms
all
de
los
lmites
tanto
horizontalmente
como
verticalmente,
pudindose
generar errores en el modelo si
los agentes avanzan superan
dichos lmites.

La etiqueta para indicar un


incremento en la iteracin de la
simulacin,
por
tanto,
si
escribimos ticks en nuestro
cdigo (tal como est en la
imagen),
se
avanzar
la
simulacin.

7.2.1.3.
Ajustes
simulacin

de

la

En cuanto a los ajustes de


simulacin una vez se va a

ejecutar el modelo, podemos


modificar el parmetro de la
velocidad de simulacin, la cual
se encuentra por defecto en la
posicin normal, mediante un
slider en la parte superior central
de la ventana principal. Este
slider nos ofrece la posibilidad de
cambiar la velocidad de forma
que la simulacin sea ms lenta
o ms rpida. Sin embargo, no se
modifica la velocidad de la
obtencin de los datos como
podra
pensarse,
sino
la
velocidad con la que esos datos
se mostrarn.

Adems de la velocidad, cuando


activamos
el
checkbox
Actualizar de la Vista (view
updates), y dependiendo de la
opcin que seleccionemos en el
combobox inmediatamente por
debajo
del
checkbox
(continuamente o por sticks),
podremos observar los cambios
en el modelo paso a paso o por
cada iteracin. Mientras que si
no activamos esta opcin tan
slo se actualizar el mundoentorno al finalizar la simulacin.

Por ltimo, para la modificacin


de cualquier variable global
modificable, su representacin o
para
mostrar
informacin
referente al modelo podremos
incorporar
los
siguientes
elementos:
25

Button. Al pulsarlo
ejecutan comandos.

Slider. Permite modificar el


valor de una variable
dentro de un rango.

Switch. Controla el valor de


una
variable
global
booleana.

Chooser. Similar al slider,


pero los valores que podr
tomar la variable sern
discretos.

se

Input. El usuario teclea el


valor de una variable.

Monitor. Muestra el valor


que toma una variable
durante su ejecucin.

Plot. Permite realizar una


representacin grfica.

Output. Una pantalla en la


que
podemos
mostrar
informacin (mensajes a lo
largo de la ejecucin).

Note. Texto.

7.2.1.4. Informacin
Como se ha comentado en 4.1.1,
en este apartado de la aplicacin
obtendremos
informacin
de
nuestro modelo para informar a
los usuarios. Con ms detalle,
observamos
categoras
ya
definidas semejantes a cualquier
documentacin
de
software
convencional, como:
Una explicacin de sobre qu
trata nuestro modelo.

Sobre cmo funciona las reglas


rigen el comportamiento de los
agentes del modelo.

Incluso sobre casusticas de


prueba que podran resultar
interesantes para el usuario de la
aplicacin y de nuestro modelo.

Es posible editar la informacin del


modelo mediante el botn Editar,
escribiendo la documentacin con
un lenguaje de marcado similar a
Markdown.

7.2.2.
Agentes
propiedades

Como ya se ha comentado en el
apartado de introduccin a
NetLogo, ste es un lenguaje de
programacin
que
sigue
la
filosofa del modelado basado en
agentes.
Entre los agentes disponibles en
NetLogo encontramos 3 tipos
principales que nos permitirn
desarrollar nuestro modelos:
Turtles: Son los agentes
principales
visibles
por
el
observador (considerado otro
agente en el mbito de NetLogo),
que se desplazan sobre el
entorno e interactan entre s y
con el entorno (con los patches
que
conforman
mundo,
considerados otro agente como
ahora veremos) de forma sencilla
o compleja segn unas reglas
especficas
que
regulan
su
comportamiento, pudiendo dar
lugar
a
comportamientos

26

emergentes que no han sido


explcitamente
programados.
Cada tortuga es identificada por
un id que la hace nica.
Patches: El mundo (entorno) de
NetLogo es el terreno donde se
desplazan las tortugas. Este
mundo
est
formado
por
porciones
ms
pequeas
denominadas patches o celdas.
Del mismo modo que las
tortugas vienen identificadas por
un id nico, estos patches estn
identificados por las coordenadas
de su punto central.
Link: Pueden existir turtles que
estn relacionados entre s (sin
tener por ello que ser necesaria
una interaccin), para modelar
estos enlaces o relaciones se
emplean los links, considerados
otro agente dentro del mbito de
NetLogo. Los links tambin estn
identificados unvocamente, en
este caso por una tupla ndimensional
que
relaciona
turtles, e.g. (turtleN,turtleM).
Observador: El ltimo agente
considerado por NetLogo es el
observador o usuario de la
aplicacin. Aunque ste no est
representado en el mundo como
el resto de los agentes, es capaz
de modificar el comportamiento
de la simulacin y del mundo
(creando y destruyendo agentes,
propiedades, ), razn por la
cual ste es considerado como
un agente ms.
Cada agente tiene una serie de
propiedades que lo describen (no
lo identifican), por ejemplo, las
tortugas
cuentan
con
las
siguientes caractersticas:
who
;; identificador (no se
puede modificar)
color
;; color
heading
;; orientacin

xcor
;; coordenada x
ycor
;; coordenada y
shape
;; forma
label
;; etiqueta
label-color ;; color de la etiqueta
breed
;;raza
hidden?
;; visible o no
visible?
size
;; tamao
pen-size
;; tamao del trazo al
desplazarse
(cuando
penmode=down)
pen-mode
;; dejar trazo al
desplazarse o no?
Es
posible
ver
dichas
propiedades
mientras
la
simulacin est en ejecucin
haciendo click con el botn
derecho del ratn sobre la
tortuga
y
seleccionando
la
tortuga de la que queremos
conocer la informacin.
Los patchs que conforman el
entorno
tambin
tiene
propiedades asociadas entre las
que se encuentran las siguientes:
pxcor
;; coordenada x del
patch
pycor
;; coordenada y del
patch
pcolor
;; color del patch
plabel
;; etiqueta del
patch
plabel-color
;; color de la
etiqueta del patch
Podemos
conocer
las
propiedades de los agentes
tambin desde el cdigo de
nuestro
modelo
mediante:
[propiedad]
of
id_agent.
Tambin se pueden identificar los
agentes mediante la primitiva
bsica ask. Tales instrucciones
junto con las primitivas bsicas
sern
explicadas
en
el
correspondiente apartado.

27

7.2.2.1
adicionales

Propiedades

En el apartado anterior se han


comentado
las
propiedades
bsicas de todo agente y que se
poseen desde el momento de su
creacin, sin embargo es posible
definir propiedades adicionales
sobre los agentes que nos
interese. Por ejemplo, aadir la
propiedad edad a los agentes
turtle que simulen un humano
en nuestro modelo.
Para definir dichas propiedades
se utilizar tambin una primitiva
bsica, own o se podrn
establecer desde el momento de
creacin del agente con la
primitiva set. Las dos formas
posibles son las siguientes:
1. crt 1 [set edad 20] ;; Se
creara una tortuga con la
propiedad edad desde su
inicio.
2. turtles-own [edad] ;; Se
aade la propiedad edad
sobre el conjunto turtles.
Es importante observar que
mediante el segundo mtodo es
necesario dar un valor a la
propiedad una vez establecida,
por ejemplo de la siguiente
forma: ask turtle 1 [set edad
20]

Cuando sea necesario que en


nuestro
modelo
coexistan
diferentes tipos de agentes - con
propiedades
diferenciadas
emplearemos lo que NetLogo
denomina razas o breeds.
Para la creacin de una nueva
raza emplearemos la primitiva
breed seguida de corchetes
entre
los
que
indicaremos,
primero el nombre del conjunto
de agentes de la raza (en plural)
seguido del nombre en singular
de cada agente de la nueva raza
(en singular), e.g.
breed [alumnos alumno].
Una vez definida la nueva raza
podemos emplear el nombre de
la raza (el plural que identifica al
conjunto
de
agentes)
para
realizar las mismas acciones que
realizaramos sobre las tortugas
normales.
Entre
stas,
destacan la asignacin de una
nueva forma a la hora de su
creacin para diferenciar la
nueva raza de las dems
tortugas con set-default-shape
, la peticin de realizacin de
alguna accin por parte de los
agentes de la raza con ask raza
[accin parmetros] y
la
creacin de nuevos agentes
pertenecientes a la raza con
create-nombreraza
nagentes .

7.2.3. Primitivas bsicas


7.2.2.2 Razas
Hemos supuesto hasta ahora que
todos los turtles empleados son
del mismo tipo y poseen las
mismas propiedades (a pesar de
que
hayamos
definido
propiedades adicionales), pero
no es necesario que sto sea as.

Ya comentado el enfoque de los


sistemas basados en agentes
que propone NetLogo, tenemos
que ser capaces de emplear
comandos que nos permitan
llevar a cabo la simulacin,
pudiendo crear/destruir/modificar
agentes, ordenar la realizacin
de acciones por parte de stos
entre muchas otras posibilidades

28

ofrecidas por dicho software.


Todas los comandos, a partir de
ahora primitivas, sern lanzados
en este apartado a travs de la
ventana de comandos ofrecida
por NetLogo, comentando en
apartados
siguientes
la
posibilidad de crear nuestros
propios
procedimientos
empleando
tambin
tales
primitivas,
adems,
nos
ceiremos
a
comentar
nicamente
las
primitivas
bsicas ms utilizadas.
En primer lugar, es necesario
introducir la primitiva createturtles cuya abreviatura es crt.
Tal primitiva es empleada para la
creacin de tortugas, indicando
tras la orden de creacin el
nmero de tortugas que el
observador (al trabajar con la
ventana
de
comandos,
consideraremos que el agente
observador ser tambin el
programador del modelo) desea
crear, e.g. create turtles 2 o
crt 2 , crearan 2 tortugas en
nuestro mundo, situadas en las
coordenadas centrales de ste.

La
segunda
primitiva
que
comentaremos ser ask, que
permitir
la
peticin
de
realizacin de acciones por parte
de las tortugas. Dicha primitiva
se emplea indicando junto a ella
el nombre del agente o conjunto
de agentes que deben realizar la
accin, seguido a su vez de,
entre corchetes, otra primitiva o
conjunto
de primitivas
que
indiquen la acciones a realizar
entre las que destacan (se
indican las primitivas seguidas

de
su
abreviatura
semntica):

su

forward ;; (fd) avanzar


back ;; (bk) retroceder
left ;; (lt) giro a la izquierda
right ;; (rt) giro a la derecha
repeat ;; repetir un conjunto de
primitivas
pen-up ;;(pu) subir el lpiz (los
agentes no dejan huella al
moverse)
pen-down ;;(pd) bajar el lpiz (los
agentes dejan trazos al moverse)
clear-all;;(ca)
se
resetean
variables, se limpia el mundo,
se borran grficas, etc.
Un ejemplo de construccin
empleando la primitiva ask ,
sera, e.g. ask turtles [fd 5]
que indicara a todos los agentes
tortuga a realizar un movimiento
de avance 5 posiciones hacia el
ngulo al que estn orientados.
Para ilustrar un ejemplo ms
detallado, consigamos que todas
las tortugas creadas realicen un
movimiento
de
forma
que
dibujen un cuadrado de 5
unidades,
introduciramos
lo
siguiente:
clear-all ;; Resetearemos el
entorno
crt 4 ;; Creamos 4 tortugas
ask turtles [fd 5 rt 90 fd 5 rt 90 fd
5 rt 90 fd 5]
Mediante la ltima primitiva
indicamos al conjunto de las
tortugas que se desplacen 5
posiciones en su orientacin,
giren 90, se desplacen 5
posiciones en su orientacin,
giren 90 y as sucesivamente
hasta
haber
alcanzado
la
posicin inicial, formando un
cuadrado que empieza y acaba
en las coordenadas origen. Sin
embargo,
si
se
realiza
el
29

experimento no se observa
movimiento
aparente,
el
problema es la velocidad de
simulacin, al ser un modelo tan
sencillo el tiempo de proceso de
tal primitiva es muy reducido y
no
se
observan
cambios
significativos respecto del estado
inicial,
dicho
problema
se
soluciona
reduciendo
la
velocidad de simulacin en el
slider de la pestaa Ejecutar. Si
hacemos esto ltimo observamos
que las tortugas no realizan las
acciones en paralelo por lo que
en principio no existe paralelismo
si se pide la realizacin de una
accin por parte de un conjunto
de tortugas del mismo tipo.
Podemos tambin hacer que
dibujen
explcitamente
los
movimientos
que
realizan
mediante el uso de las primitivas
pen-down/pd y pen-up/pu ,
que permiten a los agentes la
utilizacin de un lpiz para
marcar sus movimientos, si el
lpiz se encuentra en uso
(bajado, pen-down), o dejar de
marcarlos si el lpiz est en
desuso (subido, pen-up). En el
ejemplo anterior solo tendramos
que modificar la ltima primitiva
ask , indicando junto a los
movimientos que el lpiz debe
bajarse
al
inicio
del
desplazamiento y subirse al final.
clear-all ;; Resetearemos el
entorno
crt 4 ;; Creamos 4 tortugas
ask turtles [pd fd 5 rt 90 fd 5 rt
90 fd 5 rt 90 fd 5 pu] ;; Ahora
indicando el uso del lpiz

Observamos otro problema en la


primitiva anterior. Qu pasara
si tuvisemos que realizar un
nmero
elevado
de
desplazamientos para formar un
polgono complejo como un
mirigono?. Nos llevara un
tiempo considerable indicar a
mano junto con la primitiva ask
los movimientos a realizar, para
ello podemos emplear otra
primitiva muy empleada como es
repeat. Dicha primitiva nos
permite repetir una determinada
accin o conjunto de acciones un
nmero de veces que se indica
explcitamente
junto
a
la
primitiva,
nuestro
ejemplo
dibujando el cuadrado quedara:
clear-all ;; Resetearemos el
entorno
crt 4 ;; Creamos 4 tortugas
;; Empleando la primitiva repeat
ask turtles [pd repeat 4 [fd 5 rt
90] pu]

7.2.4. Procedimientos
Podemos
entender
los
procedimientos en NetLogo como
las funciones o procedimientos
en cualquier otro lenguaje no
orientado al modelado basado en
agentes, una funcin definida por
el programador que engloba un
conjunto
de
primitivas
ya
definidas por el lenguaje para
conseguir
una
accin
que

30

requiere de la ejecucin conjunta


de tales primitivas.
Es necesario comprender que
NetLogo
es
un
ambiente
ejecutado sobre una mquina
virtual Java que interpreta un
lenguaje
denominado
QuasiPearl, por tanto, interpretar
lnea a lnea los comandos
introducidos
por
ello
los
procedimientos
se
describen
como sigue. Para inicializar un
procedimiento emplearemos la
palabra reservada to seguida del
nombre del procedimiento y a
partir de este punto de entrada
se ejecutarn una a una las
primitivas introducidas en las
siguientes lneas hasta alcanzar
otra palabra reservada para la
finalizacin
de
los
procedimientos,
end.
Para
comprobar el funcionamiento de
los procedimientos vamos a
ponerlos en prctica. Primero
definiremos un procedimiento
llamado cuadrado que realice las
acciones del apartado anterior,
pero ahora englobadas en dicho
procedimiento, para ello nos
desplazamos a la pestaa Cdigo
y
escribimos
nuestro
procedimiento:
to
cuadrado
;;
Inicio
del
procedimiento
clear-all ;; Resetearemos el
entorno
crt 4 ;; Creamos 4 tortugas
ask turtles [pd repeat 4 [fd 5 rt
90] pu] ;; Empleando la primitiva
repeat
end ;; Fin del procedimiento
Y una vez escrito pulsamos sobre
Comprobar. Si no obtenemos
ningn error (mostrados en una
barra en la parte superior, de
color amarillo indicando el tipo
de error obtenido), podemos
lanzar nuestro procedimiento

desde la ventana de comandos


simplemente llamndolo por su
nombre, cuadrado en nuestro
caso.

Es importante observar que el


procedimiento, tal como est
definido, no es determinista, por
lo que no se obtendr la misma
salida exactamente cada vez que
se lance debido a que durante la
creacin de las tortugas, stas
son orientadas hacia un ngulo
aleatorio
y
al
realizar
el
desplazamiento
describirn
trayectorias diferentes.

7.2.5. Variables
Distinguiremos entre 2 tipos de
variables presentes en el mbito
de NetLogo, las variables locales y
las variables globales. Dicho
mbito de las variables es anlogo
al mismo en otros lenguajes de
programacin.
Una variable global es accesible
por todos los procedimientos de un
programa NetLogo.
Un caso particular de este tipo de
variables son las variables de
entrada,
introducidas
por
el
usuario a travs de la interfaz de
NetLogo mediante los posibles
widgets
(botones,
sliders,
choosers). Para comprobar su
funcionamiento emplearemos el

31

procedimiento
desarrollado
en
apartados anteriores para formar
un cuadrado, pero en esta ocasin
su
funcionamiento
estar
condicionado a la introduccin de
variables de entrada: el ngulo ,el
desplazamiento de las tortugas y
las repeticiones, de forma que se
podrn generar distintos tipos de
polgonos.
Para ello, partiendo del cdigo
anterior:
to
cuadrado
;;
Inicio
del
procedimiento
clear-all
;;
Resetearemos
el
entorno
crt 4 ;; Creamos 4 tortugas
ask turtles [pd repeat 4 [fd 5 rt 90]
pu] ;; Empleando la primitiva
repeat
end ;; Fin del procedimiento

Y nicamente resta modificar el


cdigo anterior para ajustarlo a la
utilizacin de las variables de
entrada, quedando como sigue:
to
cuadrado
;;
Inicio
del
procedimiento
clear-all
;;
Resetearemos
el
entorno
crt turt ;; Creamos [turt] tortugas
ask turtles [pd repeat rep [fd desp
rt ang] pu] ;; Empleando la
primitiva repeat
end ;; Fin del procedimiento
Un
ejemplo
con
{turt=5},
{rep=83},
{desp=10}
y
{ang=92} es el siguiente:

introduciremos 4 sliders, uno para


el nmero de tortugas a generar:

(variable global turt), otro para las


repeticiones:

(variable global rep), otro para el


nmero
de
desplazamientos:
(variable global desp) y un ltimo
para indicar el ngulo de giro:
(variable global ang).
Con los sliders para configurar los
parmetros de la simulacin ya
definidos, debemos establecer un
botn
para
iniciar
dicha
simulacin:
, que
llamar al punto de entrada de
nuestro programa, en nuestro caso
el procedimiento cuadrado.

Las variables globales que no son


variables de entrada y por tanto
no son introducidas mediante los
widgets de la pestaa Ejecutar las
declararemos
al
inicio
del
programa mediante la primitiva
globals y, entre corchetes, el
nombre de las variables globales
que vamos a emplear en nuestro
programa e.g.
globals [
variable_global_1
variable_global_2
variable_global_n ]
Este tipo de declaracin no era
necesario en las variables de
entrada
porque
internamente
NetLogo se encarga de su
definicin.
Posteriormente,
es
posible asignarle valores a las

32

variables globales mediante la


primitiva set , la misma que
emplebamos
para
definir
propiedades adicionales en los
agentes tortuga.
Por otro lado, se encuentran las
variables locales, que slo son
vlidas dentro del procedimiento
donde son declaradas, por tanto,
ya no son declaradas al inicio del
programa, sino que se crean
dentro de un procedimiento y se
les asigna un valor segn se va
necesitando
a
lo
largo
del
programa. Una variable local se
crea mediante la primitiva let,
dndole un valor inicial en durante
su creacin e.g. let variable_local
5. Si posteriormente necesitamos
asignarle otro valor diferente a la
variable local se emplear la
primitiva set e.g. let variable_local
7.

7.2.6. Listas
Las listas son estructuras de datos
equivalentes
al
concepto
de
vector/array en otros lenguajes de
programacin. Al ser un lenguaje
con tipado dinmico, las listas
pueden
ser
heterogneas,
pudiendo estar compuestas de
elementos de diferentes tipos.
Dada una lista L representada
como un conjunto de valores entre
corchetes, sus elementos son
numerados desde el ndice 0 hasta
|L|-1 .
Existen dos formas de construir
una lista, en funcin de si estar
compuesta por datos conocidos a
priori o no.
Si los datos son conocidos,
construiremos la lista como
una
variable
normal
(asumiremos la definicin
como una variable local,
pero
es
fcilmente
extrapolable
a
variable
global) de la siguiente

manera: let
el1 elN]

lista-1

[el0

Si
los
datos
no
son
conocidos a priori (situacin
ms comn) es necesario
emplear la primitiva list ,
que recibe una serie de
argumentos y devuelve una
lista compuesta con los
argumentos pasados. Se
pueden dar dos casos en el
uso de dicha primitiva:

Si
se
le
pasan
2
argumentos
a
la
primitiva, se escribir de
la forma: list a b ,
siendo a y b variables
definidas previamente en
el programa (tambin
pueden
ser
valores
constantes vlidos).

Si se le pasan ms de 2
argumentos, se escribir
la primitiva list seguida
de todos los argumentos
necesarios,
todo
ello
entre
parntesis
e.g.
(list a b c d) , siendo
a,b,c
y
d
variables
definidas previamente en
el programa (tambin
pueden
ser
valores
constantes vlidos).

Una vez han sido introducidas las


listas es necesario comentar las
operaciones que tienen asociadas,
que nos permiten manipularlas de
una forma sencilla, contando como
cualquier estructura de datos con
al menos operaciones de consulta,
insercin, borrado y modificacin
de
elementos.
Entre
estas
operaciones
encontramos,
las
siguientes primitivas (a,b,..., son
constantes vlidas de NetLogo o
variables) :

33

1. Para realizar operaciones de


consulta sobre una lista.

first: nos permite consultar


el primer elemento de la
lista e.g. first [a b c] ;; a

last: para obtener el ltimo


elemento de la lista e.g.
last [a b c] ;; c

but-first: obtiene una lista


con todos los elementos de
la lista menos el primero
e.g. but-first [a b c] ;; [b c]

remove-duplicates [a b b
c] ;; [a b c]

replace-item: reemplaza el
elemento indicado por otro
elemento indicado por el
programador e.g. replaceitem b [a b c] d ;; [a d c]

3. Otras primitivas tiles para


operar con listas.

length: permite conocer la


longitud de una lista e.g.
length [a b c] ;; 3

modes: permite conocer la


moda de una lista e.g.
modes [a b b c] ;; b

position: para conocer la


posicin de un elemento en
la lista e.g. position b [a b
c] ;; b

shuffle:
desordena
aleatoriamente
los
elementos de la lista e.g.
shuffle [a b c]

2. Para realizar operaciones de


modificacin sobre una lista.

fput:
introduce
un
elemento al inicio de la lista
e.g. fput d [a b c];;[d a b c]

reverse: obtiene el reverso


de la lista e.g. reverse [a b
c] ;; [c b a]

sort: ordena los elementos


por valor creciente, otra
versin de sort, es sort-by
que permite indicar el
criterio de ordenacin e.g.
sort [4 2 5] ;; [2 4 5]

sentence:
permite
la
concatenacin de listas, sin
realizar aplanamiento de
listas.
Si
se
van
a
concatenar 3 o ms listas es
necesario
incluir
la
sentencia entre parntesis
e.g. sentence [a b c] [b c
a] ;; [a b c b c a]

sort-by: realiza la misma


funcin que la primitiva
sort, pero siendo ahora

but-last: obtiene una lista


con todos los elementos de
la lista menos el ltimo e.g.
but-last [a b c] ;; [a b]

item: obtiene el elemento


n-simo de la lista e.g. item
2 [a b c] ;; b

n-of: toma una lista de n


elementos al azar de la lista
e.g. n-of 2 [a b c] ;; [n1 n2]

lput: introduce un elemento


al final de la lista e.g. lplut
d [a b c];;[a b c d]

remove:
elimina
el
elemento indicado de la
lista e.g. remove b [a b
c];;[a c]

remove-item: elimina el
elemento
indicado
por
posicin de la lista e.g.
remove-item 2 [a b c] ;;
[a b]

remove-duplicates:
elimina
los
elementos
duplicados de la lista e.g.

34

posible especificar el criterio


de
ordenacin.
Dicho
criterio se indica entre
corchetes,
asignando
nombres auxiliares (que
comenzarn siempre por ?)
y que se emplearn durante
las iteraciones necesarias
para referenciar los valores
actuales en el proceso de
ordenacin e.g. sort-by [?1
> ?2] [2 3 1 5] ;; [5 3 2 1],
obsrvese que ordenamos
en orden decreciente en
este caso, a diferencia de la
primitiva sort

hasta cierto elemento n de


la serie (en nuestro caso [1
1 2 3 5 8 13 21]).
to fibonacci
ca
let lista [1 1 2 3 5 8
13 21]
crt 1
ask turtles [pd]
foreach lista [ ask
turtles [fd ? rt 90] ]
ask turtles [pu]
end

Es necesario aclarar que tales


operaciones se han considerado
en sus casos ms bsicos,
existiendo situaciones de mayor
complejidad como por ejemplo,
cuando hay varios niveles de
anidacin de listas. Del mismo
modo,
se
ha
mostrado
directamente el uso de las
primitivas,
pero
es
posible
emplearlas en otras condiciones,
como en la creacin de una
variable local e.g. let a (sentence
[a b c] [c b a] [d c d])
Tambin encontramos primitivas
que nos permiten iterar de una
forma sencilla sobre los elementos
de las listas sin necesidad de
emplear
repeat,
while
(se
comentar en la siguiente seccin)
, ni procedimientos recursivos.
Estas primitivas especiales son:

foreach: permite realizar


un conjunto de operaciones
sobre una lista, utilizando,
del mismo modo que en la
primitiva sort-by, nombres
auxiliares para referenciar
los valores actuales. Para
comprobar
su
funcionamiento vamos a
escribir un procedimiento en
el que un agente tortuga
describa la trayectoria de la
secuencia
de
fibonacci

Tambin es posible aplicar


la primitiva foreach para
operar sobre ms de una
lista a la vez, empleando
varias variables auxiliares,
una para cada lista.

map: dicha primitiva toma


como entrada una lista y da
como resultado otra lista
resultado de aplicar una
funcin a cada elemento de
la lista, siendo anloga la
primitiva map al concepto
de la funcin map en el
paradigma de programacin
funcional. Del mismo modo
que en la primitiva foreach
se emplear una variable
auxiliar
para
hacer
referencia al valor actual. Su
sintaxis es la siguiente:
map [operacion] lista.
Un ejemplo muy sencillo en
el que se incrementa en una
unidad cada elemento de la

35

lista, mostrndolo por


terminal, es el siguiente:

la

to fibonacci
ca
let lista [1 1 1 1 1 1]
show map [? + 1] lista
end

7.2.7.
Sentencias
condicionales,
procedimientos con retorno
y bucles
En
cuanto
a
sentencias
condicionales se refiere podremos
emplear la sentencia if de la
siguiente forma:
if condicin
[
;; comandos
]
De modo que si la condicin se
cumple
se
ejecutarn
los
comandos que se escriban a
continuacin de la condicin y
entre corchetes. En el caso que la
condicin no se cumpla, los
comandos que se encuentren
dentro de los corchetes no se
ejecutarn.
En el caso de que se requiera
diversas acciones (ejecutar varios
comandos) cuando la condicin no
se cumple deberemos emplear la
sentencia condicional ifelse, cuya
sintaxis es la siguiente:
ifelse condicin
[
;; comandos que se ejecutan si se
cumple la condicin
]
[
;; comandos que se ejecutan si no
se cumple la condicin]

En esta ocasin, si la condicin se


cumple
se
ejecutarn
los
comandos que se encuentren
dentro
del
primer
par
de
corchetes.. En caso contrario, se
ejecutarn aquellos comandos que
se encuentren dentro del segundo
par de corchetes.
Los procedimientos con retorno
son aquellos que devuelven un
valor al procedimiento que les ha
llamado.
Para
construir
un
procedimiento
con
retorno
comenzaremos el procedimiento
con la palabra to-report, seguido
del nombre que le queramos
asignar al procedimiento y de los
parmetros que va a recibir el
procedimiento, entre corchetes. A
continuacin
escribiremos
los
comandos que vaya a ejecutar el
procedimiento de retorno, como
ltimo comando emplearemos la
palabra report seguido de la
variable o valor que queramos
devolver y por ltimo la palabra
end. De esta manera, la sintaxis
para los procedimiento de retorno
queda de la siguiente forma:
to-report
nombre_del_procedimiento
[valor_recibido]
;; comandos
report valor_resultante
end
Por ltimo, para la ejecucin de
bucles podremos emplear tanto la
primitiva while como la primitiva
repeat. La primitiva while sirve
para repetir un conjunto de
comandos mientras se cumpla
determinada condicin. Emplea la
siguiente sintaxis:

while condicin
[
;; comandos
]

36

Sin embargo, la primitiva repeat


repite una serie de comandos un
nmero finito de veces, no
necesita ninguna condicin. Su
sintaxis es la siguiente:

repeat n [
;; comandos
]
La variable n que sigue a la
primitiva repeat indica el nmero
de veces que se van a ejecutar los
comandos que se encuentren
dentro de los corchetes.

8. Bibliografa
Barbadilla,
A.
(n.d)
La
Seleccin
Natural:
Axiomtica.
Gentica
de
Poblaciones.
Recuperado el 17 de Mayo de
2015
de:
http://bioinformatica.uab.es/base/b
ase3.asp?
sitio=geneticapoblaciones&anar=s
elecc&item=axiomas
Macal, C.M. & North, M.J.
(2010) Tutorial on agent-based
modelling and simulation. En
Journal of Simulation, 4, 151-162.
Recuperdo el 17 de Mayo de 2015
de:
http://www.palgravejournals.com/jos/journal/v4/n3/full/j
os20103a.html
Novak, M. and Wilensky, U. (2005).
NetLogo Bug Hunt Speeds model.
http://ccl.northwestern.edu/netlog
o/models/BugHuntSpeeds. Center
for Connected Learning and
Computer-Based Modeling,

Northwestern University,
Evanston, IL.
Poza, D.J. (n.d.) Manual de
Netlogo en espaol. INSISOC ,
Social
Systems
Engineering
Centre. Recuperado el 17 de Mayo
de
2015
de:
https://sites.google.com/site/manu
alnetlogo/
Quesada, F. J. M. (2011)
Simulacin
Social:
Una
introduccin. LSDS, Laboratori de
Simulaci de Dinmiques SocioHistriques. Recuperado el 17 de
Mayo
de
2015
de:
http://sct.uab.cat/lsds/es/content/si
mulacin-social-una-introduccin
Wilensky,
U.
(1999).
NetLogo.
http://ccl.northwestern.edu/netlog
o/. Center for Connected Learning
and Computer-Based Modeling,
Northwestern
University,
Evanston, IL.
Wilensky, U. (2015) NetLogo
5.2 Dictionary. Recuperado el 17
de
Mayo
de
2015
de:
http://ccl.northwestern.edu/netlog
o/docs/dictionary.html
Wilensky, U. (2015) NetLogo
5.2 User Manual. Recuperado el 17
de
Mayo
de
2015
de:
http://ccl.northwestern.edu/netlog
o/docs/NetLogo User Manual.pdf

37

You might also like