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-