lunes, 26 de noviembre de 2012

Indice

Integrantes del Equipo:

1381097 Yessica Alely Castañeda Torres
1423807 Virgilio Ángel de la Garza Quijano
1441938 Alfonso Manuel Aguilar Leyva
1447717 Ricardo Joan Garza Reyna

Reportes:

Proyecto:
  1. Ajedrez
  2. Avance de proyecto
  3. Tercer Avance
  4. Entrega Final (Demo)

Cosas para puntos extras:

Repasos:
  • Swarm Intelligence (Se envió por correo electrónico)
  • Examen de Medio Curso (Se envió por correo electrónico)
  • Examen Ordinario

domingo, 25 de noviembre de 2012

Respuestas visuales, auditivos y táctiles

En esta tarea se busca combinar el software con hardware, por ejemplo el control de play station que produce vibraciones al momento de recibir daño.


Subí dos distintos programas en esta entrada uno con el que puedes encender leds y un motor vibrador con un menú (con botones) en python con tkinter y el segundo es el programa del puddi que encienda un led al rebotar en la ventana.



Control remoto

Herramientas:
  • Arduino (usaremos a Leonardo)
  • Led (en este ejemplo son 4)
  • Motor (extra para el ejemplo)
  • Protoboard y cables

Software:
  • Python 2.7
  • Tkinter
  • python-serial
  • sketch (programar el arduino)
Se programa una interfaz con Tkinter en Python: http://pastebin.com/zjhNUy4e






Y para encender los leds sera con puros if: http://pastebin.com/bUxfj84j




Como debe quedar armado el proto:




Pines utilizados:
  • 4 Led
  • 5 Led
  • 6 Led
  • 7 Led
  • 12 Motor
  • GND (tierra)

Ahora con el programa del Puddi

Bueno en este programa lo que ocurre es que cada que rebota el puddi encenderá un led, cada led representa una pared.

Materiales.
  • Arduino Leonardo
  • 4 leds
  • Motor vibrador
  • Protoboard
A diferencia del código anterior aquí tenemos que importar la librería serial que es la que permite contactar al arduino.

Cada que toque una pared encenderá un led.

Código del puddi: http://pastebin.com/kai7W323

Codigo del arduino: http://pastebin.com/gfZRLfNP


Fotos del protoboard armado.




Video: http://youtu.be/HXNgoVcUHXQ




En mi experiencia personal esta tarea me gusto mucho el poder mezclar software con hardware y si me da oportunidad para el miércoles a medio día podría conseguir un censor de temperatura y combinarlo con el reporte 1 (El Ventilador).


Saludos.

Interacción entre objetos artificiales

Bueno esta fue una de las tareas que me encargaron en la materia de Temas Selectos de IA, la idea del programa era hacer que un objeto interactuara con el entorno, el programa que hice rebota con los limites de la ventana

Aquí pongo una foto del programa corriendo el puddi es el objeto que rebota.


La interfaz fue hecha con ayuda de pygame.

En si el programa con un if obtiene las coordenadas de la ventana, al momento de llegar al borde invierte la dirección por el sentido contrario.

Aquí esta el código hecho en Python. link






Saludos



miércoles, 21 de noviembre de 2012

Reporte 4. Investigacion JADE, SPACE, Madkit y RobotCup


JADE (Java Agente de Desarrollo Framework)

Es un marco de software aplicado plenamente en el lenguaje Java. Simplifica la implementación de sistemas multi-agente a través de un middleware que cumple con las especificaciones FIPA ya través de un conjunto de herramientas gráficas que soportan la depuración y fases de despliegue.

La plataforma de agentes pueden ser distribuidos a través de máquinas (que ni siquiera necesitan compartir el mismo sistema operativo) y la configuración se puede controlar a través de una interfaz gráfica de usuario remoto . La configuración se puede cambiar incluso en tiempo de ejecución moviendo agentes de una máquina a otra, como y cuando sea necesario. 

JADE está completamente implementada en lenguaje Java y la exigencia mínima del sistema es la versión 1.4 de Java (el entorno de tiempo de ejecución o el JDK).
La sinergia entre la plataforma JADE y las bibliotecas LEAP permite obtener una plataforma de agentes FIPA compatible con dimensiones reducidas y compatibilidad con entornos Java móviles hasta J2ME CLDC MIDP 1.0. Las bibliotecas LEAP se han desarrollado con la colaboración del proyecto LEAP y se puede descargar como un add-on de JADE de este mismo sitio Web.



MadKit

Es una plataforma para la implementación de Sistemas Multi-Agentes. Esta basada sobre el modelo AGR de Ferber y Gutknecht. AGR en un modelo organizacional basado sobre los principios de Agente, Grupo y Rol.

