SuperManager ACB: Satisfacción de restricciones mediante
Transcription
SuperManager ACB: Satisfacción de restricciones mediante
SuperManager ACB: Satisfacción de restricciones mediante Backtracking Darío Dosantos Moreno Fernando Hoyos Leyva Carlos Martínez de la Osa NIA 100047278 NIA 100054996 NIA 100047405 [email protected] [email protected] [email protected] RESUMEN En este documento se implementa un algoritmo de backtracking en Java para encontrar una solución al problema de satisfacción de restricciones planteado en el juego on-line SuperManager ACB: componer el mejor equipo de baloncesto posible con un presupuesto limitado. Categorías y descriptores Términos generales Experimentación, Obtener varias o todas las soluciones posibles del problema. - Obtener el valor mínimo o máximo asignadas a las variables que satisfacen las restricciones del problema. - Obtener una solución óptima en función de una o varias variables. Existen varios algoritmos para la resolución de problemas de satisfacción de restricciones, entre los que se encuentran búsqueda en profundidad, backtracking (búsqueda con retroceso), forward checking (comprobación hacia delante) y varios métodos heurísticos que toman decisiones “inteligentes” sobre el valor asignable a cada variable. Estos algoritmos son elegidos en función de la complejidad del problema de satisfacción de restricciones a resolver. I.2.8 [ARTIFICIAL INTELLIGENCE]: Problem Solving, Control Methods, and Search: Backtracking [2] Algoritmos, Gestión, Diseño, humanos, Lenguaje, Teoría. - Factores Palabras clave A continuación se expone una pequeña descripción de los algoritmos alternativos al backtracking para la resolución de problemas de satisfacción de restricciones: Satisfacción, restricciones, backtracking, ACB, manager, Java. 1. INTRODUCCIÓN - 1.1. Problema de satisfacción de restricciones El problema de satisfacción de restricciones (PSR) es aquel problema matemático que define un conjunto finito de variables que deben satisfacer un número determinado de restricciones o limitaciones. El problema de satisfacción de restricciones consiste en: - Un conjunto de variables - Un conjunto de dominios (rango de valores) asociado a cada variable. - Un conjunto de restricciones. - Una solución a dicho problema se produce cuando la asignación de valores a todas las variables es tal que se cumplen todas las restricciones establecidas previamente. Como puede ser que existan varias soluciones posibles a dicho problema, puede haber diferentes objetivos en la aplicación del algoritmo que resuelva el problema: - Forward Checking El algoritmo forward checking pertenece a un grupo de algoritmos llamados métodos híbridos de resolución, ya que son una mezcla entre algoritmos de búsqueda (entre los que se encuentra el backtracking) y los algoritmos de inferencia. El algoritmo forward checking funciona de una manera similar al backtracking (explicado detalladamente en el siguiente apartado), pero en lugar de éste, para cada posible valor del dominio de una variable se toma dicho valor como posible solución asignable a dicha variable, eliminando después del dominio de las variables futuras todos aquellos valores que no satisfacen las restricciones impuestas en el problema con el valor asignado actual. Métodos heurísticos En los métodos heurísticos, a diferencia del backtracking donde no existe un orden para recorrer el dominio con los posibles valores de las variables, se elige una manera de recorrer dicho dominio con la esperanza de encontrar más rápidamente la mejor solución que satisfaga las restricciones del problema. Entre los diferentes métodos heurísticos que existen, los más importantes para la resolución de problemas de satisfacción de restricciones son: Obtener una solución, no importa cuál. -1- - Heurística de grado: Selecciona la variable, entre las no asignadas, que esté implicada en el mayor número de restricciones - Heurística MVR: Selecciona la variable más restringida, es decir, con el menor número de valores legales que satisfacen la restricción. - Heurística del valor menos restringido: Se elige el valor de la variable que excluye el menor número de restricciones en las variables vecinas. La mejora con respecto a la estrategia de fuerza bruta consiste en que el algoritmo de backtracking no evalúa todas las posibilidades, ya que cuando hay un nivel que no cumple todas las restricciones, vuelve hacia atrás desechando todos los caminos existentes a partir de dicho nivel. En general los tiempos de ejecución del algoritmo de backtracking son factoriales o exponenciales, por lo que no es uno de los algoritmos más eficientes que existen, siendo solamente viable computacionalmente para problemas de complejidad limitada. En cambio es bastante sencillo de implementar comparado con otros algoritmos como forward checking o diferentes métodos heurísticos. También existen las denominadas búsquedas locales o hillclimbing para resolver problemas de satisfacción de restricciones. En este caso se trabaja con estados completos donde todas las variables están asignadas, escogen un conjunto de estados y se selecciona aquél que viola menor número de restricciones. A partir de entonces reasignan las variables conflictivas por otras hasta que se satisfacen todas las restricciones. Aunque tarda bastante menos tiempo computacionalmente que otros métodos, tiene la desventaja de que se puede quedar atascado en un máximo local no pudiendo encontrar así la solución óptima al problema. 1.2. Algoritmo de backtracking El algoritmo de backtracking es una estrategia para encontrar soluciones a problemas de satisfacción de restricciones. Para ello, en lugar de realizar una estrategia de fuerza bruta en la que se forman todas las posibles combinaciones y se evalúan para averiguar si satisfacen el conjunto de restricciones determinado, realiza un recorrido en profundidad del espacio de búsqueda partiendo de la raíz. Figura 2: Logo de SuperManager 2. SUPERMANAGER ACB.COM SuperManager ACB.COM es un juego de simulación que nos permite ponernos en la piel de un director deportivo de un equipo de baloncesto. Nuestro objetivo es conseguir los mejores equipos que seamos capaces utilizando distintas combinaciones de los jugadores que participan en la ACB 2008-09. Se deben configurar equipos de 11 jugadores y se sumarán puntos en función de las estadísticas de estos jugadores en cada jornada de la ACB, lo que determinará la posición entre todos los participantes. 2.1 Sistema de juego Cada participante puede hacer un número ilimitado de equipos y en cada equipo se tendrá una asignación inicial de 6.500.000 Euros. El equipo que se ha de formar es un conjunto de once jugadores distribuidos de la siguiente forma: - 3 bases - 4 escoltas o aleros Figura 1: Algoritmo de Backtracking - 4 ala-pívots o pívots Este recorrido se hace de tal forma que en cada momento, el algoritmo se encuentra en un nivel k del árbol que satisface las restricciones, obteniendo una solución parcial del problema. Si en el siguiente nivel k + 1 se puede añadir un nuevo elemento a la solución que siga satisfaciendo las restricciones, el algoritmo sigue por ese camino. Si no encuentra ningún elemento vuelve al nivel anterior k – 1 y sigue probando con otras secuencias. El algoritmo continúa hasta que se encuentra una solución completa del problema o hasta que se agotan todas las posibilidades. Cada equipo podrá tener un máximo de 2 jugadores 1 extracomunitarios y un mínimo de 4 jugadores seleccionables . Los primeros se identifican con una bandera europea tachada y los segundos con una bandera española. Un equipo compuesto por menos de 11 jugadores o que no cumpla los requisitos anteriores no será válido. Si un equipo no cuenta con 11 jugadores durante la disputa de una jornada o incumple los cupos, no sumará ningún punto esa semana. -2- Cada equipo puede realizar un total de 3 cambios por jornada, cerrando el periodo de cambios una hora antes del inicio del primer partido de cada jornada. Lógicamente, no se permite ningún tipo de cambio cuando los partidos han empezado ya que se podría sacar ventaja viendo cómo están jugando. VAL = (2+1-1-1+3) = 4 Si un jugador no disputa un partido recibirá 0 puntos. Los puntos de un equipo en concreto se obtienen sumando los puntos de sus 11 jugadores (incluidas los negativos y el bonus). Cada equipo tendrá una puntuación semanal y a la vez un acumulado de todas las jornadas que sirve para elaborar la clasificación final. 2.3 Precio de los jugadores El precio inicial de los jugadores viene dado por la valoración total que obtuvieron la temporada anterior en esta competición. En caso de que no jugaran en la ACB durante la última campaña se estimaría su valor teniendo en cuenta las estadísticas cosechadas en la competición de la que procede y el impacto que se espera que tenga este año. Por ejemplo, Juan Carlos Navarro que durante la temporada 20072008 no participó en la liga ACB, ya que jugó en la NBA con los Memphis Grizzlies, este año tuvo un precio muy alto de salida ya que la última temporada que jugó en la liga española fue el segundo jugador más valorado por detrás de Luis Scola. Figura 3: Ejemplo de equipo válido 2.2 Puntuación Cada jugador obtendrá una puntuación en cada jornada que dispute. Esta puntuación será la equivalente a su valoración ACB en ese partido, con un bonus del 20% en caso de victoria de su equipo. Este bonus no se aplicará en caso de que la valoración del jugador sea igual o menor que cero. La valoración ACB es un valor que da una idea estadística de lo bien o mal que un jugador ha rendido en el partido. Este dato ha sido discutido durante mucho tiempo, y sigue siéndolo actualmente, ya que son muchos los que argumentan que no todo lo que aporta un jugador se ve reflejado en estos números: muchos factores como la defensa o los denominados “intangibles”, sólo se pueden apreciar viendo el partido, pese a todo en los campos más generales del juego estas estadísticas dan una idea general y permiten, entre otras cosas, hacer posible este juego. Básicamente este valor se calcula sumando las acciones positivas de un jugador y restando las acciones negativas (todas aquellas que pueden contabilizarse a simple vista): puntos, rebotes, asistencias, pérdidas de balón… la fórmula concreta es la siguiente: Figura 4: Juan Carlos Navarro La cotización de los jugadores evolucionará a lo largo de las jornadas en función de sus estadísticas. Su precio depende de su valoración media ACB más el 20% por las victorias, con una relación de 70.000 € cada punto. VAL = (PTS + ASIS + REB + TAPF + BR + FR + T1C + T2C + T3C - BP - TAPC - FP - T1I - T2I - T3I) Para saber si la cotización de un jugador sube, se cuenta la media de sus tres últimos partidos, si ésta supera a su media total, entonces la cotización del jugador subirá, y si es menor bajará. El participante puede acudir al mercado en el periodo entre jornadas para vender o fichar a cualquier jugador de su equipo al precio marcado por su cotización en ese momento. El precio del jugador variará cada jornada, pero dicho precio nunca fluctuará más de un 15% de una jornada a la siguiente, aunque le corresponda una variación mayor. La compra-venta de jugadores es una posibilidad de incrementar el dinero disponible inicialmente por el equipo y optar de esta PTS = Puntos - ASIS = Asistencias - REB = Rebotes TAPF = Tapones realizados - BR = Balones robados FR = Faltas recibidas - T1C = Tiros libres convertidos T2C = Tiros de 2 convertidos - T3C = Triples convertidos BP = Balones perdidos - TAPC = Tapones recibidos FP = Faltas personales realizadas - T1I = Tiros libres intentados T2I = Tiros de 2 intentados - T3I = Triples intentados. Por ejemplo un jugador que realice dos tiros de 2 puntos, de los cuales anote 1, pierda 1 balón, y atrape 3 rebotes, tendría una valoración: -3- forma a fichajes de mayor valor. El precio mínimo de un jugador será de 45.000 euros. No existe un valor máximo. después seleccionar a la mejor combinación de jugadores en este ámbito restringiéndonos a nuestro presupuesto. 2.4 Ganadores 2.5.2 Presupuesto Se otorgarán los siguientes premios: Otro tipo de jugadores, denominados brokers, se decantan por intentar tener el equipo con más presupuesto. Para ello habrá que informarse mediante webs estadísticas o analizando dando recopilados y observar lo realizado en las dos últimas jornadas para averiguar qué jugadores necesitan menos valoración en sus respectivos partidos para aumentar al máximo su cotización. También hay que tener en cuenta que no todos los jugadores pueden tener el mismo crecimiento en su precio, los jugadores más caros tienen un margen más grande de mejora pero a su vez es más complicado que ésta se produzca ya que sus valoraciones medias son mayores y necesitarían una puntuación muy alta para seguir mejorando. 2.4.1 SuperManager de la jornada El ganador será el equipo con mayor puntuación conseguida en esa jornada. 2.4.2 SuperManager ACB.COM 2008-2009 El ganador será el equipo con mayor puntuación conseguida en esa jornada: El ganador será el equipo con mayor puntuación acumulada a lo largo de todas las jornadas computadas. 2.4.3 Brokerbasket ACB.COM 2008-2009 2.5.3 Otros El ganador será el equipo que finalice el juego con mejor situación financiera, entendida ésta como la suma de la cotización global de los 11 jugadores más el dinero en caja del equipo. Por último tenemos las demás opciones que son optar el equipo más anotador, más reboteador, etc. Para esto tendríamos que enfocar nuestros esfuerzos en añadir jugadores expertos en la faceta del juego en la que queremos destacar. Por ejemplo puede haber jugadores que anoten mucho pero tengan mal porcentaje de tiro o pierdan muchos balones por lo que su valoración no será muy alta pero para el apartado de la anotación harían su trabajo. 2.4.4 Mejor puntuación del mes El ganador será el equipo que consiga la puntuación más alta del mes en una sola jornada. 2.4.5 SuperManager- Anotador ACB.COM 20082009 El ganador será el equipo con mayor número de puntos (de anotación) acumulados a lo largo de todas las jornadas computadas. También podemos pensar en estrategias mixtas, como por ejemplo intentar ganar el máximo dinero posible durante un periodo de tiempo, y luego invertirlo en los jugadores que más valoración tengan para intentar optar a premios semanales o mensuales de valoración. 2.4.6 SuperManager-Reboteador ACB.COM 20082009 3. IMPLEMENTACIÓN El ganador será el equipo con mayor número de rebotes acumulados a lo largo de todas las jornadas computadas. 3.1 Estructura de clases 2.4.7 SuperManager-Triplista ACB.COM 20082009 La implementación del algoritmo de backtracking para solucionar el problema de satisfacción de restricciones que plante la aplicación de SuperManager ACB se ha realizado en el lenguaje de programación JAVA y consta de las siguientes clases: El ganador será el equipo con mayor número de triples acumulados a lo largo de todas las jornadas computadas. 2.4.8 SuperManager-Asistidor ACB.COM 20082009 - El ganador será el equipo con mayor número de asistencias acumuladas a lo largo de todas las jornadas computadas. SuperManager.java Clase principal del programa, que contiene el main. Primero pide al usuario el presupuesto del equipo (haciendo uso de una instancia de Teclado), y después instancia un Solver, el cual, a partir de un fichero determinado con la lista de jugadores a seleccionar, calcula el mejor equipo posible con dicho presupuesto y lo muestra en pantalla. 2.5 Estrategias a seguir Dado que existen diferentes clasificaciones, los jugadores pueden optar por distintas estrategias 2.5.1 Valoración La estrategia mayoritaria, la principal y más importante del juego y en la cual vamos a centrar nuestro trabajo, es obtener la máxima valoración posible utilizando los recursos de que disponemos. En nuestro caso para llegar a este objetivo lo que haremos será mirar la valoración media que llevan los jugadores hasta la fecha y - Teclado.java Clase auxiliar para leer datos pasados por línea de comandos. En este caso es utilizada únicamente para leer el presupuesto deseado para el equipo, pero puede leer muchos otros tipos de datos. -4- 3.2 Desarrollo del algoritmo - El algoritmo implementado de backtracking se realiza a través de recursión, es decir el método se llama a sí mismo mientras se cumpla una condición, terminando cuando ésta se deja de cumplir. Los parámetros de entrada son el mejor equipo de baloncesto hasta el momento y el siguiente nodo de la lista enlazada (que contiene las características de uno de los jugadores que se pueden comprar). Al principio el método comprueba si ya se ha recorrido toda la lista y si es así quiere decir que el equipo formado actualmente es en realidad el mejor posible y se da por finalizado el algoritmo. CLinkedList.java Clase que implementa una lista enlazada para poder recorrer la lista de jugadores seleccionables. La lista enlazada está definida por el primer nodo de la lista y el tamaño, pudiendo insertar un nuevo nodo al principio de la lista, buscar un nodo por su etiqueta y eliminar un nodo cualquiera de la lista. - CNode.java Clase que define los nodos que forman la lista enlazada. Estos nodos tienen una etiqueta, el objeto que contiene (en este caso cada uno de los jugadores) y una referencia al nodo siguiente de la lista. Por lo tanto una lista enlazada tiene una estructura similar a la siguiente figura: Si no es así se obtiene al siguiente jugador que está en la lista, comprobándose al principio que ese jugador no esté ya en el equipo confeccionado hasta el momento. Si no estaba previamente en el equipo éste se sustituye por el primer jugador de la plantilla y se comprueba si el equipo formado es válido o no, es decir, si satisface las siguientes restricciones: Equipo.java Clase que define un equipo. Se define por el presupuesto del equipo, su valoración (la suma de las valoraciones de sus miembros), su precio (la suma del precio de sus miembros) y un array donde se encuentran los once jugadores de la plantilla. La funcionalidad que ofrece permite intercambiar jugadores, comprobar si el equipo es válido según las condiciones expuestas anteriormente, ordenar el equipo según sus posiciones, imprimirlo por pantalla, duplicarlo o comprobar si determinado jugador está presente en el equipo. - Número de jugadores extracomunitarios < 3 - Número de jugadores seleccionables para la Selección Española > 3 - Número de jugadores en la posición de base = 3 - Número de jugadores en la posición de aleros = 4 - Número de jugadores en la posición de pivots = 4 En cambio si el equipo formado no es válido, el nuevo jugador se sustituye por el segundo jugador del equipo comprobándose nuevamente si satisface las restricciones o no, y así sucesivamente se va sustituyendo con los 11 jugadores que forman la plantilla actual. Si al sustituirse el nuevo jugador de la lista con todos los jugadores del equipo no se forma un equipo válido, se toma el siguiente jugador (nodo) de la lista y se empieza a aplicar otra vez el algoritmo de backtracking. Jugador.java Al final gracias a la recursividad del método se consigue formar un árbol donde se comprueba todas las opciones posibles para formar el equipo con la mejor valoración excepto aquellas ramas que no cumplen con las restricciones expuestas anteriormente, volviendo en tal caso atrás en el árbol tal y como se detalla en la descripción teórica del algoritmo de backtracking. Clase que implementa cada uno de los jugadores seleccionables para pertenecer al equipo con la mejor valoración sin excederse del presupuesto inicial. Los jugadores están definidos por su nombre, valoración, posición en la que juega, precio, si es seleccionable para la selección española y si es extracomunitario. - Precio equipo < Presupuesto total - Una vez comprobado que es válido, se mira si el equipo formado con el nuevo jugador es mejor que el equipo anterior. Para ello se calculan las valoraciones de los dos equipos, quedándose con aquél que tenga mayor puntuación. Una vez que ha sido elegido el mejor equipo el método se llama a sí mismo con el siguiente jugador en la lista. La recursión del algoritmo termina cuando ya no hay más jugadores (nodos) en la lista enlazada. Figura 5: Estructura de una lista enlazada - - A continuación indicamos el diagrama de flujo que sigue el programa, o más concretamente, el método Calcula(Equipo e, CNode nodo): Solver.java Clase que implementa el algoritmo de Backtracking en sí para encontrar el mejor equipo posible a partir de una lista de jugadores (obtenidos de un fichero de texto) con un presupuesto inicial indicado por el usuario. Básicamente consta de dos métodos, uno para obtener del fichero especificado una CLinkedList que contenga a todos los jugadores; y otro para calcular el mejor equipo posible (éste último hace uso de otro método auxiliar recursivo, el verdadero backtracking). -5- Calcula(equipo,nodo) • mejor=equipo nuevo=(Jugador)No do nodo= ultimo ? nodo=next Test primario Primer test, el más básico. Consiste en ejecutar el programa sobre un fichero que simplemente contiene los datos de once jugadores y comprobar si presenta a la salida el equipo completo, ordenado como debe. Testea la funcionalidad más básica. Puede realizarse con los ficheros test.txt o test_2.txt. SI RETURN mejor NO actual=mejor La salida ofrecida por el programa es EQUIPO FINAL: i=0 BASES: SI Salgado,Javier 1107400 15.82 Rubio,Ricky 1116088 15.94 Thomas,Chris 1271455 18.16 1276800 18.24 i ++ i =11? NO ALEROS: Antiguo=mejor[i] Wright,Bracey antiguo =nuevo ? Blanco,Sa·l SI Oleson,Brad Rakocevic,Igor NO NO NO NO 24.72 27.44 Freeland,Joel 800000 13.78 Hervelle,Axel 590870 6.87 Reyes,Felipe 1913540 7.98 28.13 Actual=mejor Precio total: 13883713 Valoracion total: 196.62 SI Actual es mejor? 1920800 Archibald,Robert 788560 Meter nuevo en actual Actual es válido? 1730400 19.54 PIVOTS: SI Nuevo está? 1367800 SI Mejor=actual • Calcula(mejor,nodo.ne xt) Test un jugador Este test es parecido al anterior, pero en el fichero hay 12 jugadores en lugar de 11. El jugador extra es mejor en su posición que cualquiera de los otros once, de modo que se pretende comprobar si el equipo es optimizado, es decir, si se quita al peor jugador para incluir al extra. Por tanto, lo que en realidad probamos es si el algoritmo avanza por la lista como debería y compara los jugadores iniciales del equipo con el nuevo. Para realizarlo, hay que pasarle al programa el fichero test_3.txt. El resultado es que el peor pívot del equipo inicial es sustituido por el último jugador de la lista (a la sazón un pívot, por supuesto). Lo que obtenemos en este caso es Figura 6: Diagrama de flujo del algoritmo 3.3 Test realizados Para probar el programa, se han realizado diversos test, empezando por probar las funcionalidades más básicas hasta hacer una prueba completa, con todos los jugadores posibles. Debe indicarse que el presupuesto con el que se cuenta a la hora de realizar las pruebas es superior al necesario para que el programa pueda calcular todas las opciones posibles, sin restringirse por esa causa. -6- EQUIPO FINAL: Andrade,Carlos 68696 -0.18 BASES: Fernßndez,Marc 92220 4.66 Fernandez,Jorge 80978 1.16 Avdalovic,Vule 101170 0.98 Nocedal,MatÝas 102346 TomÓs,Pere 107463 PIVOTS: 1.46 Vßzquez,Fran ALEROS: Eslava,Ariel 1239000 Rey,Xavier 80801 50494 -0.33 Andrade,Carlos 68696 -0.18 Fernßndez,Marc 92220 4.66 TomÓs,Pere 107463 Pietrus,Florent 1.64 17.7 0.6 120909 Hamilton,Venson 123667 1.73 1.77 Precio total: 5228527 PIVOTS: Valoracion total: 75.96 Vßzquez,Fran 1239000 Rey,Xavier 80801 Pietrus,Florent 1.64 17.7 • 0.6 120909 Hamilton,Venson 123667 1.73 Test once jugadores Esta prueba es ya prácticamente una versión restringida del problema completo. En el fichero que se pasa hay 22 jugadores: los once peores y los once mejores de la competición. El equipo inicial consta de los once peores, y una vez aplicado el algoritmo, a la salida obtenemos un equipo totalmente distinto con los once mejores en él (el presupuesto debe ser suficiente, como se ha dicho en el principio de la sección).Para realizar este test hay que pasar el fichero test_1.txt, obteniendo lo siguiente: 1.77 Precio total: 2167744 Valoracion total: 31.19 EQUIPO FINAL: • BASES: Test tres jugadores Continuación del test anterior, aumenta la complejidad al introducir en el programa un fichero que contiene datos de 14 jugadores. Los once primeros, que conforman el once inicial, son jugadores con bajas valoraciones, y deben ser sustituidos por los tres últimos, los cuales son de los mejores cada uno en su posición (cada jugador juega en una de las tres posiciones diferentes). Así pues, comprobamos con este test que el algoritmo se ejecuta correctamente siguiendo la lista, introduciendo cada jugador en el lugar que le corresponde. El test se ejecuta con el fichero test_4.txt, y el resultado es que el peor jugador de cada posición es efectivamente sustituido por cada uno de los mejores. Thomas,Chris 1271455 18.16 Rubio,Ricky 1116088 15.94 Salgado,Javier 1107400 15.82 1920800 27.44 ALEROS: Rakocevic,Igor Oleson,Brad Blanco,Sa·l Wright,Bracey 1730400 1367800 1276800 24.72 19.54 18.24 PIVOTS: Esto se observa en la siguiente salida del programa Reyes,Felipe 1943200 27.76 EQUIPO FINAL: Splitter,Tiago 1619430 23.37 BASES: Vßzquez,Fran 1239000 17.7 Banic,Marko 1132600 16.18 Thomas,Chris 1271455 18.16 Avdalovic,Vule 101170 0.98 Nocedal,MatÝas 102346 1.46 ALEROS: Rakocevic,Igor Precio total: 15724973 1920800 27.44 Valoracion total: 224.87 -7- • Prueba final Ejemplo: El último paso ha sido ejecutar el programa pasándole la lista de jugadores al completo, cuyos datos son obtenidos a partir del fichero jugadores.txt. Reyes,Felipe En función del presupuesto que se le indique, obtiene un resultado u otro. Por ejemplo, para 7 millones, tenemos p 27,76 1.943.200 true false EQUIPO FINAL: BASES: Thomas,Chris 1271455 4. POSIBLES MEJORAS 18.16 Rubio,Ricky 1116088 15.94 Salgado,Javier 1107400 15.82 4.1 Actualizable Una de las mejoras más inmediatas que podemos realizar en el programa es que actualice periódicamente la lista con los valores de todos los jugadores de forma automática. Ahora mismo tenemos que pasarle la lista de forma manual y con un formato específico, lo ideal sería que el programa se conectara a la página web en la cual actualizan las estadísticas y directamente adquirir los datos leyendo el formato html de la web. Además de esta manera podríamos ir acumulando las estadísticas para futuros estudios. ALEROS: Rakocevic,Igor 1920800 Andrade,Carlos 68696 -0.18 Fernßndez,Marc 92220 4.66 TomÓs,Pere 107463 27.44 1.64 PIVOTS: Reyes,Felipe 1943200 Rey,Xavier 80801 Pietrus,Florent 4.2 Ampliar opciones 0.6 120909 Hamilton,Venson 27.76 123667 Otro aspecto que podríamos mejorar en el programa sería añadir más opciones para poder formar equipos cuyo objetivo sea distinto a obtener la mejor valoración. Vimos anteriormente que existen distintos premios en el juego, para las distintas clasificaciones, esto podríamos aplicarlo al programa dando a elegir al usuario para que tipo de equipo quiere obtener la mejor combinación. En el caso de elegir un equipo anotador, reboteador, triplista o asistente, simplemente cambiaríamos el dato de la valoración media usado en nuestro algoritmo por el valor de anotación media, media de rebotes por partido, etc. 1.73 1.77 Precio total: 7952699 Valoracion total: 115.34 En el caso de querer tener equipos que nos permitan ganar dinero, deberíamos analizar los datos proporcionados de las anteriores jornadas y calcular aquellos jugadores que necesitan menos puntos para ganar más dinero, una vez tengamos esta relación volveremos a aplicar el algoritmo de backtracking. 3.4 Formato del fichero a utilizar El fichero que se la pasa al programa ha de tener un formato específico o no podrá ser leído correctamente, dando lugar a excepciones o datos incorrectos. El formato correcto es el siguiente: 4.3 Minería de datos Por último, existiría una mejora de mayor nivel, que sería aplicar minería de datos a todas las estadísticas obtenidas durante todas las jornadas e incluso durante varias temporadas, de todos los jugadores que se puedan seleccionar en el juego. Primera línea: nombre del jugador Segunda: valoración media (número con coma) Tercera: precio (número de 5, 6 o 7 cifras, separadas por puntos) De esta manera podremos realizar una predicción de la valoración que puede obtener nuestro equipo sin sólo fijarse en la media de las valoraciones. Se podría valorar si el jugador está en un buen momento de forma fijándonos en los últimos partidos jugados, o si en otros encuentros con el mismo equipo el jugador ha jugado bien o mal. También podríamos tener en cuenta las probabilidades de victoria del equipo de cada jugador, pues si el equipo gana suele haber más probabilidades de que los jugadores hayan hecho un buen partido, además que con la victoria aumenta un 20% la puntuación de cada uno. Cuarta: carácter que indica la posición: b para base, a para alero, p para pívot. Quinta: ‘true’ o ‘false’, según el jugador sea o no seleccionable. Sexta: ‘true’ o ‘false’, según el jugador sea o no extracomunitario. Séptima: línea en blanco de separación. Los datos de todos los jugadores tienen que ser escritos según este formato. -8- En este estudio también se puede tener en cuenta si los partidos se jugarán dentro o fuera de casa, si hay alguna baja en el equipo y como ha afectado esta baja en otros partidos al rendimiento de los demás. Si durante la semana han jugado más partidos o tienen tiempo de descansar. Analizar la situación en la clasificación de ambos equipos y ver si influye en la motivación de los jugadores y por tanto después en su rendimiento en la cancha. Y todo tipo de datos que se puedan analizar y creamos que puedan tener relevancia en los resultados cosechados. 6. REFERENCIAS [1] ACM Inc. ACM SIG Proceedings Templates http://www.acm.org/sigs/pubs/proceed/template.html [2] ACM Inc. ACM Computing Classification System [V.1998] http://www.acm.org/class/1998/ [3] Villena, J. Apuntes de la asignatura Inteligencia de Redes de Comunicaciones (5º Curso de Ingeniería de Telecomunicación). 5. CONCLUSIONES [4] Miguel A. Salido, Adriana Giret, Federico Barber, “Problema de satisfacción de restricciones temporales”. http://www.dsic.upv.es/~msalido/papers/tarrat01.pdf Se ha probado el programa en diferentes escenarios obteniendo los resultados deseados. Siempre que se pasa un número pequeño de jugadores o un presupuesto razonablemente bajo obtiene las combinaciones óptimas con velocidad. Sin embargo, como era de esperar, si aumentamos tanto el número de jugadores posibles como el presupuesto disponible el algoritmo cada vez tarda más tiempo en encontrar la mejor solución. Por ejemplo si pasamos la lista completa de jugadores con un presupuesto de 7 millones (algo mayor al inicial) obtenemos la respuesta casi al instante, pero si vamos aumentando el presupuesto a 8,9,10 millones, tarda varios minutos en obtener la solución puesto que las combinaciones de jugadores aumentan drásticamente. Una posible solución que hemos planteado para reducir estos tiempos es quedarnos con una solución que no sea la mejor (subóptima), pero como no sabemos cuál es nuestro objetivo haremos esto obteniendo un máximo local. Esto quiere decir que iremos adquiriendo y contabilizando varios resultados hasta que obtengamos un valor en el que haciendo cambios siempre alcancemos una puntuación menor, con la condición de que el resto de puntuaciones que resultan en un rango más o menos amplio a partir de ese valor también son menores. En tales casos, admitiremos este resultado como una solución al problema, en principio subóptima, pero que podría también ser la solución óptima del problema. [5] Algorítmica de Backtracking http://www.dis.um.es/~ginesgm/temas/tema6-2/sld001.htm [6] Algoritmo Forward-Checking http://www.estumomento.net/otros/jignacio/2007/01/13/algor itmo-forward-checking/ [7] Guevara Díaz, J.L. Problemas de satisfacción de restricciones http://jorge.sistemasyservidores.com/si_2008i/clases/problem asdesatisfaccionderestricciones.pdf [8] Web oficial de la liga ACB http://www.acb.com/ [9] Web oficial del juego SuperManager ACB.com http://supermanager.acb.com [10] Estadísticas detalladas SuperManager http://www.supermanageracb.net/ Concluimos así mismo que el algoritmo utilizado resuelve el problema de satisfacción de restricciones de manera correcta, puesto que obtenemos la mejor solución aplicando nuestro algoritmo. [11] Más estadísticas SuperManager http://www.rincondelmanager.com/smgr/ -9-