lunes, 24 de septiembre de 2012



1. Describe la relacion entre percepción, acción y ambiente (con respecto a un             sistema adaptativo)




Sistema adaptativo
Percepción
Acción
Ambiente
Definición:
Es un proceso simple en el estimulo de la información, sin necesidad de procesamientos mentales posteriores
Acto de hacer algo
Entorno que afecta al ser
Definición y ejemplo con respecto a  un sistema adaptativo:
Es lo que percibe en su entorno a pocos rasgos, aplicando el ejemplo de los paracaidistas de buscar el lugar más optimo (Búsqueda local) la percepción de cada paracaidista es diferente ya que todos están en diferentes niveles de alturas, la percepción de todos es diferente.
Es lo que realiza después tomar la percepción, aplicando el mismo ejemplo del alpinista, este toma la acción de “subir” o “baja” según como perciba, ya sea lo que busque mayor/menor.
Es el lugar donde se realiza y con lo que cuenta, por ejemplo aplicando el (ACO) no es lo mismo el ambiente de una colonia pequeña de hormigas en un gran lugar y muchos puntos a buscar, que un gran numero en un lugar reducido.
Relación:
Un agente inteligente forma gran parte de la inteligencia artificial, y este es una entidad capaz de percibir su entorno, procesar tales percepciones y responder o actuar en su entorno de manera racional, es decir, de manera correcta y tendiendo a maximizar un resultado esperado. Es capaz de percibir su medioambiente con la ayuda de sensores y actuar en ese medio.


2. Enumera las características de un Algoritmo Genético


Son algoritmos estocásticos, dos ejecuciones distintas pueden dar dos soluciones distintas.
Son algoritmos de búsqueda múltiple, dan varias soluciones.
Son algoritmos que hacen una barrida mayor al subespacio de posibles soluciones válidas, y con diferencia.
Tienen algún elemento aleatorio, por lo que dan soluciones aproximadas, no exactas.
La optimización es función de la representación de los datos. Este es el concepto clave dentro de los algoritmos genéticos, ya que una buena codificación puede hacer la programación y la resolución muy sencillas, mientras que una codificación errada nos va a obligar a estudiar que el nuevo genoma cumple las restricciones del problema, y en muchos problemas tendremos que abortar los que no cumplan las restricciones, por ser estas demasiado complejas. Además, la velocidad de convergencia va a estar fuertemente influenciada por la representación.
Es una búsqueda paramétricamente robusta. Eso quiere decir que hemos de escoger realmente mal los parámetros del algoritmo para que no converga.
Los algoritmos genéticos son intrínsecamente paralelos. Esto significa que, independientemente de que lo hayamos implementado de forma paralela o no, buscan en distintos puntos del espacio de soluciones de forma paralela.


3. Proporciona ejemplos de evaluación, selección, cruza y mutación (AG´s)




Ejemplo: Un escritor tiene que redactar un número de obras de la literatura en un tiempo conocido. Cada libro tiene un tiempo de redacción y un beneficio asociado. Se desea saber cuál es el máximo benecito alcanzable. Cada grupo de obras “aceptadas” se representan con binario a lo que se denomina cromosoma.

While (Iteración==Fin)
{
Evaluación: Cada uno de estos cromosomas de la población inicial que se realizo inicialmente se aplicara una función de aptitud para conocer que tan viable es la solución
Selección: Después de saber la aptitud de cada cromosoma se procede a elegir los cromosomas que serán cruzados en la siguiente generación. Los cromosomas con mejor aptitud tienen mayor probabilidad de ser seleccionados.
Cruza: es el principal operador genético, representa la reproducción sexual, opera sobre dos cromosomas a la vez para generar dos descendientes donde se combinan las características de ambos cromosomas padres.
Mutación: modifica al azar parte del cromosoma de los individuos, y permite alcanzar zonas del espacio de búsqueda que no estaban cubiertas por los individuos de la población actual.
*Remplazo: una vez aplicados los operadores genéticos, se seleccionan los mejores individuos para conformar la población de la generación siguiente
}


4. Enumera las características de Particle Swarm Optimization


