martes, 27 de noviembre de 2012

Proyecto Final

A continuación ponemos la presentación que utilizamos en clase:




Después de esto, el video de la página funcionando:




Por último, un enlace para bajar el código completo:

http://www.mediafire.com/?kawn5s6nh3ykl1v

viernes, 23 de noviembre de 2012

Extras



Estos son los links de las publicaciones extras realizadas en el blog con el fin de ser tomadas en cuenta para la calificación final de la clase de Sistemas Adaptativos.

Agentes Inteligentes
http://sistemas-adaptativos-fime.blogspot.mx/2012/11/agentes-inteligentes.html

Caos
http://sistemas-adaptativos-fime.blogspot.mx/2012/11/caos.html

Lógica difusa y sistemas expertos
http://sistemas-adaptativos-fime.blogspot.mx/2012/11/logica-difusa.html

Redes neuronales artificiales
http://sistemas-adaptativos-fime.blogspot.mx/2012/11/redes-neuronales-artificiales.html

Agentes Inteligentes


Caos



Teoría del caos es la denominación popular de la rama de las matemáticas, la física y otras ciencias que trata ciertos tipos de sistemas dinámicos muy sensibles a las variaciones en las condiciones iniciales. Pequeñas variaciones en dichas condiciones iniciales pueden implicar grandes diferencias en el comportamiento futuro; complicando la predicción a largo plazo. Esto sucede aunque estos sistemas son en rigor determinísticos, es decir; su comportamiento puede ser completamente determinado conociendo sus condiciones iniciales.

Clasificación


Los sistemas dinámicos se pueden clasificar básicamente en:
  • Estables
  • Inestables
  • Caóticos

Un sistema estable tiende a lo largo del tiempo a un punto, u órbita, según su dimensión (atractor o sumidero). Un sistema inestable se escapa de los atractores. Y un sistema caótico manifiesta los dos comportamientos. Por un lado, existe un atractor por el que el sistema se ve atraído, pero a la vez, hay "fuerzas" que lo alejan de éste. De esa manera, el sistema permanece confinado en una zona de su espacio de estados, pero sin tender a un atractor fijo.

Una de las mayores características de un sistema inestable es que tiene una gran dependencia de las condiciones iniciales. De un sistema del que se conocen sus ecuaciones características, y con unas condiciones iniciales fijas, se puede conocer exactamente su evolución en el tiempo. Pero en el caso de los sistemas caóticos, una mínima diferencia en esas condiciones hace que el sistema evolucione de manera totalmente distinta. Ejemplos de tales sistemas incluyen el Sistema Solar, las placas tectónicas, los fluidos en régimen turbulento y los crecimientos de población.



Aplicaciones


La Teoría del Caos y la matemática caótica resultaron ser una herramienta con aplicaciones a muchos campos de la ciencia y la tecnología. Gracias a estas aplicaciones el nombre se torna paradójico, dado que muchas de las prácticas que se realizan con la matemática caótica tienen resultados concretos porque los sistemas que se estudian están basados estrictamente con leyes deterministas aplicadas a sistemas dinámicos.
En Internet se desarrolla este concepto en Teoría del Caos, el tercer paradigma, de cómo la estadística inferencial trabaja con modelos aleatorios para crear series caóticas predictoras para el estudio de eventos presumiblemente caóticos en las Ciencias Sociales. Por esta razón la Teoría del Caos ya no es en sí una teoría: tiene postulados, fórmulas y parámetros recientemente establecidos con aplicaciones, por ejemplo, en las áreas de la meteorología o la física cuántica, y actualmente hay varios ejemplos de aplicación en la arquitectura a través de los fractales, por ejemplo el Jardín Botánico de Barcelona de Carlos Ferrater.


A continuación mostramos un video sobre este tema con una explicación más dinámica y sencilla.





Lógica Difusa

A continuación mostramos un video con una excelente explicación acerca de la lógica difusa y, como extra, sistemas expertos.



Redes Neuronales Artificiales





Las redes de neuronas artificiales (denominadas habitualmente como RNA o en inglés como: "ANN" ) son un paradigma de aprendizaje y procesamiento automático inspirado en la forma en que funciona el sistema nervioso de los animales. Se trata de un sistema de interconexión de neuronas en una red que colabora para producir un estímulo de salida. En inteligencia artificial es frecuente referirse a ellas como redes de neuronas o redes neuronales.


Propiedades


Una red neuronal se compone de unidades llamadas neuronas. Cada neurona recibe una serie de entradas a través de interconexiones y emite una salida. Esta salida viene dada por tres funciones:

1. Una función de propagación (también conocida como función de excitación), que por lo general consiste en el sumatorio de cada entrada multiplicada por el peso de su interconexión (valor neto). Si el peso es positivo, la conexión se denomina excitatoria; si es negativo, se denomina inhibitoria.

2. Una función de activación, que modifica a la anterior. Puede no existir, siendo en este caso la salida la misma función de propagación.

