viernes, 23 de noviembre de 2012

PUNTOS EXTRA


Sistemas multiagentes


¿Qué es un agente?
Un agente inteligente percibe su entorno por medio de sensores y actúa racionalmente sobre ese entorno por medio de actuadores.

¿ Cómo se programa un agente?
Existen diferentes plataformas  que son muy utllizadas como JACK, JADE, JAFMAS, MADKit y ZEUS.

¿Cuáles son las funciones básicas de la tecnología de agentes?

                    Ejecución de Tareas: La capacidad de realizar tareas son las destrezas que el agente posee para lograr sus objetivos.
                    Conocimiento de su entorno: El conocimiento del entorno debe de ser introducido o construido por el desarrollador. Algunos agentes además adquieren su conocimiento por aprendizaje.
                    Capacidad de Comunicación: Se distingue dos tipos de comunicación, la interacción con el usuario, y la que se refiere a comunicación inter-agente.




¿Cómo se contruye un agente?






¿Cuál es la plataforma más utilizada en la actualidad?
 JADE

¿ QUE ES JADE?
Java Agent Development Framework
Programar un agente JADE consiste en:
                     Definir una clase Java que representa al agente.
                     Implementar los comportamientos que va a manisfestar.

¿ Características de JADE?

                     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.


Ejemplo Sencillo

El esqueleto de la creación de un agente es bastante simple. El siguiente código muestra un ejemplo de creación de un agente que lo único que hace es visualizar el texto "El agente se ha iniciado.".


Referencias




Un Vídeo  de interés:


http://www.youtube.com/watch?v=j1emME7wmg0&feature=related






PUNTOS EXTRA REDES NEURONALES


UN POCO DE INFORMACIÓN

REDES NEURONALES

¿Qué es una red neuronal?

Son modelos bastante simplificados de las redes de neuronas que forman el cerebro. Y, al igual que este, intentan "aprender" a partir de los datos que se le suministran.

¿Aplicaciones de las redes neuronales?


Algunas de las aplicaciones más destacadas son:
                      Reconocimiento de patrones de clasificación:
                      Reconocimiento de voz, de caracteres manuscritos,...
                      Análisis y reconocimiento de imágenes, formas,...
                      Diagnostico clínico.
                      ...
                      Análisis de series temporales y predicción:
                      Modelos meteorológicos.
                      Predicción del comportamiento.
                      Predicción de series temporales.

                      Robótica

¿Cómo se implementa en aplicaciones?

A la hora de implementar una red neuronal como parte de un programa o sistema informático, se pueden distinguir 3 fases básicas:
                      Diseño: en esta fase se elige el tipo de red neuronal a usar (la arquitectura o topología), el número de neuronas que la compondrán.
                      Entrenamiento: en esta fase se le presentan a la red neuronal una serie de datos de entrada y datos de salida (resultados), para que a partir de ellos pueda aprender.
                      Uso: se le suministran las entradas pertinentes a la red, y esta genera las salidas en función de lo que ha aprendido en la fase de entrenamiento.

¿Tipos de aprendizajes básicos?
Generalmente los datos que se usan para entrenar la red se le suministran de manera aleatoria y secuencial.

Los tipos de aprendizaje pueden dividirse básicamente en tres, atendiendo a como esta guiado este aprendizaje:
                      Aprendizaje supervisado: se introducen unos valores de entrada a la red, y los valores de salida generados por esta se comparan con los valores de salida correctos. Si hay diferencias, se ajusta la red en consecuencia.
                      Aprendizaje de refuerzo: se introducen valores de entrada, y lo único que se le indica a la red si las salidas que ha generado son correctas o incorrectas.
Aprendizaje no supervisado: no existe ningún tipo de guía. De esta manera lo único que puede hacer la red es reconocer patrones en los datos de entrada y crear categorías a partir de estos patrones. Así cuando se le entre algún dato, después del entrenamiento, la red será capaz de clasificarlo e indicará en que categoría lo ha clasificado.


¿Cómo funcionan las redes neuronales?
Las redes neuronales están formadas por un conjunto de neuronas artificiales interconectadas.