Existencia de individuos: Representan soluciones 
del problema.

Proceso de evolución: Permite definir cambios en la 
población a cada generación


5 . Proporciona un ejemplo de un AC donde apliques una regla 1 (llega hasta t=1). 

 Ejemplo de un cajero automatica








6. Enumera algunas métricas para analizar redes complejas

Estructura.

1.La distribución de conexiones (o vecinos) P(k): Es la probabilidad de que un nodo escogido al azar tenga k conexiones (o vecinos).Por ejemplo, en una red de contactos sexuales P(k) es la probabilidad de que una persona escogida al azar en una sociedad haya tenido k parejas sexuales distintas a lo largo de su vida.

2. El coeficiente de agregación C: Es la probabilidad de que dos nodos conectados directamente a un tercer nodo, estén conectados entre si.  Por ejemplo, en una red de amistades, es la probabilidad
de que dos de mis amigos sean ellos mismos amigos uno del otro.


3. La longitud mínima Lij entre dos nodos vi y vj: Es el numero mínimo de “brincos”que se tienen que dar para llegar de un nodo vi de la red a otro nodo vj de la red.

4. La longitud promedio de la red L: Es el promedio de las longitudes mínimas Lij entre todas las posibles parejas de nodos (vi , vj ) de la red.

5. La distribución de tamaños de islas P(s): Es la probabilidad de que una isla este compuesta por s nodos.

6. El tamaño de la isla mas grande, al que denotaremos por S∞.


7. Características de Sistemas Caótico

·    Ciclos de  retroalimentación o  duplicado de periodo
Se repite el período






     ·    Bifurcación
Existen puntos sensibles a partir de los cuales el sistema se va al caos.

·    Sensibilidad a condiciones iniciales
El sistema se comporta  drásticamente diferente con  pequeños cambios en la  configuración inicial.

·    Auto-similitud, Fractales
Estructuras que contienen sub-estructuras parecidas (patrones que se repiten).

·    Turbulencia

·    Irreversibilidad
Existen estados del sistema a los cuales ya no se puede regresar.

·    Sincronización
El comportamiento  individual cambia a colectivo.

·    Entropía y teoría de la información
Medición del desorden, Ignorancia.

·    Atractores
Estados hacia los cuales el  sistema llega a partir de ciertas condiciones iniciales.

8. Ejercicio K-means terminado:



Gráfica:








Gráfica:

lunes, 17 de septiembre de 2012

Segundo Avance del Proyecto


1.- Resumen del proyecto:

Realizaremos un programa en Python capaz de reconocer una mano a través de una webcam conectada a la computadora donde se esta ejecutando el programa, dicha webcam estará en función durante todo el proceso del programa y estará actualizando constantemente la localización del objeto.


Este reconocimiento de la mano realizara la función de un control (semejante a la consola de videojuegos Wii o Kinect Xbox 360)  para una aplicación, que en nuestro caso sera un mini-juego, que tomara como datos de entrada las coordenadas de la localización del la mano, puño u objeto que partiendo los movimientos de coordenadas a la: Derecha, Izquierda, Arriba, Abajo (tomando como referencia el centro de la pantalla) para controlar así nuestro mini-juego.



Este tipo de programa puede ser utilizado en distintas áreas, como por ejemplo en las terapias, para poder estimular al paciente a mover la mano y que su terapia sea mas divertida, o también puede implementarse en el área de los videojuegos como lo realizo Wii y Kinect Xbox 360.

Aquí podemos observar como una nave es controlada por el puño a traves de una webcam, es un claro ejemplo de lo queremos realizar:



Este vendría siendo nuestro objetivo principal a alcanzar en el proyecto, si nos queda tiempo realizaremos que el mini-juego realiza acciones a traves de gestos que realiza la mano, por ejemplo, al levantar ciertos dedos el mini-juego tenga una acción

Aquí otro ejemplo de como el movimiento de la mano hace que se mueva el personaje y ademas realiza acciones segun el movimiento:




2.- Avance con respecto a la planeación:
Para presentar nuestro avances hemos utilizado el software grantt recomendado por la profesora de la clase.