3. Una función de transferencia, que se aplica al valor devuelto por la función de activación. Se utiliza para acotar la salida de la neurona y generalmente viene dada por la interpretación que queramos darle a dichas salidas. Algunas de las más utilizadas son la función sigmoidea (para obtener valores en el intervalo [0,1]) y la tangente hiperbólica (para obtener valores en el intervalo [-1,1]).




Ventajas



Las redes neuronales artificiales (RNA) tienen muchas ventajas debido a que están basadas en la estructura del sistema nervioso, principalmente el cerebro.

·         Aprendizaje: Las RNA tienen la habilidad de aprender mediante una etapa que se llama etapa de aprendizaje. Esta consiste en proporcionar a la RNA datos como entrada a su vez que se le indica cuál es la salida (respuesta) esperada.

·         Auto organización: Una RNA crea su propia representación de la información en su interior, descargando al usuario de esto.

·         Tolerancia a fallos: Debido a que una RNA almacena la información de forma redundante, ésta puede seguir respondiendo de manera aceptable aun si se daña parcialmente.

·         Flexibilidad: Una RNA puede manejar cambios no importantes en la información de entrada, como señales con ruido u otros cambios en la entrada (por ejemplo si la información de entrada es la imagen de un objeto, la respuesta correspondiente no sufre cambios si la imagen cambia un poco su brillo o el objeto cambia ligeramente).

·         Tiempo real: La estructura de una RNA es paralela, por lo cual si esto es implementado con computadoras o en dispositivos electrónicos especiales, se pueden obtener respuestas en tiempo real.



Aprendizaje


Una segunda clasificación que se suele hacer es en función del tipo de aprendizaje de que es capaz (si necesita o no un conjunto de entrenamiento supervisado). Para cada tipo de aprendizaje encontramos varios modelos propuestos por diferentes autores:

·         Aprendizaje supervisado: necesitan un conjunto de datos de entrada previamente clasificado o cuya respuesta objetivo se conoce. Ejemplos de este tipo de redes son: el perceptrón simple, la red Adaline, el perceptrón multicapa, red backpropagation, y la memoria asociativa bidireccional.

·         Aprendizaje no supervisado o autoorganizado: no necesitan de tal conjunto previo. Ejemplos de este tipo de redes son: las memorias asociativas, las redes de Hopfield, la máquina de Boltzmann y la máquina de Cauchy, las redes de aprendizaje competitivo, las redes de Kohonen o mapas autoorganizados y las redes de resonancia adaptativa (ART).

·         Redes híbridas: son un enfoque mixto en el que se utiliza una función de mejora para facilitar la convergencia. Un ejemplo de este último tipo son las redes de base radial.

·         Aprendizaje reforzado: se sitúa a medio camino entre el supervisado y el autoorganizado.




Aplicaciones


Las características de las RNA las hacen bastante apropiadas para aplicaciones en las que no se dispone a priori de un modelo identificable que pueda ser programado, pero se dispone de un conjunto básico de ejemplos de entrada (previamente clasificados o no). Asimismo, son altamente robustas tanto al ruido como a la disfunción de elementos concretos y son fácilmente paralelizables.

Esto incluye problemas de clasificación y reconocimiento de patrones de voz, imágenes, señales, etc. Asimismo se han utilizado para encontrar patrones de fraude económico, hacer predicciones en el mercado financiero, hacer predicciones de tiempo atmosférico, etc.

También se pueden utilizar cuando no existen modelos matemáticos precisos o algoritmos con complejidad razonable, por ejemplo la red de Kohonen ha sido aplicada con un éxito más que razonable al clásico problema del viajante (un problema para el que no se conoce solución algorítmica de complejidad polinómica).

Otro tipo especial de redes neuronales artificiales se ha aplicado en conjunción con los algoritmos genéticos (AG) para crear controladores para robots. La disciplina que trata la evolución de redes neuronales mediante algoritmos genéticos se denomina Robótica Evolutiva. En este tipo de aplicación el genoma del AG lo constituyen los parámetros de la red (topología, algoritmo de aprendizaje, funciones de activación, etc.) y la adecuación de la red viene dada por la adecuación del comportamiento exhibido por el robot controlado (normalmente una simulación de dicho comportamiento).



jueves, 8 de noviembre de 2012

Reporte 4 - Investigación

JADE



Es una plataforma software para el desarrollo de agentes, implementada en Java. JADE crea múltiples contenedores para los agentes, cada uno de los cuales puede ejecutarse en uno o en varios sistemas. Un conjunto de contenedores constituye una plataforma.
Cada plataforma debe tener un contenedor principal que tiene dos agentes especiales denominados AMS y DF.

El AMS (Agent Management System) controla la plataforma. Es el único que puede crear y destruir a otros agentes, destruir contenedores y parar la plataforma. El DF (Directory Facilitator) proporciona un directorio que anuncia qué agentes hay disponibles en la plataforma.

