jueves, 21 de noviembre de 2013

ROBOCUP 2da PARTE


ROBOCUP


En la presentación del otro equipo se tomaron los temas de descarga e instalación de la plataforma de Robocup, y lo siguiente es el resumen de lo que se debe hacer para descargar la plataforma de simulación en 2D de Robocup. Primero se debe descargar un servidor(http://sourceforge.net/projects/sserver) y un cliente(http://sourceforge.net/projects/sserver /files/rcssmonitor).
 Los requerimientos necesarios para poder instalar la plataforma serian que el sistema operativo en el que se planea instalar la plataforma tenga soporte para sockets UDP. En el servidor existen varios archivos que son de mucha importancia para el correcto funcionamiento de la plataforma estos archivos tienen diferentes funciones y algunos serán explicados en breve, el archivo Makefile tiene las reglas de compilación que deben seguir los proyectos de los proyectos, configure genera las pautas necesarias para que el sistema pueda compilar con make, README tiene las instrucciones, ChangeLog cambia de versiones.Para instalar la plataforma en Ubuntu se necesita tener instalado un compilador para la plataforma, las librerías  y analizadores léxicos.Los pasos a seguir serian, primero descargar las herramientas ya mencionadas, compilarlo, y por ultimo correr el servidor antes que el cliente de otra forma no funcionaria y después el cliente ya puede iniciar de forma normal, ademas que al tener ambos instalados se tiene la opción rcsoccersim.

En conclusión, pudimos observar que existen varias formas de visualizar el  programa de RoboCup,desde códigos que ya están generados en linux y también en windows.


martes, 19 de noviembre de 2013

Arte fractal - Mandelbrot

Continuación podrán ver la presentación de la segunda parte de Arte Fractal.

jueves, 7 de noviembre de 2013

RESUMEN ROBO CUP



ROBOCUP RESUMEN

Robo cup es un proyecto enfocado a la educación que, a través de robots que funcionan de manera autónoma  permite incrementar y fomentar áreas de investigación como la inteligencia artificial entre otras. El objetivo y la meta de este proyecto es principalmente lograr que un equipo artificial de jugadores compitan con reglas estándares y consigan la victoria contra el equipo ganador de la copa mundial en el deporte de fútbol para el año 2050.

El proyecto robo cup cuenta con diferentes categorías:
  • Robo Cup Fútbol: Es una competencia del clásico fútbol entre robots.
  • Robo Cup Rescate: Su principal objetivo es brindar ayuda  en situaciones de emergencia donde sea arriesgado o inaccesible para el ser humano.
  • Robo Cup Home: Robots autónomos que realizan tareas cotidianas.
  • Robo Cup Junior: Tiene como principal objetivo la educación para estudiantes,  con el fin de crear interés en ellos sobre el área de la robótica.

Antes de implementar en algún robot físico generalmente se hacen simulaciones, existe por ejemplo la simulación de la liga de Fútbol en dos dimensiones que además de funcionar como simulación es un buen prototipo para después pasar a su implementación si se desea.



lunes, 28 de octubre de 2013

PRÁCTICA 2 K-MEANS



INTRODUCCIÓN

Cuando hablamos de agrupamiento nos referimos al  procedimiento para concentrar ciertos vectores dependiendo de las características de cada uno, de tal forma que queden agrupados por criterios de cercanía.
Por lo tanto los elementos de los grupos que se generarían a partir del proceso de agrupamiento compartirían características entre ellos.
Por mencionar un ejemplo de este procedimiento, hablaremos del método K-means que consiste en fraccionar  un grupo para formar colecciones de elementos   en base a sus características, de tal forma que con base a los criterios de agrupamiento queden más cercanos a la media  (centroides).
Para explicar el método de K-means lo haremos a partir del tema de Deportes con sus algunas características que lo definen; género, clasificación,  artístico, equipo, categoría.


A continuación se dará información más detallada sobre el tema de K-means dentro del Marco Teórico para tener una idea más clara sobre este método, para después mostrar un ejemplo de este mismo método implementado en la sección de Desarrollo y finalmente se mostrarán las conclusiones sobre esta práctica. 



MARCO TEÓRICO

Cuando hablamos de agrupamiento nos referimos al  procedimiento para concentrar ciertos vectores dependiendo de las características de cada uno, de tal forma que queden agrupados por criterios de cercanía.
Por lo tanto los elementos de los grupos que se generarían a partir del proceso de agrupamiento compartirían características entre ellos.

Existen diferentes tipos de agrupamiento según las características de sus elementos, entre ellos se encuentran el disjunto, traslape, traslape jerárquico  y difuso. El primero consiste en que los conjuntos no tengan ninguna propiedad en común.
El tipo de traslape consiste en tener ciertas características en sus componentes.
Mientras que el jerárquico se inicia con un solo grupo que incluye todas las características y dentro de él se hacen divisiones para generar nuevos,  y finalmente el difuso consiste en que un patrón puede tener niveles de pertenencia a los distintos subgrupos

Un vector, en programación es también conocida como arreglo o matriz unidimensional, como ya sabemos aquí se almacenan datos, elementos o características en cada casilla, que entre en un criterio de agrupamiento.

Como ya se ha mencionado antes, K-means o K-medias consiste en fraccionar  un grupo para formar colecciones de elementos   en base a sus características, de tal forma que con base a los criterios de agrupamiento queden más cercanos a la media  (centroides).

Para dejar este método de una forma más clara se realizó el siguiente diagrama.



DESARROLLO


Se agruparán Deportes de acuerdo a 5 criterios:

  • Género: Si se juegan de forma varonil, femenil o mixto.
  • Categoría: Si se agrupan por edad o por peso.
  • Equipo: Si el deporte se practica individualmente o mayor de una persona
  • Artístico: Si el deporte es artístico o no.
  • Clasificación: Si el deporte se práctica de forma terrestre o acuático.


DEPORTE
GÉNERO
CATEGORÍA
EQUIPO
ARTÍSTICO
CLASIFICACIÓN
FÚTBOL
1 GÉNERO
EDAD
COLECTIVO
NO
TERRESTRE
JUDO
1 GÉNERO
PESO
INDIVIDUAL
NO
TERRESTRE
GIMNASIA
1 GÉNERO
EDAD
INDIVIDUAL
TERRESTRE
NADO SINCRONIZADO
1 GÉNERO
EDAD
COLECTIVO
ACUÁTICO
PATINAJE SOBRE HIELO
AMBOS
EDAD
COLECTIVO
TERRESTRE

Se han pasado los datos anteriores de forma binaria para su manejo en el programa que se mostrará más adelante.

DEPORTE
GÉNERO
CATEGORÍA
EQUIPO
ARTÍSTICO
CLASIFICACIÓN
FÚTBOL
1
0
0
0
0
JUDO
1
1
1
0
0
GIMNASIA
1
0
1
1
0
NADO SINCRONIZADO
1
0
0
1
1
PATINAJE SOBRE HIELO
0
0
0
1
0


Algoritmo k-means


Generación de centroides

//generar centroides
    for(i=0;i<2;i++)
    {
         for(j=0;j<5;j++)
         {
              Centroides[i][j]=(0+rand()%(2-0));
         }     
    }

Cálculo de similitud entre vectores
for(d=0;d<=4;d++)//for de cada deporte
{
     for(i=0;i<=1;i++)//for para c/deporte con c/centroide
     {
          Aux[i][0]=sqrt((pow((double(Deportes[d][0])-Centroides[i][0]),2.0))+(pow((double(Deportes[d][1])-Centroides[i][1]),2.0))+(pow((double(Deportes[d][2])-Centroides[i][2]),2.0))+(pow((double(Deportes[d][3])-Centroides[i][3]),2.0))+(pow((double(Deportes[d][4])-Centroides[i][4]),2.0)));                 
     }
} 


Asignación de Grupos
if(Aux[0][0]<Aux[1][0])//Acomodarlos
{
     Agrupado[C1][0]=d;
     C1++;
}else
{
     Agrupado[C2][1]=d;
     C2++;
}


Actualización de centroides
//Calcular nuevos centroides
Aux[0][1]=C1;Aux[1][1]=C2;
         
for(i=0;i<2;i++)
{
     for(j=0;j<5;j++)
     {
          suma=0;
          for(c=0;c<Aux[i][1];c++)//promedios de cada grupo
          {
               suma=suma+Deportes[(Agrupado[c][i])][j];
          }
          Centroides[i][j]=(suma/Aux[i][1]);                  
     }
}    
Código Completo
https://www.dropbox.com/s/mhwl9evdpvltua7/Agrupamiento.cpp


Parámetros



El valor de k utilizada fue de 2, osea que generamos 2 grupos 



Nuestro criterio de terminación fueron un número de iteraciones, hicimos 4 iteraciones.





Ejecutamos varias veces el algoritmo aunque la verdad en las iteraciones no había cambio en los grupos si acaso solo una ves la primera iteracion salio diferente a las demás a partir de la segunda ya no hubo ningún cambio, la razón debe de ser porque utilizamos solo datos binarios



Resultados

Ejecución del código.






donde:
0 = Futbol
1 = Judo
2 = Gimnasia
3 = Nado sincronizado

4 = Patinaje sobre hielo



Mejores grupos encontrados:


Después de realizar varias corridas del código pensamos que el mejor grupo encontrado es el siguiente:


En el grupo 1 el programa agrupó a Fútbol y Judo y en el grupo 2 agrupo a Gimnasia, Nado sincronizado y Patinaje sobre hielo.

Lo que tienen en común los deportes del grupo 1 es que no son considerados artísticos y en el grupo 2 tienen en común que si son considerados deportes artísticos.
Es por eso que al grupo 1 lo llamaríamos "Deportes No artísticos"

y al grupo 2 "Deportes Artísticos".


Otros grupos que encontramos

Agrupados por "Categoría".
Agrupados por "Clasificación".
Agrupados por "Tipo de Equipo".


Todos estos grupos nos parecen adecuados pues si tienen coherencia para nosotras, aunque un resultado inesperado que tuvimos fue el siguiente:


Grupo 1: Judo, Gimnasia, Nado sincronizado.
Grupo 2: Fútbol y Patinaje sobre Hielo.
Es extraño porque Fútbol  y Patinaje difieren en las categorías "Género" y "Artístico", podría decirse que son muy diferentes.



La razón debe de ser porque al generar los centroides por primera vez estos fueron las cantidades que se generaron aleatoria mente:

El centroide 1 tenía puros 1's y el centroide 2 puros 0's.


CONCLUSIÓN

En conclusión de K- Means…

Después de realizar la práctica 1 de ACO, todo parecía más fácil.
Esta práctica en particular nos fue más sencilla, los conceptos de igual manera fueron sencillos y se comprendieron a la perfección por lo que llevarlo a la codificación no fue un problema.


La mayoría de los resultados fueron los esperados ya que se agrupaban los deportes y tenían una coherencia por lo que concluimos que el programa cumplía con su objetivo de agrupar los elementos según los criterios de cercanía.