Showing posts with label neural nets. Show all posts
Showing posts with label neural nets. Show all posts

Sunday, November 25, 2012

Practica 4 Sistemas Multiagentes[Laboratorio]

Aunque no existe una definición formal y precisa de lo que es un agente, éstos son por lo general vistos como entidades inteligentes, equivalentes en términos computacionales a un proceso del sistema operativo, que existen dentro de cierto contexto o ambiente, y que se pueden comunicar a través de un mecanismo de comunicación interproceso, usualmente un sistema de red, utilizando protocolos de comunicación.En cierto modo, un sistema multiagentes es un sistema distribuido en el cual los nodos o elementos son sistemas de inteligencia artificial, o bien un sistema distribuido donde la conducta combinada de dichos elementos produce un resultado en conjunto inteligente.


Hay que notar que los agentes no son necesariamente inteligentes. Existen como en todo el resto del dominio de la inteligencia artificial, dos enfoques para construir sistemas multiagentes:

El enfoque formal o clásico, que consiste en dotar de los agentes de la mayor inteligencia posible utilizando descripciones formales del problema que resolver y de hacer reposar el funcionamiento del sistema en tales capacidades cognitivas. Usualmente la inteligencia es definida utilizando un sistema formal (por ejemplo, sistemas de inferencia lógica) para la descripción, raciocinio, inferencia de nuevo conocimiento y planificación de acciones a realizar en el medio ambiente.


El enfoque constructivista, que persigue la idea de brindarle inteligencia al conjunto de todos los agentes, para que a través de mecanismos ingeniosamente elaborados de interacción, el sistema mismo genere comportamiento inteligente que no necesariamente estaba planeado desde un principio o definido dentro de los agentes mismos (que pueden ser realmente simples). Este tipo de conducta es habitualmente llamado comportamiento emergente.




El estudio de los sistemas multiagentes está "interesado en el desarrollo y análisis de resoluciones a problemas sofisticados de IA y arquitecturas de control tanto para sistemas con un único agente como sistemas multiagentes”. Los temas de investigación en SMA’s son:
  • ingeniería de software orientado a agentes
  • creencias, deseos e intenciones (en inglés Beliefs, Desires and Intentions, BDI)
  • cooperación y coordinación
  • organización
  • comunicación
  • negociación
  • resolución de problemas distribuida
  • aprendizaje de multiagentes
  • comunidades científicas
  • fiabilidad y tolerancia a fallos

Para el caso de nuestra practica utilizamos el IDE de Netbeans para codificar en Java y el plugin de JADE, anteriormente utilizado en el reporte 4 de la clase de Sistemas Adaptativos, mismo que implementamos un pequeño ejemplo de como poder utilizar los sistemas multiagentes. Las clases utilizadas para el ejemplo fueron solo una denominada JADE con el cual inicializamos lo que es la interfaz gráfica de JADE, esto para mayor facilidad de lo que queríamos implementar, sin embargo una vez hecho el vídeo  la información se almacena en un archivo binario, a diferencia de codificarlo para un ejemplo automatizado. 





En este ejemplo para la practica, se mencionan al agente dos y tres que son de alguna manera los vendedores, quienes utilizan el medio para ofertar a nuestro comprador el libro que este busca, este código fue utilizado para inicializar la plataforma (GUI) de JADE, por lo cual implementamos un ejemplo manual, de como funcionan los sistemas multiagentes, sin embargo se puede mejorar, ya que es mas factible poder establecer limites, alcances y las metas a conseguir por cada uno de los agentes. Para el caso del vídeo se ejemplifica mas claramente como implementamos sobre este código  el uso de los diferentes agentes. 

Aclarando esto, se tiene entonces que el ejemplo utilizado es mas para fines de ver como interactuan un agente con los compradores potenciales y como pueden estos mantener entre estos una subasta ejemplificada, pero haciendo esto de manera manual, se puede implementar de manera automatizada, pero no podríamos para el caso del ejemplo, ver de donde provienen cada una de las propuestas económicas que cada agente realizaría  por lo que implementamos el ejemplo de forma manual y visualizando, a través de la clase jade.tool.dummy agent.Dummy agent, como podemos realizar una subasta del tipo que prefieramos.


La codificación para nuestra practica es breve, pero el ejemplo en el vídeo mostrado es sustancioso, para quienes se quieran atrever a realizar ejemplos mas complejos como el mostrado mas abajo por Victor Dark en su pagina personal de Youtube, donde nos muestra la interacción de agentes utilizando Twitter para determinar la información que recoge cada agente y como se interpreta para cada uno.




