domingo, 24 de noviembre de 2013

Prooyecto FInal



SISTEMAS ADAPTATIVOS

Módulos más relevantes
  • Los pasos mas importantes fueron la creación de de la id para cada una de las tablas ya que batallamos en las ultimas dos tablas de los centroides
  • Las partes mas relevantes son que esto puede ayudar a la gente a saber quien puede ganar un torneo de fútbol y hacer mejor sus apuestas o cosas por el estilo.



Herramientas y técnicas

  • Lo hicimos en base a lo visto en clase primero que nada en las primeras dos tablas hay esta fácil, solo teníamos que poner  campos donde el usuario introduzca los datos ya explicados en el programa, Lo mas complicado o no complicado si no extenso fue al calcular los centroides  para comprobar si el programa estaba haciendo lo que nosotros queríamos.
  • Los parámetros de un arreglo json
  • Usamos 3 librerías de js que son:
  1. -kMeans (Este javaScript lo creamos )
  2. -jquey.js (Libreria)
  3. -handlbebars.js(Libreria)
También usamos el bootstrap.js y bootstrap.min

  • Lo que le podemos ayudar a nuestros compañeros, es que es un algoritmo fácil de comprender , y no esta tan difícil de programar ,  puede tener muchas cosas con la que se puede aplicar este algoritmo k-means , Hay una librería que te ayuda con las cordenadas y esta en la librerías que pusimos , solo consta de que le den una buena leída en Internet y a las librerías y son de gran ayuda.






Descripción del proyecto:

Descripción de la ultima versión:

Ya para la ultima versión adaptamos el método de K-Means para un problema aplicable en los deportes como es el futbol.

Contexto:

En el proyecto se muestra lo que es una tabla general, tras haber jugado la jornada 1 "n" equipos y saber el resultado de dicha jornada (quien gano, perdió y empato).

Propósito:

Se creó con el propósito de saber que equipos son mejores y cuales tienen mayor probabilidad de avanzar a las rondas finales para después ser campeón.

Utilidad:
Se creó principalmente para el deporte del futbol pero, en sí, se le puede dar una utilidad en casi cualquier deporte del cual tengan un sistema de competencia parecido solo es de adaptar y modificar los puntos ya que no en todos los deportes se gana la misma cantidad de puntos ni se gana de la misma forma

PANTALLAS DEL PROGRAMA








PANTALLAS  EN EJECUCIÓN








Organización del equipo

  • Mencionar lo que hizo cada integrante.


  1.  -Javier Martinez : Programo los javascript y parte del html
  2. -Francisco Mendez: busco tutoriales de javascript termino la parte del html , ayudo con parte del js
  3. -Francisco García: busco tutoriales , Investigo sobre las bibliotecas que no conocíamos y ayudo en parte del codigo js
  4. -Ivan Gomez: Contribuyo con la interfaz del css , en conseguir un servidor para subirlo y sea mas fácil de usar



  • Problemas técnicos (como los resolvimos)
Hubo varias personas del equipo que no programaron , de echo no los conocemos , y la verdad estuvimos cortos de tiempo.
Eso fue uno de los mayores problemas técnicos ya que varios de los integrantes estamos en la certificación de java no contábamos con suficiente tiempo , ya que si tuviéramos mas tiempo lo complementaríamos con mas cosas.

Otra cosa que varios de mis compañeros no sabían mucho de js y unos sabíamos mas css y otros js , asi que entre todos nos ayudábamos en cosas que no supiera el otro , así logrando terminar nuestro proyecto
  • lecciones aprendidas
Pues a programas en uno que otro lenguaje que no se dominaba muy bien.
En unos le js o el css
Que hay que prepararnos con mas tiempo a la hora de hacer un proyecto

Había otros 2 integrantes pero nunca nos preguntaron nada del proyecto ni participaron , estos 4 son los que hicimos el proyecto 


INTEGRANTES
Francisco David Garcia Bernal-1482065
 Luis Ivan Gomez Garcia-1481249
 Francisco Mendez Juarez-1488241 
Francisco Javier Martinez-1455954



Read more »

miércoles, 13 de noviembre de 2013

PROYECTO (Entrega 2)

PROYECTO 



Pues ya explicado en la entrega 1, el proyecto constara del algoritmo K-means , donde podrás encontrar un punto optimo por asi decirlo de donde puedes poner algún negocio , locales, hospitales , universidades, etc . Todo dependiendo de una cosa que es lo que mas ocupa la gente, por medio de una gráfica que trataremos de hacer y ellos solo le den clic y te arroge los puntos.

¿Que se ha hecho?
Hasta ahorita ya tenemos terminado lo que es el algoritmo k-means.

