+ All Categories
Home > Documents > Agent Based Simulation

Agent Based Simulation

Date post: 18-Dec-2015
Category:
Upload: jose-angel-gonzalez
View: 31 times
Download: 0 times
Share this document with a friend
Description:
Simulación basada en agentes, síntesis de la teoría básica de agentes inteligentes, análisis del manual de la aplicación NetLogo y un posible modelo que muestra el resultado de la selección natural entre especies.
Popular Tags:
47
Agent Based Simulation J. Ángel González *, Alberto Donet ** Departamento de Sistemas Informáticos y Computación Universidad Politécnica de Valencia Marzo 2015 Resumen Los modelos basados en agentes nos permiten modelar sistemas sociales compuestos por agentes (ABMS) con características bien definidas: autónomos, proactivos, reactivos, autocontenidos -con tareas bien delimitadas- , sociales, adaptativos y dirigidos por objetivos que interactúan entre sí y se influyen mutuamente, aprendiendo de sus experiencias para poder adaptarse al entorno al que han sido destinados. Véase que una característica imprescindible para modelar este tipo de sistemas es la heterogeneidad, que da lugar a la aparición de la auto-organización y otros fenómenos emergentes entre el conjunto de agentes que componen el sistema, formando sistemas complejos basados en la interacción de componentes autónomos que tienen el objetivo de adaptarse a nivel individual o de población. Nuestro trabajo, por tanto, se centrará en realizar una aproximación a este tipo de sistemas, basándonos 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 física, biología, redes (propagación de virus en una red -Uri Wilensky-) ,matemática, computación (autómatas celulares -Juego de la vida-), ciencia de la tierra (cambio climático -Uri Wilensky-) , ciencias sociales y sistemas dinámicos entre muchos otros, empleando y analizando la aplicación de modelado basado en agentes NetLogo que ha sido posible gracias a los avances en el desarrollo y diseño de software orientado a agentes. PALABRAS CLAVE: ABMS, agentes, interacción, sistemas sociales. Abstract *Departamento de Sistemas Informáticos y Computación, Universidad Politécnica de Valencia, Camino de Vera, Valencia, 46022, [email protected]. El autor es estudiante de 3º curso del grado de ingeniería informática -Computación- ** Departamento de Sistemas Informáticos y Computación, Universidad Politécnica de Valencia, Camino de Vera, Valencia, 46022, [email protected]. El autor es estudiante de 3º curso del grado de ingeniería informática -Computación- 1
Transcript

Agent Based SimulationJ. ngel Gonzlez *, Alberto Donet **Departamento de Sistemas Informticos y ComputacinUniversidad Politcnica de ValenciaMarzo 2015

ResumenLos 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 auto-organizacin 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.AbstractAgent-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", 151-162) and analyze a subset of all possible applications, covering a wide range of 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, [email protected]. 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, [email protected]. El autor es estudiante de 3 curso del grado de ingeniera informtica -Computacin-1ndice1. Introduccin

2. Definicin y componentes ABMS2.1. Caractersticas de un Agente2.2. Interaccin entre Agentes2.3. Entorno

3. Diseo e implementacin de un ABMS

4. Anlisis de NetLogo 4.1. Utilidad de la herramienta 4.2. Proyectos Recientes5. Anlisis de aplicaciones5.1. Juego de la vida5.1.1. Agentes e interacciones5.1.2. Diferencias con ABMS actuales5.2 Bug Hunt Speeds5.2.1. Agentes e interacciones5.2.2. Implementacin NetLogo5.2.3. Casusticas y resultados de experimentos

6. Conclusiones

7.Anexo7.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 propiedades7.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

171. 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 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 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 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:

2.2 Interaccin entre agentes

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 informarse, cooperar, coordinarse e incluso realizar negociaciones para un fin comn.

Los Sistemas Basados en Agentes (ABS) son sistemas 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.

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 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.4. Anlisis de Netlogo 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, 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.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.4.1. Utilidad de la herramienta

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 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 la generacin de los fenmenos emergentes.

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

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 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

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 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.5.1. Juego de la vidaEn 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 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 e interaccionesEl 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 viveTodos 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 actualesEl 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 SpeedsLa 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. 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 initial-bugs-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 e interaccionesA 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 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 initial-bugs-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. Implementacin NetLogoEl 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 total-speed-5-caught ;; keeps track of the number of bugs caught with speed of 5 total-speed-4-caught ;; keeps track of the number of bugs caught with speed of 4 total-speed-3-caught ;; keeps track of the number of bugs caught with speed of 3 total-speed-2-caught ;; keeps track of the number of bugs caught with speed of 2 total-speed-1-caught ;; keeps track of the number of bugs caught with speed of 1]

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 setupclear-allset total-speed-6-caught 0set total-speed-5-caught 0set total-speed-4-caught 0set total-speed-3-caught 0set total-speed-2-caught 0set total-speed-1-caught 0set-default-shape bugs "bug"set-default-shape predators "bird"ask patches [ set pcolor white ] ;; white backgroundforeach [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-ticksend

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-default-shape, 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-bugs-each-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 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 modelevery 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 check-caught.

El primero de ellos es muy simple:

to move-predatorask 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 mouse-ycor 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-caughtif not mouse-down? or not mouse-inside? [ stop ]let prey [bugs in-radius (size / 2)] of one-of predators;; no prey here? oh wellif not any? prey [ stop ];; eat only one of the bugs at the mouse locationask one-of prey [ if speed = 6 [ set total-speed-6-caught total-speed-6-caught + 1 ] if speed = 5 [ set total-speed-5-caught total-speed-5-caught + 1 ] if speed = 4 [ set total-speed-4-caught total-speed-4-caught + 1 ] if speed = 3 [ set total-speed-3-caught total-speed-3-caught + 1 ] if speed = 2 [ set total-speed-2-caught total-speed-2-caught + 1 ] if speed = 1 [ set total-speed-1-caught total-speed-1-caught + 1 ] die];; replace the eaten bug with a random offspring from the remaining populationask 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), 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.

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.

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

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? [ ifelse any? predators in-cone 2 120 [ set candidate-predator one-of predators in-cone 2 120 set target-heading 180 + towards candidate-predator set heading target-heading set label "!" ] [set label ""] ] [set label ""] ]end