Estructura General de la Plataforma:

El componente principal es el Kernel (o micro-kernel). El kernel provee soporte para:

  • Control de grupos y roles locales
  • Manejo del ciclo de vida de los Agentes
  • Despacho de Mensajes locales
Madkit es una plataforma para implementa modelos Organizacionales. Y por ello el medio de contacto de los agentes son los roles que juegan en los grupos a los que pertenecen.
La comunicación en madkit se hace atreves de mensajes. La clase de base para todos los mensajes en Madkit es la clase Message. Esta clase contiene únicamente el emisor, el receptor y el momento de creación del mensaje. Estos valores son accesible con los metodos getSender(), getReceiver() y getCreationDate(), respectivamente.
Los diferentes tipos de mensajes existentes en Madkit heritan de esta clase.
Las clases de mesajes más utilizadas en madkit son:

  • STRINGMESSAGE: permite enviar como contenido del mesaje una cadena de caracteres (String de java).
  • OBJECTMESSAGE: permite encapsular un objeto serializable.
  • XMLMESSAGE: el contenido es un documento XML
Para implementar un nuevo tipo de mensaje, solo debe heritar de la clase MESSAGE.

SPADE (Del inglés "Smart Python multi-Agent Development Environment")

Es una plataforma libre de sistemas multi-agentedesarrollada 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.
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) ySIMBA.
  • Publicación y subscripción de eventos mediante el estándar PubSub.
  • Interfaz gráfica basada en web.

SPADE es una plataforma de agentes interoperable y multiplataforma, dado que el protocolo de comunicación está basado en XML y el lenguaje de implementación es Python. Del mismo modo la interfaz gráfica está basada en HTTP, siendo accesible desde multitud de dispositivos. Las características de la interfaz son las siguientes:
  • La plataforma y los agentes exportan su propia interfaz web.
  • La interfaz es configurable a través de plantillas.
  • Cada agente exporta su identificador como un código QR.
  •  Instrospector de agente.
  •  Visor de mensajes enviados.
  •  Búsqueda de agentes y servicios.


Robocup Simulation League

RoboCup es el juego de fútbol, ​​donde los objetivos de la investigación se refieren a los sistemas cooperativos multi-robot y multi-agente en entornos dinámicos contradictorio. Todos los robots en esta liga son totalmente autónomos. Los juegos también sirven como una gran oportunidad para educar y entretener al público en torno a temas de ciencia y tecnología.

Se divide en cuatro subligas :
1.     Fútbol 2D Simulación
2.     Simulación 3D Soccer
3.     3D Desarrollo
4.     Realidad Mixta Simulación Fútbol (antes llamado Visualización)



miércoles, 14 de noviembre de 2012

Reporte 3. Perceptron que reconoce un "and"

Perceptron que reconoce un "AND"

Aquí en este reporte, lo que hicimos fue modificar el codigo del Perceptron presentado en Wikipedia. Este código lo que hacia era poder realizar un binario pero en forma de NAND, lo que nosotros realizamos fue modificarlo a que ejecutara pero ahora en forma AND.

Lo que principalmente hicimos fue cambiar el entreno de la red, a partir de como serian los resultados de las entradas (1,0,0) (1,0,1) (1,1,0) (1,1,1) como sabemos, el AND es una puerta logica, que necesita tener todas las casillas llenas de 1, para poder que esta como salida tenga como resultado 1, si en las casillas anteriores presenta un 0, la salida te da como resultado un 0.

Ejemplo la siguiente tabla:

Aqui lo que hicimos fue modificar la salida de los resultados por que eran diferente(Entreno de la Red), cambiamos el umbral, la tasa de aprendizaje y los pesos iniciales. Como se muestra en el siguiente Codigo:



Despues de correr el codigo anterior, tuvimos los resultados siguientes:



Estos fueron los resultados

Referencias:

http://en.wikipedia.org/wiki/Perceptron

lunes, 5 de noviembre de 2012

domingo, 4 de noviembre de 2012

Reporte 1 Simulación del Ventilador

Herramientas:
Python 2.7
PyGame

¿Que es un algoritmo adaptativo?
Los algoritmos adaptativos son aquellos que modifican su conducta durante su ejecución  atendiendo a los cambios que se producen en su entorno o en el propio programa.

¿Que debemos considerar?
Que parámetros se deben de monitorear, los posibles cambios en nuestro ambiente, las restricciones tengo y que ajustes deben de realizarse.

Realizar una réplica del programa ventilador.

Muestras de el programa funcionando.