¿Que falta?
solo nos falta que arroje la gráfica y te arroje el punto optimo impreso en la grafica , osea que le den clic en el mapa por ejemplo y salga el punto 

¿Qué problemas se han presentado y cómo los has resuelto / piensas resolverlos?
Pues el problema que tenemos es que no nos sale bien la gráfica y que nos imprima , solo es eso .
Trataremos de resolverlo tratando de hacerlo con javascript y html 

Lenguajes Utilizados
-Html
-css
-Javascript
-Jquery 
-handlebars.js
-script.js
-bootstrap..css
-bootstrap.js

Diagrama 





INTEGRANTES
Francisco David Garcia Bernal-1482065
 Luis Ivan Gomez Garcia-1481249
 Francisco Mendez Juarez-1488241 
Francisco Javier Martinez-1455954


Read more »

lunes, 14 de octubre de 2013

PROYECTO (Entrega 1)

Avance Del Proyecto

 K-MEANS





El k-means sera el proyecto final de nuestro equipo ya que nos intereso cuando lo vimos en clase.

Tratara supongamos que que quieres poner 2 hospitales pero no sabes en que parte de monterrey poner los hospitales .

En el programa 
(k-means) pondrás las coordenadas de las poblaciones donde escasea los hospitales o hay mas enfermos o accidentes y el programa te dará la opción de donde seria el mejor lugar para poner los dos hospitalesEsto es lo que trataremos de hacer con el k-means

INTEGRANTES
Francisco David Garcia Bernal-1482065
 Luis Ivan Gomez Garcia-1481249
 Francisco Mendez Juarez-1488241 
Francisco Javier Martinez-1455954


Read more »

jueves, 19 de septiembre de 2013

Algoritmos Genéticos


Integrantes
Francisco David Garcia Bernal-1482065
Luis Ivan Gomez Garcia-1481249
Francisco Mendez Juarez-1488241
Francisco Javier Martinez-1455954
Miguel Angel de la Fuente Hererra-1513642