Ha sido muy util este software ya que nos ayudara a organizarnos mejor y llevar un control sobre nuestros avances


A continuación se muestra el avance...













¿Que se ha hecho?

Lo que hemos realizado en relacion al avanze del proyecto vendría siendo mas que todo conoser mas el lenguaje en el que desarrollaremos el programa, ya que al principio tuvimos dudas acerca del lenguaje que utilizaríamos y empezamos a investigar sobre la facilidad de las librerías que nos ofresen cada uno y nos quedamos entre Java y Python, despues de ver tutoriales  y ejemplo de códigos de reconocimientos de objetos tomamos la decisión que nuestro lenguaje seria Python, y apartir de esa decisión nos dedicamos a conocer mas a fondo las herramientas y posibilidades que ofrece Python, para conocer mas que todo lo que podríamos llegar a hacer con ese lenguaje(no decir imposibles) antes de dar la propuesta formal de nuestro proyecto


¿Qué Falta?

Necesitamos comenzar en realizar el código, ya que el tiempo se nos vendrá encima. Para poder realizarlo hemos investigado sobre tutoriales que nos ayuden a mejor nuestro nivel de aprendizaje en el lenguaje python , así como también en buscar librerías que nos serán útiles para la realización de nuestro proyecto. Cada uno de nosotros por nuestra cuenta seguimos con la investigación, ya que cada uno colaboraremos en la realización del código. 

¿ Qué problemas se han presentado y cómo los has resuelto / piensas resolverlos?

Nuestro principal problema fue elegir el lenguaje el cual lo resolvimos investigando cual es el que mas se acomoda a  nuestras necesidades asi mismo cual es que nos ayudara a que nuestro proyecto se realice adecuadamente. Nuestro problema era que no nos decidíamos por usar java o python pero nuestro proyecto se adapta mas en usar el lenguaje python como la única opción de realizarlo.
Otro de los problemas que se ha presentado es aprender sobre el lenguaje ya que la mayoria de los integrantes del equipo no esta familiarizado con python , en algunos casos jamas lo han trabajo, lo cual hemos pensado en resolverlos en aprender el lenguaje por nuestra cuenta, ya sea con tutoriales, libros o algún curso que se pueda tomar.

Aquí unos tutoriales de los que estuvimos viendo:

  • Pagina donde te nos enseñaron tutoriales basicos de varios lenguajes que nos sirvio para escocer y descartar: Tutorial 1
  • En este otro lo estubimos observando al momento de decidirnos por Python: Tutorial 2
  • En este ultimo nos mostro un poco mas sobre reconocimiento ya enfocado a Python: Tutorial 3

3.- Lista Actualizada de Recursos y Herramientas:

Lenguaje:
Inicialmente habíamos pensado trabajar en el lenguaje Java, usando compiladores tales como NetBeans,  o Eclipse JDK. También habíamos planeado utilizar algo de Phyton, y habíamos considerado utilizar la librería OpenCV. Considerando el tipo de programa que desarrollaremos, el cual debe reconocer la mano del usuario e interactuar con ella, hemos decidido utilizar únicamente Python.

¿Por qué no seguir usando Java?
El proyecto que realizaremos, es un poco complejo, y Java es un lenguaje muy explicativo, y hace que los pseudocódigos usados sean difíciles de seguir, por lo tanto el código puede volverse difícil de revisar,  se volvería más largo.

¿Por qué usar Python y no otro lenguaje de programación?
Python es un lenguaje interpretado, es fácil de entender y se pueden desarrollar muchas cosas en él. Python puede manejar estructuras complejas en una forma eficiente y de manera que se hagan mas simples.

                           

            “Hacer las cosas fáciles muy fáciles, y las difíciles medianamente difíciles” - Python

Recursos:
Para reconocimiento, como lo habíamos mencionado en post pasados, usaremos la librería OpenCV, ya que facilita el trabajo y se usa en Python, además según nuestras investigaciones, se puede detectar la piel mediante el uso de Hue Saturation Value (HSV), que define color en términos de sus componentes. A continuación se presenta un video ejemplificando lo que se puede hacer con OpenCV, esto se relaciona a nuestro proyecto, sin embargo no es exactamente igual a lo que haremos. Clic AQUI para ver el video en youtube.