Las neuronas de la red se encuentran distribuidas en diferentes capas de neuronas, de manera que las neuronas de una capa están conectadas con las neuronas de la capa siguiente, a las que pueden enviar información.




Ejemplo de un Perceptron Simple

código:






lunes, 5 de noviembre de 2012

Reporte 1

Replicar el programa del ventilador 


Instrucciones:

Replica el programa del ventilador. Muestra corridas donde se vea el auto-ajuste. Muestra los fragmentos más importantes de código y explícalos.

Aquí tenemos que hacer la replica de un programa que la maestra nos enseño en la clase, nosotros solo pudimos apreciar la GUI pero no sabemos como fue programado.

el ventilador iba ajustando sus parámetros según la temperatura que iba teniendo el medio ambiente.

nosotros usamos los siguientes colores:


  • Celeste.- Para cuando el abanico esta Helado.
  • Azul.- Para cuando el abanico arroja aire frío.
  • Gris.- Para cuando el abanico arrojara aire del medio ambiente.
  • Negro.- Para cuando esta apagado

Como esta formado la GUI:

En el titulo se mostrara la temperatura que tiene el medio ambiente, por otra parte el cuadro azul es el aire que esta arrojando en este momento el abanico y el botón es para que empiece a variar la temperatura.


Explicación del código:

Las partes mas importantes del código se mostraran a en esta parte y aun que son pocas son importantes para la realización del programa.

Una de las partes importantes fue este método ya que en este es donde sabrá que color pondrá el ventilador además claro esta que también nos muestra la temperatura como titulo de nuestra ventana.


public void temperatura(int x){
  if (x<=15){//Ventilador apagado

   panel.setBackground(new java.awt.Color (0,0,0));

   this.setTitle(""+x);

  }

  if(x<=25 && x>=21){//helado

   panel.setBackground(new java.awt.Color (32,137,159));

   this.setTitle(""+x);

  }

  if(x<=30 && x>=26){//frio

   panel.setBackground(new java.awt.Color(50,185,214));

   this.setTitle(""+x);

  }

  if(x<=20 && x>=16){//normal

   panel.setBackground(new java.awt.Color(159,159,159));

   this.setTitle(""+x);

  }
 }

Y la otra que nos genera la temperatura, aquí usamos un timer en lugar de usar hilos pero igual nos da el mismo resultado cada cierto tiempo va a estar generando números random donde nuestro programa podra decidir que soplara nuestro abanico.




public void el_timer(){

Timer timer = new Timer (850, new ActionListener ()
{

   public void actionPerformed(ActionEvent e)
   {
    int x=(int)(Math.random()*30+1);
    temperatura(x);
   
   }
 
});


timer.start();

}







Vídeo:

http://www.youtube.com/watch?v=W097ky_Hkpk&feature=youtu.be

lunes, 29 de octubre de 2012

Entrada 3

Resumen del proyecto:
 
La propuestas sigue siendo parecidas a las que ya se había comentado anteriormente, los unicos cambios que fuerón realizados respecto a la idea fue que en lugar de clasificar en las categorias de triste y alegre ya que el tiempo se nos viene juntando, se optó por categorizar por el tipo de ritmo que tiene la musica es decir lento, rapido, etc.


Avance con respecto a la planeación:

Con forme se fue pleando el proyecto el equipo iba bien al principio nos juntamos para ver como se  avanzaria y el rumbo que tomaría cada miembro del equipo respecto al desarrollo del software.

Debido a las discuciones de la nueva forma de clasificar, se decidio continuar con lo mismo ya que no fue mucho el cambio en la idea todo sigue siendo orientado a lo mismo.

¿Que se hizo y que fallo?

Se tratarón de instalar las librerias que ya se habían investigado, pero hubo fallos ya que no se encontraban o al momento de descargarlas marcaba algún error, por lo tanto mientras se trataba de arreglar y/o buscar otras alternativas se decidío comenzar con una base .

Esta base sería k-means la forma en la que se piensa hacer la clasificación de la musica por agrupamiento, así que comenzamos a hacer en cierta forma lo que comenzará a hacer los k-means.


En cuanto a las herramientas que aun no hemos podido instalar lo pensamos resolver en estos días para poder continuar con el proyecto y poderlo finalizar de forma correcta.

