Wednesday, March 25, 2009
Fase 3 - Algoritmos Genéticos
En principio se generará una población de cromosomoas aleatorios compuestos por una serie de frames. Cada frame consta de varias listas y que éstas a su vez contienen los elementos (números) que representan el ángulo de movimiento de cada “joint” del cuerpo. Así, ya con esta lista principal de Frames, el robot sabe qué joint va en qué ángulo y para qué frame debe hacerlo, de esta forma se evalúa después en la función objetivo que es la base del algoritmo para identificar el objetivo final.
Ejemplo: un cromosoma con 5 frames seria como sigue:
[0,0,0,0,0,0],[-20,50,10,5,0,0],[0,-50,0,0,0,0],[50,10,40,20,0,0],[0,0,0,0,0,0]
Donde podemos ver que cada frame tiene 6 valores, uno para cada uno de los joints de la pierna. (Esto va a aumentar 20 (todos los joints del robot) cuando apliquemos realmente el algoritmo al proyecto de Robocup).
• Función a minimizar o a maximizar. ¿Cómo se calcula?
La función objetivo se calcula al evaluar cada cromosoma en el robot con la distancia que este avanzo en un tiempo determinado. Si al final del tiempo dado el robot no ha caminado, que puede ser porque se cayó, o avanzó muy poco, la función calcula qué cromosoma o cromosomas fueron los que ayudaron a que fuera un caminado más óptimo, y de éstos saca más números para las siguientes generaciones.
• Forma de hacer la reproducción.
La manera en la que se seleccionan los elementos para la reproducción es utilizando el PSelect que se calcula sumando el número total de elementos entre la suma total de los mismos. Ya teniendo el PSelect se calcula el Counter que es el número de cromosomas que pasarán para la reproducción.
• Forma de hacer la crossover.
El crossover se hace combinando los frames entre cada uno de los cromosomas de la población. No modificamos los valores de los joints al realizar el crossover debido a que nos podría ocasionar problemas por los diferentes rangos que tienen cada uno de ellos.
• Forma de hacer la mutación.
La mutación tendrá una probabilidad fija de .05. Cada elemento de cada frame tendrá esta misma probabilidad, esto para no obligar a que esté mutando tan constantemente, porque no se asegura que cuando se llegue a un cromosoma óptimo, los demás también lo serán, entonces si se muta este cromosoma se perdería el sentido correcto de lo que se tenía con anterioridad.
• Ejemplos de una generación de 4 elementos en la población.
--INITIAL POPULATION--
ELEMENT 1--> F1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F2 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F7 [100.0, -50.0, 0.0, 50.0, 0.0, 0.0], F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0],
ELEMENT 2--> F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F9 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0],
ELEMENT 3--> F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F10 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F2 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0],
ELEMENT 4--> F1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F10 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F10 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F7 [100.0, -50.0, 0.0, 50.0, 0.0, 0.0], F2 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0],
--GENERATION # 1--
--REPRODUCTION--
ELEMENT 1--> FITNESS 0.04605520492062051, PSELECT 0.6031265004054416, ECOUNT 2.4125060016217663, SELECTED 2
ELEMENT 2--> FITNESS 0.018206693136792483, PSELECT 0.2384299263129079, ECOUNT 0.9537197052516316, SELECTED 1
ELEMENT 3--> FITNESS 0.010275915992709416, PSELECT 0.13457061502223877, ECOUNT 0.5382824600889551, SELECTED 1
ELEMENT 4--> FITNESS 0.0018229575121629143, PSELECT 0.023872958259411763, ECOUNT 0.09549183303764705, SELECTED 0
--NEW POPULATION--
ELEMENT 1--> F1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F2 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F7 [100.0, -50.0, 0.0, 50.0, 0.0, 0.0], F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0],
ELEMENT 2--> F1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F2 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F7 [100.0, -50.0, 0.0, 50.0, 0.0, 0.0], F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0],
ELEMENT 3--> F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F9 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0],
ELEMENT 4--> F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F10 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F2 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0],
--CROSSOVER--
ELEMENT 1--> F1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F2 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F2 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0],
ELEMENT 2--> F1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F2 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F9 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0],
ELEMENT 3--> F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F7 [100.0, -50.0, 0.0, 50.0, 0.0, 0.0], F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0],
ELEMENT 4--> F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F10 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F7 [100.0, -50.0, 0.0, 50.0, 0.0, 0.0], F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0],
--MUTATION--
ELEMENT 1--> F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F2 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F2 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0],
ELEMENT 2--> F1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F2 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F1 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F9 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0],
ELEMENT 3--> F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F7 [100.0, -50.0, 0.0, 50.0, 0.0, 0.0], F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0],
ELEMENT 4--> F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F3 [0.0, 0.0, 0.0, 100.0, -50.0, 0.0], F10 [0.0, 0.0, 0.0, 0.0, 0.0, 0.0], F4 [0.0, 0.0, 0.0, 50.0, -30.0, 0.0], F5 [0.0, 0.0, 0.0, 50.0, 0.0, 0.0], F6 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0], F7 [100.0, -50.0, 0.0, 50.0, 0.0, 0.0], F8 [50.0, -30.0, 0.0, 50.0, 0.0, 0.0],
Conclusiones después de la programación
Al comenzar a implementar el algoritmo genético no tuvimos muchos problemas porque lo empezamos desde una aplicación externa, sin integrarlo al momento con el robot. En esta aplicación externa teníamos definidos todos los métodos del algoritmo genético, como reproducción, crossover y mutación, sin embargo, nos faltaba lo más complicado que era jalar la función objetivo del simulador. Esta parte fue la más complicada del proyecto.
Gracias a este proyecto aprendimos una gran cantidad de conceptos del simulador y de algoritmos genéticos. Fue muy complicado por el hecho de tener que entender el código de otro equipo , sin embargo al final con mucho esfuerzo pudimos realizarlo.
Video:
Tuesday, March 24, 2009
Fase 3 - Proyecto
Breve descripción del medio ambiente.
Para este avance del proyecto, desarrollamos un ambiente representado por una matriz de ocho por ocho. Sin embargo dicha matriz, estará dividida en cuatro cuadrantes que serán generados como cuatro ambientes subordinados. Cada cuadrante estará dividido en pequeñas matrices de cuatro por cuatro. En principio cada cuadrante tendrá una figura de dos por dos elementos justo al centro. El ambiente también limita la cantidad de movimientos posibles para cada figura independiente, en los movimientos adyacentes posibles sin romper la pequeña figura de cuatro elementos “nano”.
Descripción detallada del problema de optimización.
Lo que el agente en principio debe de optimizar es la secuencia para generar nuevas figuras a partir de varios elementos independientes “nano”. Esto se optimiza con base en los movimientos posibles de las piezas “nano” independientes para que se genere una pieza final en unidad con los cuatro cuadrantes.
Supongamos que tenemos una figura dada inicial, con base en el ambiente. Y con respecto a las distintas piezas que se pueden mover a distintos lados. El problema de optimización está representado de la siguiente manera:
Figura inicial:
0 0 0 0 0 0 0 0
0 1 1 0 0 1 1 0
0 1 1 0 0 1 1 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 0 0 1 1 0
0 1 1 0 0 1 1 0
0 0 0 0 0 0 0 0
Figura final:
0 0 0 0 0 0 0 0
0 0 1 1 1 1 0 0
0 0 1 0 0 1 0 0
0 0 1 0 0 1 0 0
0 0 1 0 0 1 0 0
0 0 1 0 0 1 0 0
0 0 1 1 1 1 0 0
0 0 0 0 0 0 0 0
Movimiento uno:
0 0 1 0 0 0 0 0
0 0 1 0 0 1 0 0
0 1 1 0 0 1 1 1
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 1 1 1 0 1 1 0
0 1 0 0 0 0 1 0
0 0 0 0 0 0 1 0
Movimiento dos:
0 0 1 0 0 0 0 0
0 0 1 0 0 1 1 0
0 1 1 0 0 1 0 0
0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0
0 1 0 0 0 1 1 1
0 1 1 1 0 1 0 0
0 0 0 0 0 0 0 0
En el ejemplo es visible que el movimiento dos genera en cada uno de los cuadrantes da un resultado más aproximado al final, por lo que las diferentes evaluaciones de selección son con base en esa relación y el que más acercado esté a la figura final será el segundo como el elegido a la selección final. Aunque en el ejemplo sólo se utilizan un par de movimientos, la implementación genera cuatro movimientos posibles. Sin embargo, la optimización con algoritmos genéticos radica en que las configuraciones más aproximadas a la final, son las que se presentan en la siguiente generación para ser producto de una evolución.
Solución planteada usando recocido de simulado.
Codificación del cromosoma.
Para la codificación de los cromosomas se tomarán en cuenta el número de cuadrantes que se generan con respecto al ambiente. Esto quiere decir que serán cuatro elementos dentro de un arreglo general que conserva toda la configuración final.
Está representado de la siguiente manera, por cada cromosoma.
[{0 0 0 0 0 1 1 0 1 1 0 0 0 0 0} {0 0 0 0 0 1 1 0 1 1 0 0 0 0 0} {0 0 0 0 0 1 1 0 1 1 0 0 0 0 0} {0 0 0 0 0 1 1 0 1 1 0 0 0 0 0}]
Función a maximizar o minimizar.
f(x) = Número de elementos correctos con respecto a la figura final.
-Implementación.
for(chr = 0; chr < MAXPOPUL; chr++)
sum += fx[chr];
avg = (sum / MAXPOPUL);
Reproducción.
-Implementación
for(chr = 0; chr < MAXPOPUL; chr++) //Expected count & Pselect
{
PSelect[chr] = (fx[chr] / (float)sum);
ExpectedC[chr] = (fx[chr] / (float)avg);
ActualC[chr] = (ExpectedC[chr] >= 1.0)? 1 : 0;
}
Crossover.
El crossover se realiza con base en el intercambio de cada uno de los cuadrantes. Se toman los dos cuadrantes y se intercambian entre ellos con los dos cuadrantes restantes. La forma en la que se selecciona el punto de cruce es aleatoria así como las parejas a ser cruzadas.
Mutación.
Para la mutación se considero una probabilidad de 1/1000. Con el objetivo de hacer una mutación en generaciones que estén más aproximadas al resultado final afectando de manera positiva a los cromosomas. Siempre y cuando los elementos de la generación no sean válidos u obtengan un valor menor en comparación al estado final.
Ejemplo.
Cromosoma f(x) Pselect Expected Blog to cross Cross Point Next Generation
[{0 0 0 1 1 1 1 0 0 0 0 0 0 0 0} {0 0 0 0 1 1 1 0 0 1 0 0 0 0 0} {0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0} {0 0 0 0 0 1 1 0 1 1 0 0 0 0 0}]
5 .2 .83 0 2 [{0 0 0 1 1 1 1 0 0 0 0 0 0 0 0} {0 0 0 0 1 1 1 0 0 1 0 0 0 0 0} {0 0 0 0 0 1 1 0 1 1 0 0 0 0 0} {0 0 0 0 0 1 1 0 1 1 0 0 0 0 0}]
[{0 0 0 1 1 1 1 0 0 0 0 0 0 0 0} {0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0} {0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0}{0 0 0 0 1 1 1 0 0 1 0 0 0 0 0}] 8 .32 1.3 3 1 [{0 0 0 1 1 1 1 0 0 0 0 0 0 0 0} {0 0 0 0 1 1 1 0 0 1 0 0 0 0 0} {0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0} {0 0 0 0 0 1 1 0 0 1 0 0 0 1 0}]
[{0 0 0 0 0 1 1 0 1 1 0 0 0 0 0} {0 0 0 0 0 1 1 0 1 1 0 0 0 0 0} {0 0 0 0 1 1 0 0 1 1 0 0 0 0 0} {0 0 0 0 0 1 1 0 1 1 0 0 0 0 0}]
7 .28 1.16 1 1 [{0 0 0 1 1 1 1 0 0 0 0 0 0 0 0} {0 0 0 0 1 1 0 1 0 1 0 0 0 0 0 0} {0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0}{0 0 0 0 1 1 1 0 0 1 0 0 0 0 0}]
[{0 0 0 0 0 1 1 0 1 1 0 0 0 0 0} {0 0 0 0 0 1 1 0 1 1 0 0 0 0 0} {0 0 0 0 0 1 1 0 1 1 0 0 0 0 0} {0 0 0 0 0 0 0 0 0 1 0 0 1 1 1}]
5 .2 .83 0 3 [{0 0 0 0 1 1 1 0 0 1 0 0 0 0 0} {0 0 0 0 0 1 1 1 0 1 0 0 0 0 0} {0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0} {0 0 0 0 0 1 1 0 1 1 0 0 0 0 0}]
Conclusiones después de la programación.
Los algoritmos genéticos son una nueva forma de ver como se optimizan la forma de formar figuras. Lo más interesante de nuestra solución radica en la capacidad de generar una figura final con varias figuras independientes. Lo interesante es que, los elementos “nano” tienen que buscar una solución óptima de cómo llegar a crear con el menor esfuerzo o menor número de movimientos para generalizar las partes particulares. Sin embargo, nos dimos cuenta que la solución con algoritmos genéticos generaría una solución rápida para formar las figuras debido a la cantidad de cromosomas que se generan, por lo que estos algoritmos no generan una buena forma de implementación para nuestro problema.
Monday, March 23, 2009
Fase 3 (no recuerdo como se llama el equipo)
Proyecto Final
a. Breve descripción del medio ambiente.
En esta etapa del proyecto nos enfocamos en la utilización de un algoritmo genético para maximizar la probabilidad de ganar una quiniela deportiva. El programa deberá escoger una combinación que contenga los partidos con mayor probabilidad de ganar. En este programa se seleccionará un grupo de 5 partidos.
b. Descripción detallada del problema de optimización – da al menos un ejemplo en donde se vea por qué es un problema de optimización.
El problema de optimización es buscar la mejor combinación que permita al usuario tener mayor éxito al apostar. Un ejemplo de dos combinaciones de partidos sería:
- {chi,mia,ny,orl,hou}
- {chi,mem,tor,por,gst}
En las combinaciones anteriores solo se consideran algunos equipos. El Algoritmo Genético busca la mejor combinación entre un conjunto de todos los equipos de la semana.
c. Solución planteada al problema utilizando la técnica de Algoritmos Genéticos. Describe con detalle cada elemento del planteamiento:
i. Codificación del cromosoma.
Cada cromosoma tendrá la siguiente forma:
- {X1,X2,X3,X4,X5}
Cada X representa un equipo diferente que además tiene una probabilidad de ganar una apuesta.
De un ejemplo de un robot al decodificar.
{orl,mia,dal,ny,ind}
Donde las probabilidades de cada uno son {50%,55%,75%,53%,48%}
ii. Función a minimizar o maximizar. ¿Cómo se calcula?
Se calcula con la sumatoria de las probabilidades de cada partido.
iii. Forma de hacer la reproducción.
Se eligen los pares que se van a reproducir al azar.
iv. Forma de hacer el crossover.
Se elige un punto dentro del cromosoma a partir del cual se hará el crossover. La selección del punto es al azar. Por ejemplo {X1,X2,X3 | X4,X5}
v. Forma de hacer la mutación.
La mutación ocurre con un valor de 0.01 y cuando ocurre cambia uno de los valores de un cromosoma por otro valor del conjunto de equipos.
vi. Ejemplo de una generación de 4 elementos en la población.
- {chi,mia,ny,orl,hou}
- {la,okc,tor,por,gst}
- {ind,sac,phi,san,dal}
- {chi,mem,tor,por,gst}
d. Conclusiones después de la programación.
El principal problema que tuvimos durante esta etapa del proyecto es que nuestro problema es muy pequeño y simple para el uso de algoritmos genéticos. Consideramos que el conjunto de datos sobre el cual trabaja el algoritmo es muy pequeño. Sin embargo fue una buena experiencia poner en práctica varios de los conceptos vistos en clase.
Algoritmos Geneticos
Breve descripción del medio ambiente.
En esta etapa de desarrollo, el medio ambiente es un mundo virtual en dos dimensiones, representando una cancha de futbol pero con las porterías en las esquinas. El juego cuenta con dos equipos, Rojos y Azules, ambos controlados por agentes. Cada escenario cuenta con dos bases en los extremos del mismo en donde los personajes podrán anotar puntos.
Descripción detallada de la acción a aprender por el agente.
El problema que se optimiza utilizando la técnica de algoritmos genéticos es la de generar a un equipo que tenga los mejores atributos para jugar contra algún equipo predeterminado, es decir si se juega contra el equipo A el algoritmo determina que jugadores fueron los mejores y al terminar el partido se realiza el algoritmo de forma que para las generaciones futuras sobreviven los que tengan mejor desempeño contra un equipo.
Solución planteada usando Algoritmos Genéticos
Codificación del cromosoma: Cada cromosoma es un jugador de un equipo y tiene la siguiente configuración:
Cromosoma=(Equipo, pelota,compañeros, enemigos, inteligencia, especialización, vision en x, vision en y, vision en z, velocidad).
Un ejemplo de un cromosoma es el siguiente:(equipo rojo, pelota, rojos, azules, tonto, atacar, 10,10,10,3)
Funcion a maximizar:
Número de enemigos que elimina, consideramos que para este problema se puede considerar como un buen jugador al que elimina más jugadores enemigos, debido a que son jugadores que estuvieron participando activamente y que seguramente son los más valiosos, es por eso que los que eliminen más contrarios son los jugadores que se esperaría que sobrevivieran para la siguiente ronda
f(X)= muertes enemigas
Forma de hacer la reproducción:
La función que se define previamente es la que determina como se realiza la reproducción y funciona de la siguiente manera:
Enemigos Matados Probabilidad Esperanza Actual
Jugador 1 4 0.007 0.444 0
Jugador 2 231 0.4261 2.566 3
Jugador 3 7 0.012 0.077 0
Jugador 4 3 0.0055 0.033 0
Jugador 5 103 0.19 1.144 1
Jugador 6 194 0.3579 2.155 2
La reproducción en todas las ocasiones se lleva a cabo de la siguiente forma Jugador 1 y Jugador 6, Jugador 2 y Jugador 5, Jugador 3 y Jugador 4.
Forma de hacer el crossover
El crossover se realiza en los mismos puntos en cada una de las generaciones en los puntos 6 y 4 del cromosoma.
Forma de hacer la mutación:
Se evalúa cada uno de los parámetros del cromosoma y con una probabilidad de 0.1% se modifica de valor, es decir si un jugador tiene un atributo con un determinado valor si es necesario realizar una mutación se tomará el siguiente valor que puede tomar el parámetro, por ejemplo si un jugador tiene como valor en el campo Inteligencia = Tonto, si se realiza una mutación se cambiará por Inteligente.
Ejemplo de una generación de 4 elementos
Jugador 1=(Equipo rojo, Pelota, rojos, azules, tonto, atacar, 10,10,10,3)
Jugador 2=(Equipo rojo, Pelota, rojos, azules, Inteligente, defender 13,13,13,2)
Jugador 3=(Equipo rojo, Pelota, rojos, azules,Atacante,atacar,7,7,7,4)
Jugador 4 =(Equipo rojo, Pelota,rojos,azules,tonto, defender 15,15,15,2)
Conclusiones después de la programación
Al terminar la programación terminamos muy sorprendidos ya que entre más juega el equipo genético contra cualquier otro equipo nos dimos cuenta que se adaptan a las circunstancias y generalmente después de un par de corridas el equipo genético resulta vencedor. por otra parte es interesante ver que si juegan con un equipo completamente diferente tardan un poco en adaptarse por lo que sería recomendable tener un registro de configuraciones exitosas contra algunos equipos.
Video:
Kawabonga! Fase 3
El ambiente en particular son los blogs que son web escritas en [x]HTML y que utilizan el protocolo HTTP para transferir datos de una computadora llamada Servidor a otra llamada cliente.
Breve descripción del problema de optimización.
Se selecciona un blog y se pretende encontrar el número N de blogs más parecidos.
La similaridad f(x) entre dos blogs queda definida de la siguiente manera:
| Blog | Rata | Pillo | Vago |
|---|---|---|---|
| Blog #1 | 13 | 2 | 2 |
| Blog #2 | 5 | 11 | 5 |
Raíz((Rata#1 - Rata#2)2 + (Pillo#1 - Pillo#2)2 + (Vago#1 - Vago#2)2)
Raíz((13 - 5)2 + (2 - 11)2 + (2-5)2)
Raíz(64 + 81 + 9)
Raíz(154)
12.409
1/(1+12.409)
0.07457
Solución planteada al problema utilizando la técnica de Algoritmos Genéticos. Describe con detalle cada elemento del planteamiento.
Se elige P: El tamaño de la población inicial.
Se selecciona un blog y se pretende encontrar el número N de blogs más parecidos. Donde N tiene que ser igual a Nb x P.
Codificación del cromosoma.
Algunos ejemplos son:
[A,B,C]
[X,B,Z]
[C,X,A]
Función a minimizar o maximizar. ¿Cómo se calcula?
f(x) = Suma(Función de similaridad (Mostrada arriba))
Forma de hacer la reproducción.
Pselect = f(i)/suma(f)
Expected Count = parte entera de [Pselect*n] + "lanzamientos de monedas" con pesos iguales al residuo de [Pselect*n]
Forma de hacer el crossover
El punto de cruce es elegido de forma aleatoria.
Forma de hacer la mutación
Dado p = 0.15 y un número r aleatorio entre 0 y 1, si r <>
Ejemplo de una generación de 4 elementos en la población
para el blog F
| Individuo | f(x) | Pselect | Expected | Blogs to cross | Pair /cross point | New Generation |
| [X,Y,Z] | 1.5 | 0.375 | 0+1 | [X,Y,Z] | 4 / 2 | [X,Y,D] |
| [A,B,C] | 1 | 0.25 | 0+1 | [A,B,C] | 3 / 1 | [A,X,D] |
| [D,B,Z] | .5 | 0.125 | 0+0 | [E,X,D] | 2 / 1 | [E,B,C] |
| [E,X,D] | 2 | 0.5 | 0+2 | [E,X,D] | 1 / 2 | [E,X,Z] |
Conclusiones después de la programación
Tuesday, March 3, 2009
Fase 2 - Proyecto
Breve descripción del medio ambiente.
Para este avance del proyecto, desarrollamos un ambiente representado por una matriz de 10 por 10. En principio está llena de ceros, excepto por la parte donde inician los elementos “nano”. La posición inicial, se encuentra aproximadamente en la mitad de la matriz y los elementos “nano” son representados por unos. Entonces, las figuras están formadas por unos, de acuerdo a los movimientos posibles para los elementos “nano”.
Descripción detallada del problema de optimización.
Lo que el agente en principio debe de optimizarse es la forma en la que se hará la figura. Para esto recorrerá los distintos movimientos posibles para formar una figura. El problema se basa en la mejor forma de hacer la figura establecida a realizar, con la mejor selección de movimientos para poder obtener un patrón optimizado de la figura establecida.
Supongamos que tenemos una figura dada inicial, es decir el cuadro en el centro. Y con respecto a las distintas piezas que se pueden mover a distintos lados. El problema de optimización está representado de la siguiente manera:
Figura inicial:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0 0
0 0 0 1 1 1 0 0 0 0
0 0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0
Figura final:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
Movimiento uno:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 1 1 0 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0
Movimiento dos:
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 0 1 1 1 1 0 0 0
0 0 0 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
En el ejemplo es visible que el movimiento uno genera una solución más acertada a la solución final, sin embargo eso no dice con claridad si el movimiento uno es mejor al movimiento dos con respecto a la figura final. Por lo que, el problema de optimización radica en la realización de la mejor serie de movimientos que generen mejor la figura objetivo o final.
Solución planteada usando recocido de simulado.
Configuración.
Para la configuración de esta fase del proyecto definimos por cuestiones de programación que el arreglo inicial tendría que tener las coordenadas de la matriz donde se encontraran los elementos en cuestión.
{{3,3}, {3,4}, {3,5},{4,3},{4,4}, {4,5},{5,3}, {5,4}, {5,5}}
Donde el primer elemento de cada subconjunto es la posición en “x” y la segunda en “y”.
Reordenamiento.
El reordenamiento es aleatorio, pero se realiza de acuerdo a la serie de movimientos dados por los distintos átomos o elementos del arreglo. De acuerdo a un número de reglas, los átomos sólo se podrán mover adyacentes entre sí, sin romper la estructura base de la figura.
Función objetivo.
Ya que el objetivo es maximizar la construcción de la figura con los mejores movimientos posibles, la función objetivo está representada con el siguiente código:
int assess(int board[MAXR][MAXC], int solution[MAXR][MAXC]){
int cquads= 0;
for(i = 0; i < MAXR; i++)
for(j = 0; j < MAXC; j++ )
if(board[i][j] && solution[i][j]) cquads++;
return cquads;
}
Donde se evalúan el número de posiciones correctas con respecto a la figura final y se ejecutan evalúan los posibles movimientos para el que genere una mejor aproximación a la figura final.
Calendario de recocido.
Para esta parte la temperatura que se eligió una de 100, para poder ir bajando correctamente la temperatura y encontrar la solución en su punto mínimo.
Ti+1 = α Ti
Conclusiones después de la programación.
Es interesante la forma en la que el recocido da resultados, ya que en nuestro caso evaluó una cantidad impresionante de figuras. Sin embargo, los elementos asertivos dieron señal a lo que sería la mejor solución. La optimización fue evidente, ya que cuando fue bajando la temperatura, dieron resultados bastantes interesante como la solución exacta o a veces aproximada de su referencia final, es decir, la silla.
Friday, February 27, 2009
Recocido Simulado en Webots con Naos
Recocido Simulado - Oriam y su Huerto de Tomates
En esta etapa de desarrollo, el medio ambiente es un mundo virtual en dos dimensiones, representando una cancha de futbol pero con las porterías en las esquinas. El juego cuenta con dos equipos, Rojos y Azules, ambos controlados por agentes. Cada escenario cuenta con dos bases en los extremos del mismo en donde los personajes podrán anotar puntos.
Descripción detallada de la acción a aprender por el agente.
El problema que se optimiza con este algoritmo es la selección de una mejor ruta, para enviar pases. los pases deben ser lo suficientemente buenos para dejar al equipo en una mejor posición. Se pretende realizar una variación del problema del agente viajero, la única diferencia es que no es necesario pasar por todos los puntos, se tratará de elegir la mejor ruta para llegar a la portería enemiga. De no encontrar una ruta lo suficientemente eficiente el agente que tenga posesión de la pelota permanecerá con ella y no la soltará.
Solución planteada usando Recocido Simulado:
Configuración: Para resolver este problema se plantea utilizar una estructura de datos que almacene una serie de tuplas con diversos elementos que se evaluarán. Una configuración se ve de la siguiente forma:
ruta=[(distancia, costo,parámetros)..........]
Reordenamientos: Se realizarán de forma aleatoria, y se probarán las diferentes posibles rutas para cada configuración de jugadores.
ruta2=[(otraDistancia, otroCosto, otroParametro).....] Función objetivo: El objetivo es minimizar el costo de realizar un pase, por lo tanto mientras más bajo sea el valor de la función objetivo la ruta evaluada será mucho mejor.
f(X)= Costo+distancia+parámetros Aparte de la distancia se evaluarán otros parámetros como si el jugador es visible, alcanzable o está detrás de un objeto, pero al carecer de esos elementos nuestro medio ambiente son despreciados.
Conclusiones después de la programación
Al terminar la programación es interesante ver como los agentes deciden por si mismos si pasar la pelota o seguir con ella, y generalmente toman la decisión correcta, al probar los agentes con poca inteligencia contra los que tienen algoritmos más complejos (Recocido Simulado) se puede ver una diferencia bastante grande ya que tienen mejores estrategias y los partidos terminan con una clara ventaja para los agentes más inteligentes.
Link:
Kawabonga! Parte 2
El Internet es un sistema global de redes interconectadas que intercambian datos.
El ambiente en particular son los blogs que son web escritas en (x)HTML y que utilizan el protocolo HTTP para transferir datos de una computadora llamada Servidor a otra llamada cliente.
b. Breve descripción del problema de optimización
Dado un de blog y una cantidad M de blogs que podemos elegir para categorizar, encontrar los N blogs más parecidos al blog dado.
La distancia entre estos dos blogs será calculada como una distancia euclidiana a partir del número de palabras iguales que poseen.
Una vez que se tiene la distancia, la convertimos en un numero entre 0 y 1.
Al tener un resultado de 0 a 1 tenemos que 0 significa que dos blogs no tienen nada en común, y 1 quiere decir que dos blogs son idénticos, por lo que para encontrar los blogs más parecidos tendremos que maximizar el resultado.
c. Solución planteada al problema utilizando el método de recocido simulado.
1. Configuración
Una lista de N Elementos [E1,E2...En]
Cada elemento es una tupla de la forma (calificación, url_del_blog)
2. Re-ordenamientos
Se cambia el elemento con calificación menor por otro blog seleccionado al azar
3. Función objetivo
La función objetivo es la distancia (D)
f(x) = 1/(1+D)
D=Raíz(Suma((palabrai1-palabrai2)^2)) para i=[0,n]
4. Calendario de recocido
Temperatura Inicial = 1.0
Temperatura Final = 0.1x10^-6
Alpha = 0.9999
K = 2 (Número de iteraciones para cada temperatura)
e. Conclusiones después de la programación
Después de haber realizado la programación y haber llevado a cabo algunas corridas de prueba, concluimos que la eficiencia del algoritmo (al ser comparado con otros) depende en gran medida del espacio de búsqueda, ya que para espacios pequeños la implementación de 'brute force' es más sencilla e igual de útil. Sin embargo conforme ampliamos el espacio de búsqueda, las ventajas del recocido simulado se fueron haciendo más visibles.
Friday, January 30, 2009
Fase 1 - Proyecto
El medio ambiente de nuestro proyecto está definido por el espacio directo donde los cubos o figuras (representando los átomos). Los cubos, tienen movimientos regidos por reglas, y los movimientos son adyacentes a los demás cubos con base en su posición actual. Es importante recalcar que los cubos pueden moverse de manera diferente para generar la figura final. En eso se basa el dilema de nuestro proyecto.
2. Plataforma en la que se programara el medio ambiente y lenguaje de programación a ser utilizado.
Con el desarrollo del proyecto aún no se ha determinado el lenguaje y la plataforma en la que se hará. Sin embargo, algunos de nuestras ideas dirigen nuestra atención al lenguaje Java o Phyton.
3. ¿Cuáles problemas de optimización se encuentran en dicho medio?
El problema primordial de optimización se ve reflejado en el menor número de movimientos, dada una figura final, para realizar dicha figura a partir de un estado inicial. Esto se logrará con base en el desarrollo de la figura final
4. ¿Qué conocimiento con incertidumbre necesita ser representado?
El conocimiento con incertidumbre se ve reflejado directamente con el desconocimiento de la ruta o serie de movimientos que se tendrán que realizar para generar la figura final. Así como la incertidumbre de saber si es beneficioso o no, para llegar a la figura final, el movimiento independiente de las figuras.
Chutas: Proyecto Fase 1
Los Naos al ser robots con mayores grados de libertad, existen múltiples situaciones en dónde físicamente se pueden optimizar sus movimientos. El objetivo inicial de la optimización se va a enfocar al movimiento coordinado de los motores y luego de esto se podrán optimizar lo que serían las jugadas y decisiones las cuales incluirán aspectos de la comunicación y el aprendizaje. A continuación analizamos ciertos problemas de optimización que encontramos en nuestro medio básico y que por el momento es factible su realización:
- 1. ) Optimización del caminado del Nao.
- 2. ) Optimización de levantamiento del Nao.
- 3. ) Optimización del tiro del Nao.
2. Inteligencia computacional. ¿Qué conocimiento con incertidumbre necesita ser representado?.
Cada robot necesita conocer cómo irá a reaccionar conforme su ambiente se vaya modicando; es decir, los robots no conocen qué podrá suceder al siguiente momento, pero lo que sí saben con certeza es cómo reaccionar a una situación en específico, o a un conjunto de situaciones en común.
Fase 1 - Proyecto
1. Descripción detallada del medio ambiente.
El medio ambiente de nuestro proyecto está definido por el espacio directo donde los cubos o figuras (representando los átomos). Los cubos, tienen movimientos regidos por reglas, y los movimientos son adyacentes a los demás cubos con base en su posición actual. Es importante recalcar que los cubos pueden moverse de manera diferente para generar la figura final. En eso se basa el dilema de nuestro proyecto.
2. Plataforma en la que se programara el medio ambiente y lenguaje de programación a ser utilizado.
Con el desarrollo del proyecto aún no se ha determinado el lenguaje y la plataforma en la que se hará. Sin embargo, algunos de nuestras ideas dirigen nuestra atención al lenguaje Java o Phyton.
3. ¿Cuáles problemas de optimización se encuentran en dicho medio?
El problema primordial de optimización se ve reflejado en el menor número de movimientos, dada una figura final, para realizar dicha figura a partir de un estado inicial. Esto se logrará con base en el desarrollo de la figura final
4. ¿Qué conocimiento con incertidumbre necesita ser representado?
El conocimiento con incertidumbre se ve reflejado directamente con el desconocimiento de la ruta o serie de movimientos que se tendrán que realizar para generar la figura final. Así como la incertidumbre de saber si es beneficioso o no, para llegar a la figura final, el movimiento independiente de las figuras.
Web Crawler + Applicacion Web
- Descripción detallada del medio ambiente.
El Internet es un sistema global de redes interconectadas que intercambian datos.
El ambiente en particular son lás páginas web escritas en (x)HTML y que utilizan el protocolo HTTP para transferir datos de una computadora llamada Servidor a otra llamada cliente. - Plataforma en la que se programara el medio ambiente y lenguaje de programación a ser utilizado.
Utilizaremos Python para hacer los prototipos del Web Crawler debido a que es un lenguaje que permite representar de manera sencilla los algoritmos además de contar con un gran numero de librerías y herramientas que facilitan la programación, como lo son avanzados profilers y debuggers.
Para la aplicación tenemos pensado utilizar LAMP (Linux, Apache, MySQL y P*) para hacer la aplicación que presentara los resultados y hará las búsquedas en las bases de datos. - ¿Cuáles problemas de optimización se encuentran en dicho medio?
Maximizar la rapidez de la búsqueda de resultados de acuerdo a los criterios establecidos por el usuario. Así como minimizar el número de resultados no útiles presentados. - ¿Qué conocimiento con incertidumbre necesita ser representado?
No sabe realmente a dónde se dirigen los links ni sabe si los links funcionan o seguirán funcionando en el futuro. Además de que no se puede saber si el Web Crawler se quedará ciclado en una cierta zona de la web.
Seleccion medio ambiente - Oriam y su huerto de tomates
El medio ambiente será un mundo virtual en 3D diseñado por nosotros, dentro de un videojuego, el medio ambiente contará con plataformas, desniveles y una topología que será distinta en la mayor parte de sus puntos.
El juego se pretende que tenga equipos, uno será controlado por los usuarios y uno por los agentes que programemos, cada escenario contará con dos bases en los extremos del mismo en donde los personajes podrán anotar puntos.
Finalmente, el medio ambiente contara con lugares que dañaran la vida del jugador, incluso matándolo, por lo que los personajes deberán aprender de su medio. De igual manera habrá lugares inaccesibles para los personajes.
2. Plataforma en la que se programara el medio ambiente y lenguaje de programación a ser utilizado.
La plataforma que utilizaremos será la que desarrollemos y utilizaremos el lenguaje de programación C++ con las librerías de OpenGL. Estamos considerando el uso de Python, pero por el momento esa opción queda como tentativa.
3. ¿Cuáles problemas de optimización se encuentran en dicho medio?
El videojuego se enfocará en anotar puntos en cada una de las bases y cuando el rival ( agente) tenga el balón/pelota, puede comunicarse con sus compañeros y planear una ruta eficiente de pases para llegar a la zona de anotación.
4. ¿Qué conocimiento con incertidumbre necesita ser representado?
Por ser un videojuego la incertidumbre siempre estará presente, ya que los agentes no conocen el escenario por lo que conforme lo vayan explorando irán conociéndolo y formando estrategias dependiendo de su experiencia, de igual manera la posición del jugador es cambiante, y tiene que saber en qué lugares puede encontrarse o en donde buscarlo, ya sea para atacarlo o bien alejarse de él.
Monday, January 26, 2009
Instrucciones del blog
Por favor, cuando suban una actividad, pongan en el titulo el titulo de la actividad y en la etiqueta pongan su numero de equipo y nombre. En este caso, yo estoy poniendo el titulo de "Instrucciones del blog" y la etiqueta "0-Jorge".
Si desean usar más etiquetas para clasificar mejor su contribución, por favor háganlo.
Cualquier pregunta, por favor mándenme un correo electrónico, preguntenme en clase, o simplemente den de alta un post y yo lo contesto.
Gracias.