¿HSV…?
El color de piel humana se ha utilizado y ha demostrado ser una función eficaz en
muchas aplicaciones de detección de rostros por ende, se asume que será también una buena técnica para aplicar en nuestro proyecto, ya que a pesar de que no detectaremos rostros sino manos, al igual qe la cara, la mano es piel, y puede ayudar mucho. A pesar de que  diferentes personas tienen diferente color de piel, varios estudios han demostrado que  gran diferencia radica en la intensidad en lugar de en su crominancia.

Algunas Funciones
findContours
Es una librería de OpenCV que se utiliza en combinación con más funciones, precisamente para “Encontrar contornos” en este caso de la mano. Es útil porque debe distinguir que sea una mano y no otra parte del cuerpo la que mueva el juego.

cv2.approxPolyDP
Puede ser usada con la librería anterior para reconocer la mano.

Técnicas inteligentes
Redes neuronales artificiales: Podemos usarlas para que el programa “aprenda” a reconocer la mano, y no solo se guie por el color de la piel, ya que con la mano, será con la que el usuario ejecute la acción que llevará al programa a funcionar.


4.- Bosquejo de la solución:


Módulos mas importantes del proyecto

-Lenguaje Python.
Será un gran cambio respecto a proyectos de años anteriores ya que en otros cursos solíamos usar Lenguaje C, y para la programación orientada a objetos normalmente usamos Java, este cambio es debido a que el lenguaje Python contiene librerías que facilitarán el desarrollo de nuestro proyecto como lo es la librería OpenCV mediante la cual podemos detectar el color de piel mediante Hue Saturation Value. Esto simplificará el trabajo al momento de realizar el proyecto.

-Iniciación de la webcam y funcionamiento durante todo el proceso del programa.
Esto es un punto muy importante ya que sin esto nuestro programa no podría funcionar, es necesario que la webcam esté encendida siempre que el programa esté en ejecución y que funcione correctamente, ya que si no es así, podrían aparecer dificultades al momento de la ejecución del programa. También se tiene que tomar en cuenta si la webcam ya vendrá incluida en la computadora o se pueda traer una aparte, esto es para evitar fallos, es decir si una webcam llegara a fallar, tener otra disponible.

-Reconocimiento de la mano para realizar funciones.
Esto es en sí nuestro objetivo primordial del proyecto, ya que estamos apuntando primero a que nuestro programa reconozca por completo la mano del usuario, y no solo algunas características de ella como lo son el color de piel, para que, una vez que la haya reconocido poder hacer funcionar al programa mediante la mano. Para esto haremos uso de la librería OpenCV antes mencionada que nos será de gran utilidad.

-Coordenadas de localización de los movimientos de la mano ya sean: derecha, izquierda, arriba y abajo.
Esto con el motivo de situar la mano en el plano del programa, que no se pueda perder y que este siempre bien ubicada, para el caso de gestos con la mano, tener en cuenta los diversos movimientos que se pudieran presentar y la dirección de los mismos. Al igual que con las diferentes gesturas que el usuario podría hacer con su mano como lo son: cerrar el puño, abrir la mano completamente, señalar con sus dedos números como el 1, 2, 3, 4 o 5, hacer diferentes señas, etc.

-Implementación del mini-juego.
Es un objetivo secundario, no es necesariamente primordial como para realizarlo aún, tenemos algunas ideas del mismo, pero por el tiempo, quizá no lo podamos llegar a aplicar. Nuestra idea del mini juego sería para proporcionar ayuda a las personas que se encuentran en rehabilitación y así hacer la misma, mas amena y que no sea tan tediosa o aburrida, y que a la vez puedan ir mejorando día a día y recuperandose de cualquiera que haya sido su lesión.