Un agente JADE cumple las siguientes características:
  • Tiene un nombre único en el entorno de ejecución.
  • Se implementa como un único hilo de ejecución (single-threaded).
  • Tiene un metodo de inicio (setup) y otro de fin (takeDown).
  • El método protegido setup() sirve para inicializar el agente incluyendo instrucciones que especificarán la ontología a utilizar y los comportamientos asociados al agente. Se invoca al comenzar la ejecución del agente.
  • El método protegido takeDown() sirve para liberar recursos antes de la eliminación del agente. Este método es invocado cuando se realiza una llamada al método doDelete(), que es el que realmente da por finalizada la ejecución del agente.
  • Ambos métodos deben ser sobreescritos.


SPADE



SPADE es una plataforma libre de sistemas multi-agente desarrollada en Python y basada en la tecnología de mensajería instantánea XMPP. Algunas de las características más notables de la plataforma SPADE son: soporte de organizaciones virtuales, notificación de presencia, compatible con FIPA e independencia del lenguaje y la plataforma.

SPADE es una plataforma de sistemas multi-agente desarrollada en 2005 en la Universidad Politécnica de Valencia. La plataforma nació como una prueba de concepto para probar la tecnología de la mensajería instantánea como protocolo de transporte para los agentes inteligentes. Desde ese momento el proyecto ha seguido creciendo y añadiendo nuevas características aprovechando la flexibilidad del protocolo de mensajería instantánea basado en XML y la cantidad de extensiones desarrolladas para el mismo que son aprovechables dentro del marco de los sistemas multi-agente. La plataforma SPADE está basada en un conjunto de estándares, siendo los más destacables FIPA y XMPP/Jabber.

Las principales características de la plataforma SPADE son:

  •  Soporte del estándar FIPA mediante el protocolo de mensajería instantánea XMPP (Agentes AMS y DF incluídos)
  • Notificación de presencia entre agentes.
  • Organizaciones Virtuales basadas en el protocolo de multi-conferencia MUC.
  • Comunicación P2P entre agentes.
  • Invocación remota de servicios entre agentes usando el estándar XML-RPC.
  • Procesadores de lenguajes de contenido en SL0 y RDF.
  • Modelo de agente BDI basado en Conocimiento, Deseos e Intenciones.
  • Modelo de comportamientos: Cíclicos, Periódicos, Timeout, una ejecución, máquina de estados finita y basado en eventos.
  • Soporte de comunicación con otras plataformas mediante diversos protocolos de transporte: JADE (via HTTP o XMPP) y SIMBA.
  • Publicación y subscripción de eventos mediante el estándar PubSub.
  • Interfaz gráfica basada en web.




MADKit



MADKit es una plataforma multiagente para desarrollar y ejecutar aplicaciones basadas en un paradigma orientado a la organización. Estos paradigmas multiagente utilizan agentes, grupos y roles como los puntos bases para construir aplicaciones complejas. MADKit no fuerza ninguna consideración acerca de la estructura interna de los agentes, de esta manera permite a los desarrolladores implementar libremente sus propias arquitecturas de agentes.

MADKit es también una plataforma distribuida que permite el desarrollo de eficientes aplicaciones distribuidas. Para los programadores, todas las consideraciones acerca de componentes  distribuidos básicos tales como “sockets” y “ports”, son totalmente transparentes. Una aplicación desarrollada en una manera multiagente puede ser ejecutada de una manera distribuida sin cambiar ninguna línea de código. Los mecanismos de distribución de MADKit no utilizan las técnicas bastante lentas de RMI o CORBA de acceso remoto, de esta manera permite un modo eficiente de comunicación.

MADKit está construido alrededor del concepto de micro-kernel y agentificación de servicios.
El kernel de MADKit es más bien pequeño, pero los agentes ofrecen los servicios importantes que se pueden necesitar para las aplicaciones. Distribución y pasaje remoto de mensajes, monitoreo y observación de agentes, edición, etcétera, son todas realizadas por agentes. MadKit provee un conjunto de “contenedores”, esto es entornos de ejecución para correr aplicaciones, con el objetivo de que MadKit trabaje en diferentes situaciones: como un entorno de desarrollo, pero también como una herramienta embebida para aplicaciones.



ROBOCUP



RoboCup es un proyecto internacional fundado en 1997 para promover, a través de ompetencias integradas por robots autónomos, la investigación y educación sobre inteligencia artificial.

La iniciativa está dividida en cuatro grandes competencias. Cada una de ellas tiene varias ligas internas dependiendo de la modalidad.

RoboCupSoccer

Es una competencia de fútbol con robots autónomos.
El objetivo oficial del proyecto es conseguir para mediados del siglo XXI un equipo capaz de vencer al ganador de la Copa Mundial de la FIFA siguiendo sus propias reglas.

RoboCupRescue

Se trata de poner a prueba a los robots para tareas de búsqueda y salvamento de víctimas en terreno desfavorable. Los robots pueden ser tanto autónomos como guíados por control remoto.

RoboCupJunior

Intenta acercar las metas y objetivos de Robocup a estudiantes de educación primaria y secundaria.

RoboCup@Home

Competencia añadida en la edición del 2006 celebrada en Bremen (Alemania) que se centra en la aplicación de robots autónomos en la vida diaria y en las relaciones hombre-robot derivadas.