Primera captura: muestra la cuarta hora con una temperatura de 22°, los cuales no fueron suficientes para “prender el ventilador” y permanecerá en su estado de espera o "apagado".

Segunda captura: se muestra la quinta hora en la cual el generador aleatorio mostró una temperatura de 21°, como muestra la imagen aun no fue suficiente para que el ventilador se "encendiera", y por lo tanto permanecera en su estado de espera.

Tercera captura: se presenta la condición necesaria para que se efectué el cambio de estado de "apagado" a “encendido” del ventilador ya que el generador marco una temperatura mayor o igual a 24°, el programa permanecerá en este estado siempre y cuando cumpla con la condición de tener una temperatura mayor o igual a 24°.

Cuarta captura: el ventilador regresa a su estado de “apagado” ya que el generador muestra una temperatura menor a 24°, el programa continuara hasta que cumpla su horario (24 horas), o se le indique que pare.

A continuación se muestran los segmentos de código mas importantes de este programa:
 
La imagen anterior muestra la parte del código que se encarga de capturar las temperaturas del medio ambiente, el usuario se encargara de proporcionar los valores de la temperatura máxima, temperatura mínima y la que temperatura a la que se desea encender el ventilador.
Ademas prepara el entorno de la interfaz gráfica, definiendo la fuente de el texto y el fondo de la ventana.



Esta parte se encarga de generar los valores entre cierto rango asignado previamente, por el usuario, siguiendo las diferentes condiciones para que no existan incongruencias con la realidad (si es de noche o es de día)  o con lo que se pide.



En esta parte se muestran las condiciones iniciales para que el programa funcione correctamente y no muestre valores surrealistas. Le da un margen al usuario para tener un ambiente controlado y para que las condiciones de encendido y apagado ocurran como debe de ser.

Codigo: PastebinDropbox

Imagen de fondo: http://conglom-osoft.net/download/lol.png

Video: http://youtu.be/n3xCXAGM-oo

Saludos.

lunes, 29 de octubre de 2012

Tercer Avance

Resumen del proyecto

Como hemos hablado desde la primera entrega, nuestro proyecto es hacer un Juego de Ajedrez, la verdad todo con el proyecto sigue como planeo al principio, tanto así como la matriz de gantt va como esperamos.
Podemos resumir que ahora en esta entrega estamos entrando en lo que es la codificación del juego para poder realizarlo, claro que aun nos faltan algunos puntos que serán marcados.

Avance del proyecto

En cuanto al avance podemos decir que ya tenemos lo que la parte de la lógica del proyecto, lo cual es un gran avance, podemos comentar que aun nos faltan algunas cosas como son la Inteligencia Artificial del proyecto, esta se tiene contemplada realizar en el transcurso de los días del 29- 7 de Noviembre, según el Diagrama de Gantt que mostraremos.

Tenemos también problemas con la Interfaz Gráfica esta tambien tenemos una fecha plasmada en el Diagrama de Gantt la cual es del 7 al 13 de Noviembre, estos días pensamos que estaremos enfocados a lo que la Interfaz Gráfica del proyecto, esperamos sacarlo lo antes posible para que nos quedan más días para terminar el proyecto, aun así pusimos 6 dia en la interfaz, esto para que no esté tan apretado el ciclo y podamos realizarlo con calma.

Cambiamos un poco lo que es el Diagrama de gantt porque le agregamos otras actividades que no teníamos contempladas como son la de Inteligencia Artificial y Interfaz gráfica, las teníamos como programación, pero ahora vemos que serán diferentes y con su margen de tiempo estimado a cada una para poder realizarlas.

Lista de actividades

Esta es la lista de actividades ya actualizada de lo que hemos hecho y lo que aun nos falta por hacer o lo que se esta ejecutando.

Diagrama de Gantt

Ya aquí presentamos el diagrama de Gantt actualizado con las actividades integradas, aquí se pueden ver los tiempos para cada actividad, esperamos poder realizarlo a tiempo, aun la verdad es lo mas seguro que si salga con los tiempos previstos, pues llevamos las actividades a como va el diagrama sin alguna contratiempo hasta ahorita.






¿Qué se ha hecho?
Llevamos un gran avance de la lógica.
¿Qué falta?
Nos falta dos cosas importantes:
  1. La inteligencia Artificial
  2. Interfaz grafica