Otro problema que optuvo durante el transcurso del proyecto, fue que no se sabía por donde comenzar  los k-means asi que para poder resolver este  obstáculo el equipo comenzo a leer articulos relacionados con k-means y también se vierón algunos ejemplos de como se podían utilizar.





Codigo:

un poco del programa de 'k-means' que realizamos se muestra acontinuación
algunas de las partes más importantes de la realización del codigo.



la forma en la que calculamos la posición es con este método:



def Calcular_posicion (datos, posicion,cluster):
    NValor=obtener_cluster(datos,cluster)
    for n, position in posicion.items():
        if not NValor.has_key(n):
            posicion[n]=0
        else:
            posicion=[n]=Kmeans_avg(NValor[n])
    return posicion


también otra parte importante del codigo que se ha realizado es designar la posición que son con unas formulas:

def designarp(datos,n):
    peq=min(datos)
    gran=max(datos)
    num=ceil((abs(gran - peq)*1.0)/n)
    posicion=OrderedDict()
    while k>0:
        k-=1
        posicion[n]=peq+num*n
    return posicion









miércoles, 19 de septiembre de 2012

Entrada 2


Proyecto:

El proyecto en unas cuantas palabras podríamos decir que es un clasificador de música que los separa en tres categorías Alegría, Tristeza y Enamorado.
En este proyecto se pretende buscar la mejor librería que pueda ayudarnos a convertir la música en algún tipo de onda o datos con los que podamos trabajar.

Algunos cambios que se hizo en el proyecto es la sección de enamorado pues anteriormente se tenía ‘Triste’ Esta clasificación sería más difícil ya que dependiendo del gusto de una persona sería la ubicación de esta canción. En cambio en enamorado podría encontrarse otro tipos de diferentes de canciones por decir ‘Románticas’.

¿Que se ha hecho?

Hemos estado trabajando tratando de buscar otras librerías para poder trabajar mejor con el proyecto.
La verdad es que estando en buscas de estas librerías de python es tardado tenemos que leer que hace cada una y más que eso tenemos que ver cual nos ayuda mas.
La que más se acerco a nuestras necesidades fue  wave.py, esta librería lee los tipos de archivo wav.
Hemos estado tratando de instalar esta librería.

¿Que falta?

Falta instalarla en la computadora de algunos compañeros pero todo eso está bien.
También nos gustaría jugar un poco con la librería, para entender mejor como funciona.

¿Qué problemas se presentaron como piensan resolverlos?
Los inconvenientes que hemos tenido es al momento de la instalación de la librería estamos batallando un poco pero no es nada de otro mundo, creemos que podemos resolverlo viendo bien cómo hacerlo.

Lista de recursos:

Creemos que los módulos mas importantes de nuestro proyecto son:
La forma en la que clasificaremos la canción, se pretende que busquemos una similitud de patrones para poder clasificar la música según su categoría.

Estuvimos esperando hasta que la doctora dio la clase de agrupamiento ya que este tema estábamos seguros que nos podría ayudar en la realización de este proyecto.
Se piensa usar un poco de agrupamiento así podemos comparar nuestras canciones y la similitud que más se acerque a la clasificación se agrupara. 

pero el reto sera trabajar con el audio.




miércoles, 29 de agosto de 2012

Entrada 1

En esta entrada se hablará del proyecto que se realizará a lo largo del semestre.

Nuestra propuesta es crear un programa que pueda clasificar música en 3 categorías diferentes felices, tristes  y aburridas.

Este programa se adaptaría según la canción que se vaya a clasificar .










Las herramientas que se usaran son python, ya que en este lenguaje se tiene más librerías que nos podrían ayudar un poco más, y por el momento como librería pensamos en el audioop, ésta es la que más se acerca a lo que se tiene pensado hacer sin embargo seguiremos buscando la  librería óptima. 

El Horario que llevaros para la realización del proyecto es el siguiente:


Los puestos a cargo de nuestro equipo son:

Carlos Santiago Serrano Ramirez 1465105.- Desarrollador
Cesar Israel Ibañez Garcia .- Analista 
Jorge Martinez.- Desarrollador
Patricia Cárdenas.- Encargada del proyecto