Introducción

       ejemplo del problema de la mochila
    El problema de la mochila fue inventado por richard karp a mitades de los años 70`s, inspirado en el modelo de la evoluciona biológica , fue creado para la utilización del principio de selección natural para resolver problemas de optimizacion "complicados".
El algoritmo de la mochila es mejor conocido abreviado como KP o por sus iniciales en ingles Knapsack problem,
este problema es de optimizacion combinatoria y trata de llenar la mochila con lo mas indispensable pero eso tiene su costo , aparte la mochila solamente tiene un peso limite que no puede ser excedido por los objetos que se echaran a la mochila, cada objeto tiene un peso y un valor , El peso no puede exceder a lo que permite la mochila y tenemos que escoger el que sea mas optimo ya que los objetos tienen un cierto precio (valor) y el de menos valor sin exceder el peso seria la combinación mas optima.
El problema de la mochila lo venimos aplicando durante casi toda la vida, cuando tratamos de interactuar con grupos pequeños, y suele ser importante para poder obtener una optima respuesta sobre un problema que se nos presenten en la vida cotidiana.
Este problema no es difícil ,solo en algunos casos cuando en este problema se presentan muchos datos o es demasiado grande, esto podría tomar tiempo en solucionarlo.

Algoritmo Genético (resumido)

Un algoritmo genético es una serie de pasos organizados que se usan para llegar a un problema en especifico.
Son llamados así porque se inspiran en la evolución biológica y su base genético-molecular. Estos algoritmos hacen evolucionar una población de individuos sometiéndola a acciones aleatorias semejantes a las que actúan en la evolución biológica.en función del cual se decide cuáles son los individuos más adaptados, que sobreviven, y cuáles los menos aptos, que son descartados.

que incluyen también las estrategias evolutivas, la programación evolutiva y la programación genética.









Marco Teórico


El problema de la mochila es un problema NP-Completo y consiste a grandes rasgos en querer llenar una “mochila” con objetos de forma que se maximice el beneficio pero sin sobrepasar el límite de peso que soporta la “mochila”.
Se consideran n tipos de objetos, cada objeto i tiene su valor que se determina por vi y un peso wi. Y el peso máximo que se puede llevar es C.
 Como por ejemplo:
Echar la mayor cantidad de proteínas en una mochila de 110 litros, sin importar el precio, sabor, ni calorías.
Como datos seria:
Proteínas de cada uno de los n productos (Pi)
Volumen de cada uno de los n productos (Vi)
Producto
1
2
3

Proteínas
1000
660
120

Volumen
30
22
10




Algoritmo genético

El algoritmo genético es una técnica de búsqueda basada en la teoría de la evolución de Darwin.
Es un algoritmo matemático altamente paralelo que transforma un conjunto de objetos matemáticos individuales con respecto al tiempo usando operaciones modeladas de acuerdo al principio Darwiniano de reproducción y supervivencia del más apto, y tras haberse presentado de forma natural una serie de operaciones genéticas de entre las que destaca la recombinación sexual. Cada uno de estos objetos matemáticos suele ser una cadena de caracteres (letras o números) de longitud fija que se ajusta al modelo de las cadenas de cromosomas, y se les asocia con una cierta función matemática que refleja su aptitud.
Un investigador de la Universidad de Michigan llamado John Holland era consciente de la importancia de la selección natural, y a fines de los 60s desarrolló una técnica que permitió incorporarla a un programa. Su objetivo era lograr que las computadoras aprendieran por sí mismas.

Pseudocodigo de un AG

Lo que dice básicamente este Pseudocodigo es:
Inicialización: Se genera aleatoria-mente la población inicial, que está constituida por un conjunto de cromosomas los cuales representan las posibles soluciones del problema. En caso de no hacerlo aleatoriamente, es importante garantizar que dentro de la población inicial, se tenga la diversidad estructural de estas soluciones para tener una representación de la mayor parte de la población posible o al menos evitar la convergencia prematura.
Evaluación: A cada uno de los cromosomas de esta población se aplicará la función de aptitud para saber cómo de "buena" es la solución que se está codificando.
Condición de término El AG se deberá detener cuando se alcance la solución óptima, pero ésta generalmente se desconoce, por lo que se deben utilizar otros criterios de detención. Normalmente se usan dos criterios: correr el AG un número máximo de iteraciones (generaciones) o detenerlo cuando no haya cambios en la población. Mientras no se cumpla la condición de término se hace lo siguiente:
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.
Recombinación o Cruzamiento. 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.
Reemplazo. Una vez aplicados los operadores genéticos, se seleccionan los mejores individuos para conformar la población de la generación siguiente.

Operadores Genéticos

Para el paso de una generación a la siguiente se aplican una serie de operadores genéticos. Los más empleados son los operadores de selección, cruce, copia y mutación.

Selección. Los algoritmos de selección serán los encargados de escoger qué individuos van a disponer de oportunidades de reproducirse y cuáles no.

Cruce. Una vez seleccionados los individuos, éstos son recombinados para producir la descendencia que se insertará en la siguiente generación. Tal y como se ha indicado anteriormente el cruce es una estrategia de reproducción sexual.
Copia. La copia es la otra estrategia reproductiva para la obtención de una nueva generación a partir de la anterior. A diferencia del cruce, se trata de una estrategia de reproducción asexual. Consiste simplemente en la copia de un individuo en la nueva generación.


Mutación. La mutación de un individuo provoca que alguno de sus genes, generalmente uno sólo, varíe su valor de forma aleatoria. La probabilidad de mutación es muy baja, generalmente menor al 1%. Esto se debe sobre todo a que los individuos suelen tener un ajuste menor después de mutados. 


Experimentos y resultados

Tabla de valores de los parámetros AG

DESCARGAR :)

Instancia 1

{0 1 1 1 0} ganancia: 75  peso:32


{0 0 0 1 1 1 0 0 1 0}  ganancia:291  peso:145 optimo



Gráficas de resultados

Instancia 1


CÓDIGO


PANTALLAS



Las gráficas las sacamos de excel

Generación 1 (00111)


Generación 2 (01110) OPTIMA


Generación 3 (10110) 


Generación 4 (11011)


Generación 5 (11101)




Instancia 2

CÓDIGO


PANTALLAS



Las gráficas las sacamos de excel


Generación 1 (0001110000)


Generación 2 (0001110001)

 

Generación 3 (0001111000)


Generación 4 (0001101010)


Generación 5 (0001110010) OPTIMA





Conclusiones


Cuando resolvemos un problema como el que se nos presento de la fuerza bruta , 
es algo mas complicado, 
tardado y poco eficiente . y en los algoritmos genéticos, pueden también ser algo lento dependiendo de las iteraciones o generaciones que se presenten en el problema o de la complejidad , pero también son muchos mas rápidos que los de fuerza bruta y seria mas recomendable usar un algoritmo genético

Cuando queremos resolver problemas de fuerza bruta con iteraciones de 10 , 20 o 30 , seria algo muy tardado y algo extenso e incluso fastidioso, seria mas fácil poder usar el problema de algoritmos genéticos.

Los AG nos sirven para usarlos en una serie de procesos organizados que se deben se seguir , para optimizar o solucionar un problema en especifico.
Someten accione aleatorias  semejantes a las que actúan en las evoluciones.

En pocas palabras esto seria un método de búsqueda para sacar una probabilidad bajo a una condición .y los cromosomas evolucionan a través de las iteraciones.
algunas ventajas de AG, que no ocupamos un conocimiento especifico para llevar acabo estos problemas.
Cuando usamos problemas de maximizan , estos resultados suelen estar menos afectados .

una de las ventajas de un AG  es que operan de forma simultanea son varias soluciones, es comúnmente que los utilizan en problemas para optimizar una función y es sumamente fácil ejecutarlos

las limitaciones o desventajas que tienen es que aveces puede que no encuentra la solución mas optima del problema.

Referencias






Read more »

jueves, 29 de agosto de 2013

Juego de la vida

DESCRIPCIÓN
El juego de la vida es el mejor ejemplo de un autómata celular, diseñado por el matemático británico John Horton Conway en 1970.
El juego de la vida es en realidad un juego de cero jugadores, lo que quiere decir que su evolución está determinada por el estado inicial y no necesita ninguna entrada de datos posterior. El "tablero de juego" es una malla formada por cuadrados ("células") que se extiende por el infinito en todas las direcciones. Cada célula tiene 8 células vecinas, que son las que están próximas a ella, incluso en las diagonales. Las células tienen dos estados: están "vivas" o "muertas" (o "encendidas" y "apagadas"). El estado de la malla evoluciona a lo largo de unidades de tiempo discretas (se podría decir que por turnos). El estado de todas las células se tiene en cuenta para calcular el estado de las mismas al turno siguiente. Todas las células se actualizan simultáneamente
REGLAS
Las transiciones dependen del número de células vecinas vivas:
Una célula muerta con exactamente 3 células vecinas vivas "nace" (al turno siguiente estará viva).

Una célula viva con 2 ó 3 células vecinas vivas sigue viva, en otro caso muere o permanece muerta (por "soledad" o "superpoblación").

PATRONES



VÍDEO DE COMO SE JUEGA

CÓDIGO


public static void main(String[] args) {
 

System.out.println("inserte los datos");
int matriz[][] = new int[3][3];

llenar(matriz);
mostrar(matriz);
               //metods
       contar_vecinos(matriz);
       reglas(matriz);
       imprimir2(matriz);
   } 

//EL METODO EN JAVA PARA LLENAR
   private static void llenar(int[][] mat) {
      for ( i = 0; i < mat.length; i++) {
           for ( j = 0; j < mat.length; j++) {
               mat[i][j] = teclado.nextInt();
           }
       }
   }
//EL METODO EN JAVA PARA MOSTRAR
   private static void mostrar(int[][] mat) {
       for ( i = 0; i < mat.length; i++) {
           for ( j = 0; j < mat.length; j++) {
               System.out.print(mat[i][j] + " ");
           }
           System.out.println();
       }
   }   
   
if (mat[i][j-1]==1)
   {
   vecino=vecino+1;
   }
   if (mat[i][j+1]==1)//vecino derecha
                    {
                    vecino=vecino+1;
                    }
     if (mat[i-1][j]==1)//vecino arriba
                    {
                    vecino=vecino+1;
                    }
                    if (mat[i+1][j]==1)//vecino  abajo
                    { 
                    vecino=vecino+1;
                    }
     if (mat[i-1][j-1]==1)//vecino arriba izquierda
                    {
                    vecino=vecino+1;
                    }
         if (mat[i-1][j+1]==1)//vecino arriba  derecha
                    {
                    vecino=vecino+1;
                    }
          if (mat[i+1][j-1]==1)//vecino arriba izquierda
                    {
                    vecino=vecino+1;
                    }
                  if (mat[i+1][j+1]==1)//vecino  abajo derecha
                    {
                    vecino=vecino+1;
                    }
   }
  
   }
private static void  reglas (int [][] mat){
   
   if (mat[i][j]==1)
   {
   if (vecino<=1)
     {
      mat[i][j]=0;
     }
   if (vecino>=2 && vecino<=3)
     {
      mat[i][j]=1;
     }
      if (vecino>=4)
                     {
                      mat[i][j]=0;
                     }
   }
   if (mat[i][j]==0)
   {
   if (vecino==3)
     {
   mat[i][j]=1;
     }
     else
      {
        mat[i][j]=0;
      }
   }
     }
private static void  imprimir2 (int [][] mat){
   
   for (i=0;i<10;i++)
   {
 for (j=0;j<10;j++)
    {
  if (mat[i][j]==0)
  System.out.println ("0");
   }
   else
   {
    System.out.println("1");
   }
     }

   }
   for (i=0;i<10;i++)
   {
         for (j=0;j<10;j++)
         {
         mat[i][j]=mat[i][j];
         }
       
   }  
Read more »