5 CHAPTER FIVE: ANALYTICAL PROCESS & CODING FRAMEWORK
5.6 Concept Development, Coding, Themes:
5.6.1 Coding Process
3.1.1 CONCEPTOS BÁSICOS
Como se mencionó anteriormente, dos enfoques principales son los que han guiado la investigación en el área de ingeniería de software para sistemas basados en agentes. El primero de estos enfoques presenta un nuevo paradigma de ingeniería de software orientada a agentes. Por esta razón, en esta sección se establecerán los conceptos básicos en los cuales se sustenta este enfoque.
El primero de estos conceptos clave es, como lo establecen Zambonelli, Jennings y Wooldridge en [43], que los agentes se pueden conceptuar como entidades de software que exhiben características como autonomía, proactividad y localización en su afán de cumplir con sus objetivos particulares.
La autonomía de un agente indica que éste no es sujeto pasivo del flujo de control global de sus acciones. Un agente posee su propio flujo de control, típicamente orientado a cumplir con alguna tarea específica, y decide por si mismo cuáles acciones realizar y cuando realizarlas.
Los agentes están localizados en algún ambiente, ya sea físico, como en una línea de producción, o computacional. Los agentes pueden percibir dicho ambiente y pueden actuar sobre una parte o la totalidad del mismo.
La proactividad de los agentes les permite actuar de acuerdo a las condiciones cambiantes y muchas veces impredecibles de su ambiente (e inclusive modificar su comportamiento) para asegurar que sus metas sean conseguidas y que puedan decidir que nuevas metas buscar y cuándo es conveniente tratar de conseguirlas.
Un ejemplo simple de un agente puede ser un componente de software que filtre y organice los correos electrónicos de un usuario [25]. Este agente es autónomo si se ejecuta de manera transparente al usuario y sin necesidad de que éste último lo invoque. Es proactivo si es que puede de alguna manera indicar a su usuario de nuevas condiciones en su correo y por último, está localizado en un ambiente de correos electrónicos y puede percibir su ambiente al detectar nuevos correos y puede actuar sobre su ambiente al filtrar y organizar los correos.
Los agentes pueden ser útiles individualmente si tienen alguna tarea que realizan en nombre del usuario como por ejemplo agentes que realizan búsquedas de sitios web en nombre del usuario. Sin embargo en la mayoría de los casos los agentes se encuentran en ambientes que poseen a otros agentes. En este caso el comportamiento del sistema se deriva de la interacción de los diversos agentes, es decir que los agentes poseen la habilidad de socializar [39]. Los agentes socializan entre si ya sea para llevar a cabo una tarea en común o por que es necesario para lograr sus propias metas.
Esto deja en claro que existen (desde un punto de vista poco detallado) dos tipos de sistemas multi-agente: Los sistemas distribuidos para solucionar problemas y los sistemas abiertos. Los primeros los agentes y componentes del sistema están explícitamente diseñados para resolver una tarea en común mientras que en los sistemas abiertos, los agentes no tienen metas comunes y han sido desarrollados para cumplir diferentes tareas, estos sistemas cambian continuamente debido a la entrada y salida de agentes.
La mayor diferencia entre estos dos tipos de sistemas es que en los sistemas cerrados se conocen a priori los agentes del sistema, se asume que dichos agentes están diseñados para cooperar entre ellos y hasta cierto punto pueden confiar unos en otros. En los sistemas abiertos estas características no están presentes, los agentes tienen que hacer uso de servicios prestados por otros agentes, así que comúnmente se presentan situaciones de competencia y de dinamismo en la conformación del sistema (en cuanto a qué agentes lo componen).
Los objetos poseen características similares a las que poseen los agentes, sin embargo los objetos no son autónomos ni poseen un comportamiento proactivo ya que aun cuando prestan servicios, no son capaces de decidir sus acciones sino que dependen de que un flujo de control externo solicite sus servicios. Además los objetos no están situados en ningún ambiente, encapsulan recursos en términos de sus atributos y su única percepción de un posible ambiente aviene a través de nombres y referencias a otros objetos.
Sin embargo las características descritas corresponden al enfoque tradicional de los objetos. Hoy en día, los conceptos y características de los objetos y componentes son más cercanos a aquellas de los agentes. Los objetos y componentes modernos pueden ser activos y pueden poseer flujos de control interno que les permita realizar alguna tarea, además pueden prestar servicios de manera concurrente y protegerse a sí mismos de solicitudes de servicios posiblemente inseguras.
Dadas las similitudes entre los objetos y componentes actuales y los agentes, es común que los agentes sean implementados haciendo uso de objetos o componentes activos. Esta convergencia tecnológica entre agentes, objetos y componentes es una prueba de que desde el punto de vista de la ingeniería de software, la abstracción de los agentes es adecuada para el desarrollo de sistemas complejos.
Los objetos son comúnmente diseñados para encapsular ciertos datos o recursos del sistema y para prestar servicios (como por ejemplo acceder a los recursos que encapsula). La interacción entre los objetos se da a través de los servicios ya que un objeto tiene que hacer uso de dichos servicios para acceder a datos o recursos de los que no dispone. Siguiendo la metodología orientada a objetos, todo en el sistema es diseñado y modelado como un objeto y no hay una diferencia explícita entre recursos estáticos y actores dinámicos.
En el desarrollo orientado a objetos se promueve la encapsulación de recursos y funciones y modelar las interacciones de manera funcional pero no se considera la encapsulación del flujo de control, es decir que se prevé la existencia de un flujo de control global que gobierna todo el sistema o de un número reducido de flujos independientes pero controlables y sincronizados [43]. Sistemas muy grandes y complejos puede no ser factible tener este tipo de control sino que delegar el control puede resultar una mejor solución.
Delegar control a componentes u objetos autónomos puede verse como una evolución de la encapsulación tradicional. Si las entidades del sistema pueden encapsular datos, funciones y control, más fácilmente se pueden adecuar a las condiciones cambiantes de una ambiente abierto y reducir las dependencias globales. De la misma manera, en ambientes abiertos es prácticamente imposible conocer a priori la totalidad de interdependencias entre elementos, por lo cual, si se hace uso de entidades autónomas pueden ser enriquecidas con habilidades sociales que les permitan decidir su modo de acción en tiempo de ejecución y no estar limitadas a las situaciones previstas.
Sin embargo, extender el enfoque tradicional orientado a objetos e incorporar nuevas características (como la delegación de control) que cubran las nuevas necesidades de los sistemas complejos modernos puede traer consigo, además de incrementar la complejidad del modelado, errores al empatar el nivel de abstracción adoptado y el nivel
conceptual en el que los problemas son resueltos [zambonelli 2]. Por lo tanto es muy factible considerar que el paradigma orientado a agentes es capaz y adecuado para resolver problemas en escenarios complejos de manera flexible, altamente modular y robusta
3.1.2 MODELOS ORGANIZACIONALES
Dado que los agentes poseen habilidad social y a que en ambientes abiertos es forzosamente necesario que los agentes hagan uso de esta característica, a lo largo de los años diferentes propuestas se han realizado en cuanto al modelo de organización que los agentes siguen para socializar.
Algoritmos basados en organizaciones de hormigas, basados en sociedades, en metáforas físicas, entre otras, han sido propuestos y probados en casos específicos como por ejemplo en solución de problemas distribuidos complejos, en robótica y en cómputo móvil. Sin embargo ninguna de estas propuestas puede ser catalogada estrictamente como de propósito general [43].
Uno de los enfoques actuales en cuanto a modelos organizacionales, aplicable en términos generales para sistemas complejos, dinámicos y abiertos, es el de organizaciones humanas.
Siguiendo este modelo, cualquier sistema es visto como una colección (posiblemente abierta) de elementos o entidades autónomas e individuales (agentes) que interactúan entre si. Cada uno de los agentes puede cumplir o representar con varios roles que le confieren ciertas responsabilidades o submetas (con respecto al sistema en su totalidad) y las cuales el agente de manera autónoma buscará cumplir.
Siguiendo este modelo los agentes hacen uso de la interacción con otros agentes como un medio para conseguir sus metas, es decir que el concepto de interacción se extiende más allá de las interdependencias entre objetos y componentes. Las interacciones son definidas en el o los roles que cumplen los agentes y permiten determinar la estructura general del sistema y el papel que juega cada agente. Así, el conseguimiento de metas (ya sean globales o individuales) está definido por las actividades de la organización de agentes, la cual se deriva del funcionamiento autónomo de los agentes y de sus interacciones.
Para sistemas no muy complejos, modelar una sola estructura organizacional puede ser suficiente pero para sistemas complejos puede llegar a ser necesario aumentar el nivel de granularidad en canto a la organización de los agentes y por ende puede llegar a ser necesario modelar el sistema con diferentes organizaciones. Los agentes pueden entonces formar parte de más de una organización y cumplir diferentes roles en cada organización a la que pertenezca.
Entonces podemos caracterizar y modelar un sistema cualquiera partiendo de abstracciones referentes al modelo organizacional. Las abstracciones más relevantes en este modelo son el ambiente en el que se sitúan los agentes, los roles que pueden cumplir, las interacciones definidas por los roles, las reglas o leyes de la organización y las estructuras organizacionales.
Los agentes están siempre inmersos en un ambiente y modelar dicho ambiente implica determinar todas las entidades y recursos que pueden ser percibidos por los agentes o sobre los que pueden actuar, pueden controlar o inclusive consumir. El ambiente como ya se ha mencionado puede ser físico o computacional. Es necesario establecer qué será considerado como parte del ambiente, cómo lo deberán percibir o no los agentes y de qué manera podrán actuar sobre el. Con esto se quiere decir que el ambiente debe ser especificado, sus características identificadas, modeladas e inclusive se deberán adecuar a los requerimientos del sistema.
Los roles indican y establecen el comportamiento y qué se espera que haga cada