Bibliografía Consultada:

Introducción a los Agentes y Sistemas Multiagentes.  Llamas Bello César. Departamento de Informática Universidad de Valladolid.

Modelado de sistemas complejos mediante simulación basada en agentes y mediante dinámica de sistemas  Izquierdo, Luis R.; Galán, José M.;Santos, José I.;del Olmo, Ricardo (2008).  Empiria. Revista de Metodología de Ciencias Sociales 16. pp. 85-112.

Developing Multi-Agent Systems with JADE. Fabio Luigi Bellifemine, Giovanni Caire, Dominic Greenwood. Chapter 4.



Paginas visitadas para la realización de la practica:









Thursday, October 25, 2012

Practica 3 Redes Neuronales

Reconocimiento de Patrones

Introducción

Con un paradigma convencional de programación en ingeniería del software, el objetivo del programador es modelar matemáticamente (con distintos grados de formalismo) el problema en cuestión y posteriormente formular una solución (programa) mediante un algoritmo codificado que tenga una serie de propiedades que permitan resolver dicho problema. En este sentido, el diseño de la red tiene menos que ver con cuestiones como los flujos de datos y la detección de condiciones, y más que ver con cuestiones tales como la selección del modelo de red, la de las variables a incorporar y el pre procesamiento de la información que formará el conjunto de entrenamiento. Asimismo, el proceso por el que los parámetros de la red se adecuan a la resolución de cada problema no se denomina genéricamente programación sino que se suele denominar entrenamiento neuronal.

La mayoría de los científicos coinciden en que una RNA es muy diferente en términos de estructura de un cerebro animal. Al igual que el cerebro, una RNA se compone de un conjunto masivamente paralelo de unidades de proceso muy simples y es en las conexiones entre estas unidades donde reside la inteligencia de la red. Sin embargo, en términos de escala, un cerebro es muchísimo mayor que cualquier RNA creada hasta la actualidad, y las neuronas artificiales también son más simples que su contrapartida animal. Biológicamente, un cerebro aprende mediante la reorganización de las conexiones sinápticas entre las neuronas que lo componen. De la misma manera, las RNA tienen un gran número de procesadores virtuales interconectados que de forma simplificada simulan la funcionalidad de las neuronas biológicas. En esta simulación, la reorganización de las conexiones sinápticas biológicas se modela mediante un mecanismo de pesos, que son ajustados durante la fase de aprendizaje. En una RNA entrenada, el conjunto de los pesos determina el conocimiento de esa RNA y tiene la propiedad de resolver el problema para el que la RNA ha sido entrenada.

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.

Objetivo

Con esta practica queremos conocer las implementaciones del reconocimiento de patrones mediante la aplicación de las redes neuronales en herramientas de software con entrenamiento de perceptrones que ayuden a las personas en sus deficiencias genéticas o accidentales con la finalidad de avanzar tecnológicamente. Nos proporciona herramientas para nuestra formación profesional, y la manera en que podemos plantearnos soluciones a problemas complejos que nos encontremos en el camino de nuestras labores cotidianas como desarrolladores o dueños de empresas enfocadas a dar soluciones de software enfocado a estas habilidades medicas

Justificación

La elaboración de la presente práctica es para conocer la funcionalidad de los perceptrones y como podemos entrenarlos para un objetivo especifico o bien para determinadas acciones dentro de un todo. Nos ayuda a entender como funcionan las cosas en la vida real y como estas observaciones gracias a grandes investigadores han ido saliendo a la luz con ayuda de las diferentes ciencias aplicadas para poder darle al ser humano una visión mas amplia de su entorno mediante un espacio virtual

Bajo ese precepto la practica que implementamos ocupa realizar una cadena de "neuronas" artificiales para el reconocimiento de patrones, y que pretende retroalimentar lo anteriormente mencionado sobre la red neuronal y una de sus posibles aplicaciones

La clase Main