¿Qué problemas se han presentado y cómo los has resuelto / piensas resolverlos?
Bueno pues aun no sabemos muy bien como vamos a implementar la inteligenacia artificial pero con ayuda de tutoriales y de compañeros esperamos poder aprender a tiempo implementar la inteligencia artifial.
Lista actualizada de recursos y herramientas:
Recursos:
  1. Tópicos selectos de optimizaciónhttp://elisa.dyndns-web.com/~elisa/teaching/opt/heur/
  2. Algoritmos Heurísticos deterministas y Aleatorios en secuenciación de proyectos con recursos limitados www.idescat.cat/sort/questiio/questiiopdf/13.1,2,3.11.alvarez.pdf
  3. Complejidad computacional de problemas y el análisis y diseño de algoritmos http://elisa.dyndns-web.com/~elisa/teaching/aa/pdf/aa.pdf

Herramientas:
  1. Java (lenguaje)
  2. Hashtable (libreria de java)
  3. LinkedList (libreria de java)
  4. Emacs (editor de texto)
  5. WebSVN (Repositorio)


SVN del proyecto http://richi.conglom-osoft.net/websvn/listing.php?repname=juego

jueves, 20 de septiembre de 2012

Avance de proyecto

Resumen del proyecto
Nuestro proyecto principalmente está encaminado a ser un juego de ajedrez, donde su objetivo principal es que puedas jugarlo de una manera en que un jugador sea manipulado por la computadora, y el otro jugador sea manipulado por un Usuario cualquiera. Pretendemos que la propia computadora tomará las decisiones de hacia dónde va a mover alguna de las piezas móviles para poder ganarle al jugador contrario en este caso el usuario. En teoría no hay ningún cambio en cuanto a lo que se va aplicar nuestro proyecto. Este se busca que se le pueda implementar algo de Inteligencia Artificial.

Avance de la planeación y complicaciones.

¿Qué hemos hecho?
Pues principalmente estábamos desdiciendo en que lenguaje de programación  programar nuestro proyecto, llegamos a la conclusión que será programado en el lenguaje de Java. Esto es porque todos los integrantes del equipo ya tenemos conocimientos previos del mismo y algo de experiencia en cuanto a cómo se maneja este.

Entre otras cosas que hemos hecho es estudiar algunas tipos de herramientas en las que nos podremos apoyar para poder implementar nuestro proyecto. También en estos momentos estamos recopilando la información necesaria más que nada para saber cómo tendremos que aplicar los que la Inteligencia Artificial en nuestro proyecto, esto para que nuestra computadora pueda hacer los movimientos correctos a la hora de jugar con este.

¿Que nos falta?
Nos falta investigar algunas tipos de cuestiones, cómo implementar la interfaces que será puesta debajo de las piezas móviles e incluso como hacer que se muevan las piezas. Aunque esto aún nos falta por investigar no creemos que sea de gran complejidad porque pues todos los integrantes han manejado la implementación de imágenes en Java o algo parecido al mismo. Estos tipos de problemas pensamos resolvernos sin mucha dificultad.
En cuanto a la Planeación de tiempos, pues tenemos ya algunos contemplados en nuestro diagrama de Gantt trataremos de aplicarnos a este en todo el semestre sin tener que agregar nada, pero si en caso de hacer alguna otra cosa lo agregaremos y lo comentaremos en la misma entrada, igual pensamos presentarlo siempre porque siempre se estará actualizando atreves de que vallamos avanzando con el proyecto.

1. Las actividades que pensamos llevar a cabo durante el semestre (a excepción que se agregue alguna otra actividad durante el proyecto).

2. Aquí les presentamos la Matriz de Gantt donde se presentan los tiempos de cada actividad.

En esta imagen se muestran las actividades que nos basaremos y en los tiempos que se realizara cada una, si ven algunas ya tienen el estatus de terminado que son unas que ya se realizaron, otras están en ejecutándose que son las que apenas se están realizando pero aun no son terminadas en su totalidad, por ultimo esta l de Sin empezar están son las actividades que aún no empezamos a realizar ya que necesitamos terminar las anteriores para tener los conocimientos previos para poder realizar las siguientes actividades.

Recursos y Herramientas
Otras de las cosas en las que estamos avanzando es en buscar algunos tutoriales, librerías y Frameworks que podremos aplicar para nuestro proyecto, esto para facilitarnos un poco más lo que es la implementación de este.
Algunas de estas herramientas que ya encontramos para poder aplicarlas y guiarnos para nuestro proyecto son las siguientes:

Chesspresso
Descripción:
Para explicar algo de Chesspresso pues en teoría es una biblioteca de Java que se utilizada para ayudar a los desarrolladores a escribir cualquier tipo de programa de ajedrez. Es de código abierto (LGPL) y contiene el estado de los más avanzados algoritmos para implementar conceptos de ajedrez.