-Control del mini-juego con el movimiento de la mano del usuario.
Este objetivo es más un complemento para nuestro proyecto para así demostrar el funcionamiento del mismo ya aplicado en un juego que nosotros mismos diseñariamos en base a ayudar a las personas que se encuentran en rehabilitación por alguna lesión, como ya habíamos mencionado, esto es aparte ya que nuestro objetivo principal del proyecto es, como ya dijimos, el reconocimiento total de la mano del usuario.







lunes, 10 de septiembre de 2012


Swarm Intelligence



¿Que es swarm intelligence?
La inteligencia de enjambre (Swarm Intelligence) es una técnica de inteligencia artificial que involucra el estudio del comportamiento colectivo en sistemas descentralizados y auto-organizados, el cual surge de las interacciones entre los individuos de una determinada población.

 ¿Qué significa PSO?
La optimización del enjambre de la partícula (PSO) es un algoritmo de optimización global para hacer frente a problemas en los que la mejor solución puede ser representa como un punto o la superficie en un espacio n-dimensional. Las hipótesis se trazan en este espacio y sembradas con velocidad inicial, así como un canal de comunicación entre las partículas (Parsopulos 2002).Las partículas se mueven a través del espacio de soluciones, y se evalúan de acuerdo a algún criterio de conveniencia después de cada paso de tiempo. Con el tiempo las partículas son aceleradas hacia aquellas partículas dentro de su grupo de comunicación que tienen mejores valores de fines. La principal ventaja de este enfoque en otras estrategias de minimización mundial tales como el recocido simulado es que el gran número de miembros que componen el enjambre de partículas que la técnica impresionantemente resistente al problema de los mínimos locales (Clerc 2006)

¿Cuales son las características de una partícula?
En una población (enjambre) las partículas (insectos) actúan de agentes de búsqueda, se mueven en el espacio de soluciones guiadas por los miembros del enjambre que han obtenido las mejores posiciones. El numero de partículas esta entre 20 y 40. Cada partícula i se comunica con un entorno N(i) Este entorno puede ser parte o todo el enjambre, y puede variar dinámicamente. La estructura de los entornos puede tener una topología anular en la que cada partícula se relaciona con dos, una topología en forma de estrella en la que cada partícula se relaciona con todas. 

¿Cuáles son los dos valores que influyen en la posición de la partícula?
La velocidad y su posición inicial 


¿Qué parámetros involucra el algoritmo de PSO?
Número de partículas, dimensiones de las partículas, rango de las partículas, factores de aprendizaje, condición de terminación, inercia

¿Qué tipos de problemas pueden resolverse con PSO?
Se introduce para evitar que la corriente x queden atrapados en mínimos locales. Estudio preliminar sobre el problema n-reinas muestra que el PSO modificado es prometedor para resolver los problemas de satisfacción de restricciones.


¿Qué significa ACO?
(Ant colony optimization)  Optimización mediante Colonias de Hormigas 

¿Qué metáfora es la que se sigue en la ACO?
La metáfora natural de una colonia de hormigas ha sido utilizada para definir un Sistema de Hormigas (Ant System), una familia de algoritmos distribuidos para optimización combinatoria. Simples agentes computacionales, llamados hormigas, intercambian información para encontrar buenas soluciones, en este trabajo, para el conocido paradigma del Cajero Viajante (TSP - Traveler Salesman Problem).

¿Qué papel juega la feromona en la ACO?
Al moverse, una hormiga real deposita una substancia denominada feromona, marcando el camino que fue recorrido. Inspirado en esta metáfora, Ant System utiliza una matriz de feromonas para establecer comunicación indirecta entre las diversas hormigas, facilitando la búsqueda de buenas soluciones.El presente trabajo propone ofrecer a las hormigas un conocimiento previo de las características del problema, escalando la matriz de feromonas a partir de la matriz de distancias para el algoritmo conocido como Ant Quantity y disminuir considerablemente los tiempos de ejecución al paralelizar el algoritmo Ant Cycle, en un ambiente típicamente asíncrono.

¿Qué tipo de problemas pueden resolverse con ACO?
Problemas de optimización combinatoria, es decir; encontrar un objeto matemático finito (por ejemplo, un vector de bits o permutación) que maximice o minimice una función especificada por el usuario.