int main(int argc, const char *argv[]) {
  Mat frame;
  CvCapture* capture;
//aqui indicamos las validaciones para dar por enterado cuando tenemos errores en la identificación
  if(!fc.load(fcn)) {
    std::cout << "Error cargando cascada de clasificacion..." << std::endl;
    return -1;
  }
//o bien pasamos los valores que la camara esta tomando en ese momento para que nuestras neuronas
  capture = cvCaptureFromCAM(-1);//artificiales puedan posteriormente reconocer este patron de valores
  if(capture) { //mismos que se tendran en el archivo xml, y podran compararse posteriormente, si el 
    while(true) {//individuo volviera a pasar frente a la camara la proxima ocasión, las neuronas podran
      frame = cvQueryFrame(capture);//recordar los valores de los rasgos de las caras que pasaron
//frente a la camara de manera que sera mas factible poder resolver mas rapidamente el reconocimiento
      if(!frame.empty())//facial de la persona reconocida.
        reconoceme(frame);
      else {
 std::cout << "Error al capturar video..." << std::endl;//error de salida en el caso de tener algun
        break;//inconveniente para almacenar o guardar la informacion de la cara de la persona.
      }

      int q = waitKey(10);//simplemente al terminar podremos presionar la tecla q o Q para salir
      if((char)q == 'q' || (char)q == 'Q')//segun sea el caso, por lo que es bastante simple el 
        break;// manejo de este programa.
    }
  }
  return 0;
}

La clase reconoceme es donde ocurre toda la lógica neuronal

void reconoceme(Mat frame) {
  Mat frame_gray;// en este punto generamos un marco de trabajo
  std::vector<Rect> faces;//utilizando vectores para ello, es decir indicara en un cuadro la cara 
//localizada en el marco de la camara manejada como una matriz
  cvtColor(frame, frame_gray, CV_BGR2GRAY);//de esta manera es mas simple localizar rasgos especificos
  equalizeHist(frame_gray, frame_gray);//de las personas localizadas en el rango de percepcion de la 
  fc.detectMultiScale(frame_gray, faces, 1.1, 2, 0, Size(80, 80));//camara, razón por la que se ajustan
// los parametros para que nuestras neuronas artificiales no cometan errores, o bien estos sean minimos
  for(int i = 0; i < faces.size(); i++) { //aqui el programa podra determinar si tiene en frente uno
    Mat faceROI = frame_gray(faces[i]);// o mas caras de personas en el rango visual de la camara
    Point pt1(faces[i].x, faces[i].y);//por lo que podra implementar el reconocimiento de las personas
    Point pt2(faces[i].x + faces[i].width, faces[i].y + faces[i].height);//alrededor de la camara, lo hará
    rectangle(frame, pt1, pt2, Scalar(0, 0, 0), 10, 8, 0);// tantas veces como le sean necesarias
  }
  Point salir(5, 35);
  putText(frame, "Presiona 'Q' para salir...", salir, 1, 1.5, Scalar(0, 0, 0), 2, 8, 0);
  imshow(title, frame);
}

Finalmente nuestra base de información, es decir, las "neuronas", aquí es de donde son llamadas para realizar la interpretación enviada por la cámara y llamada por la clase reconoceme para implementar los análisis de lo observado

string title = "Deteccion de patrones practicando con redes neuronales";
String fcn = "reconoceme.xml";//hacemos referencia a un documento xml el cual contiene
CascadeClassifier fc;//cada una de las "neuronas"

Resultados



A la izquierda ejemplo localizado en la red, a la derecha foto de lo que se implemento. Detalles de resolución y diseño es lo que aplicaría en el caso de querer mejorar el diseño de la interfaz gráfica.

Vídeo Generado para visualizar la aplicación de el reconocimiento facial

Bibliografía Consultada

  • C. Aldrich and J. S. J. van Deventer.Comparison of different artificial neural nets for the detection and location of gross errors in process systems. Industrial & Engineering Chemistry Research, 34(1):216-224,1995.
  • C. M. Bishop. Neural Networks for Pattern Recognition. Oxford University Press, USA, 1995.
  • C. M. Bishop. Pattern recognition and machine learning. Springer, 2006 (Online service).
  • G. J. Bowden, G. C. Dandy, and H. R. Maier. Data transformation for neural network models in water resources applications. Journal of Hydroinformatics, 5(4):245-258, 2003.
  • M. Brown and C. Harris. Neurofuzzy adaptive modelling and control Prentice Hall, 1995.
  • J. A. Freeman and D. M. Skapura. Neural Networks: Algorithms, Applications, and Programming Techniques. Addison-Wesley, 1991.
  • J. R. Hilera and V. J. Martinez. Redes neuronales artificiales. Fundamentos, modelos y aplicaciones. Addison-Wesley Iberoamericana S.A, Madrid, 1995.
  • J. C. Hoskins and D. M. Himmelblau. Process control via artificial neural networks and reinforcement learning. Computers & chemical engineering, 16(4):241-251, 1992.

Imágenes de http://en.wikipedia.org/wiki/

Imágenes personales incluidas en el reporte generadas por captura de pantalla, para poder obtener lo que se observa en el preciso momento de la rutina del programa.

Información de "neuronas artificiales" con ayuda de Ibarra Cano