¿Cómo funciona un programa de ajedrez?
Descripción:
También encontramos un tutorial en PDF el cual es de la UCN llamado “¿Cómo funciona un programa de Ajedrez?” este nos explica ampliamente como funciona un programa de ajedrez en Java, está muy completo porque este viene explicando cómo poder hacer una programa de ajedrez desde java pero en la plataforma eclipse, no viene explícitamente como hacerlo pero te guía y te algunas ideas de como poder realizarlo y saber que hay que hacer para que este pueda funcionar. Pensamos que sería de gran ayuda más que nada a la hora de programar porque sería como una guía de saber qué hacer y cómo implementarlo.

Pues hasta ahorita estas dos herramientas somos las que hemos encontrando para poder implementar nuestro proyecto. Estamos buscando aún más para poder enriquecernos de conocimientos para la hora de programar.


Bosquejo de solución.
En cuanto al bosquejo de solución ya tenemos ya un diagrama de UML:

Referencias:
Chesspresso  - http://www.chesspresso.org/
Alexander Narváez, ¿CÓMO FUNCIONA UN PROGRAMA DE AJEDREZ? - http://www.ucn.edu.co/virtualmente/estudiantes/ajedrez-virtual/Ajedrez-contenido/C%C3%B3mo%20funciona%20un%20programa%20de%20Ajedrez.pdf

miércoles, 22 de agosto de 2012

Ajedrez


Programación de Sistemas Adaptativos.
Proyecto.
Imagen de
http://www.psicopedagogiaconlucia.com/
actividadesseptiembre/ajedrez/
comosejuegaajedrez_archivos/
tableroconpiezas.GIF

Nombre del proyecto: Juego de Ajedrez.

Introducción:
Para nuestro proyecto pensamos en varios temas que podrían utilizar inteligencia artificial, entre todos llegamos a la conclusión que un juego de ajedrez cumplía con la parte de sistema adaptativo, por lo que conlleva el juego.
Para empezar podríamos decir que el ajedrez es un juego competitivo entre dos personas, cada una de las cuales dispone de 16 piezas móviles que se colocan sobre un tablero dividido en 64 escaques.

¿Que lenguaje de programación utilizaremos para realizar nuestro proyecto?
Para poder realizar dicho proyecto tenemos contemplado programarlo en el lenguaje de programación Java, donde se estará utilizando los temas de IA ( Inteligencia Artificial) y un poco de Redes Neuronales
Actualmente, nos estamos llenando de información para poder realizar dicho proyecto, investigamos lo que son librerías, algunas referencias que no puedan ayudar o algún tipo de framework que pueda haber (Actualmente no lo hemos encontrado). En conclusión estamos abiertos a cualquier tipo de información que nos pueda ayudar a dicho proyecto

¿Cómo cumple como sistema adaptativo?
En el juego de ajedrez ambos adversarios necesitan de una estrategia para evitar la pérdida de piezas así como la partida misma, la parte adaptativa entra en la inteligencia artificial del adversario, quien estará “pensando” lo que es mejor para su causa.
Se juega sobre un tablero cuadriculado de 8×8 casillas, alternadas en colores blanco y negro, que constituyen las 64 posibles posiciones para el desarrollo del juego. Al principio del juego cada jugador tiene dieciséis piezas: un rey, una dama, dos alfiles, dos caballos, dos torres y 8 peones.

¿Como funciona nuestro proyecto?
Para alguna descripción de cómo funciona nuestro proyecto podríamos decir que este será de una manera en que un jugador será la computadora, y el segundo jugador será un usuario. Donde la propia computadora tomará las decisiones de hacia dónde va a mover alguna de las piezas móviles para poder ganarle al jugador contrario en este caso el usuario. Aquí podríamos decir que se estaría aplicando la parte adaptativa de nuestro proyecto, porque la misma computadora será la que hará los movimientos donde ella crea que será la mejor posición en que pondrá alguna de las piezas móviles.

Comunicación entre Equipo.
Para la comunicación  entre equipo, podemos destacar que tenemos un grupos de Facebook, para poder comunicarnos y tener en cuenta las tareas o algún tipo de recordatorio etc. También contamos con los diferentes sistemas de Google Driver’s donde editamos cualquier tipo de entrada al blog antes de subirla, así cada quien puede poder su opinión o editar algo que a él le pareciera interesante.

Roles:
Logica: Ricardo, Virgilio.
Inteligencia: Ricardo, Virgilio.
Interfaz y gráficos: Alely, Alfonzo.
Documentacion: Alely, Alfonzo.

Diagrama de Gantt que utilizaremos para nuestro proyecto: http://goo.gl/2JtGL

Referencias:
22/08/2012        http://es.wikipedia.org/wiki/Ajedrez