El mtodo move-bugs comienza inicializando la variable candidate-predator 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 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.

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 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.

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.

6. Conclusiones

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 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.7.2.1 VistasComentaremos 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 InterfazUna vez arrancada la aplicacin, se nos presentar la siguiente ventana:

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 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.

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.

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).

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 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 modeloEn 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 world-width 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 max-pycor, que representan la coordenadas centrales de las celdas ms alejadas del origen.

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 de la simulacinEn 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 mundo-entorno 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: Button. Al pulsarlo se 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. 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. InformacinComo 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 y propiedadesComo 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 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 n-dimensional 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 ;; colorheading ;; orientacinxcor ;; coordenada xycor ;; coordenada yshape ;; formalabel ;; etiquetalabel-color ;; color de la etiquetabreed ;;razahidden? ;; visible o no visible?size ;; tamaopen-size ;; tamao del trazo al desplazarse (cuando pen-mode=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 patchpycor ;; coordenada y del patchpcolor ;; color del patchplabel ;; etiqueta del patchplabel-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.

7.2.2.1 Propiedades adicionales

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]

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.

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

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 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 create-turtles 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 y su semntica):

forward ;; (fd) avanzarback ;; (bk) retrocederleft ;; (lt) giro a la izquierdaright ;; (rt) giro a la derecharepeat ;; 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 entornocrt 4 ;; Creamos 4 tortugasask 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 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 entornocrt 4 ;; Creamos 4 tortugasask 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 entornocrt 4 ;; Creamos 4 tortugas;; Empleando la primitiva repeatask 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 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 Quasi-Pearl, 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 procedimientoclear-all ;; Resetearemos el entornocrt 4 ;; Creamos 4 tortugasask turtles [pd repeat 4 [fd 5 rt 90] pu] ;; Empleando la primitiva repeatend ;; 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 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 procedimientoclear-all ;; Resetearemos el entornocrt 4 ;; Creamos 4 tortugasask turtles [pd repeat 4 [fd 5 rt 90] pu] ;; Empleando la primitiva repeatend ;; Fin del procedimiento

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.

Y nicamente resta modificar el cdigo anterior para ajustarlo a la utilizacin de las variables de entrada, quedando como sigue:

to cuadrado ;; Inicio del procedimientoclear-all ;; Resetearemos el entornocrt turt ;; Creamos [turt] tortugasask turtles [pd repeat rep [fd desp rt ang] pu] ;; Empleando la primitiva repeatend ;; Fin del procedimiento

Un ejemplo con {turt=5}, {rep=83}, {desp=10} y {ang=92} es el siguiente:

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_1variable_global_2variable_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 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. ListasLas 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 lista-1 [el0 el1 elN]

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) :

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]

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]

0. 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]

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. remove-duplicates [a b b c] ;; [a b c]

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

0. 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]

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 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

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 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

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 lista, mostrndolo por la terminal, es el siguiente:

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];; comandosreport valor_resultanteend

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]

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/base3.asp?sitio=geneticapoblaciones&anar=selecc&item=axiomasMacal, 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.palgrave-journals.com/jos/journal/v4/n3/full/jos20103a.html Novak, M. and Wilensky, U. (2005). NetLogo Bug Hunt Speeds model. http://ccl.northwestern.edu/netlogo/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/manualnetlogo/

Quesada, F. J. M. (2011) Simulacin Social: Una introduccin. LSDS, Laboratori de Simulaci de Dinmiques Socio-Histriques. Recuperado el 17 de Mayo de 2015 de: http://sct.uab.cat/lsds/es/content/simulacin-social-una-introduccinWilensky, U. (1999). NetLogo. http://ccl.northwestern.edu/netlogo/. 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/netlogo/docs/dictionary.htmlWilensky, U. (2015) NetLogo 5.2 User Manual. Recuperado el 17 de Mayo de 2015 de: http://ccl.northwestern.edu/netlogo/docs/NetLogo User Manual.pdf


Recommended