Pasado mañana se juega El Clásico, y desde Míster Fantasy, en colaboración con Sofascore, nos proponen un desafío: ¿Eres capaz de hacer el mejor equipo con un presupuesto de 100 millones?
Míster Fantasy es un juego de estrategia donde puedes gestionar tu propio equipo de fútbol. Cada uno de tus jugadores ganará puntos en función de su actuación en los partidos reales, y para hacerte con ellos tendrás que pagar un precio que oscila en función de su demanda.
En este caso, tenemos un presupuesto de 100 millones para hacernos con el once más competitivo posible, formado por los jugadores del Barcelona y del Real Madrid. Además, disponemos de la lista de las puntuaciones de cada jugador en los partidos de La Liga, así como su promedio, los partidos que no jugaron y su precio actual.
Obviamente lo que nos gustaría es poner en plantilla a las grandes estrellas de ambos equipos, pero por lo general cuanto mejor es un jugador, mayor es su precio, así que el quid de la cuestión se halla en encontrar el balance adecuado entre el precio y puntuación esperada de cada jugador. ¿Será mejor fichar a las estrellas y luego “rellenar” con los jugadores más baratos? ¿O elegir a los jugadores que mejor relación promedio/precio tengan? Si eres capaz de encontrar un criterio “a ojo” para alinear un once competitivo, ¡cuéntanoslo en los comentarios!
Pero, ¿se puede resolver matemáticamente?
Se trata de un problema de optimización: el objetivo es maximizar la puntuación total esperada, pero hay que satisfacer varias restricciones: que el precio total del equipo no supere nuestro presupuesto, que solo tengamos un portero…
Este problema es una reformulación del famoso problema de la mochila: Imagina que eres un ladrón que entra en una casa a robar. Llevas una mochila para cargar con todo tu botín pero esta puede soportar un peso máximo determinado. La casa está llena de objetos, cada uno con un valor y un peso determinados. Tu objetivo es maximizar el valor total de los objetos sin sobrepasar el límite de peso de tu mochila.
Este es uno de los 21 problemas NP-completos de Richard Karp y tradicionalmente se ha resuelto utilizando la programación lineal, porque tanto el objetivo como las restricciones pueden ser expresadas mediante un conjunto de ecuaciones lineales.
¿Cómo elegir el mejor equipo para el Barcelona-Madrid?
Lo primero es hacer una tabla de los jugadores, sus posiciones, sus precios y sus promedios. Del total de jugadores, hemos descartado a aquellos que jugaron menos de 2 partidos de entre los 3 últimos en sus respectivos equipos en La Liga. De los restantes, a aquellos que solo jugaron 2 partidos, les hemos aplicado una penalización del -33% en su promedio.
Ahora, tenemos una lista de 30 jugadores posibles. Si Pn es la puntuación promedio del jugador n-ésimo de la lista, y Jn es una variable que es igual a 1 si escogemos a dicho jugador para nuestro equipo, y que es igual a 0 si no lo escogemos, el objetivo del problema será maximizar una función Z que describa la puntuación total esperada del equipo:

Además, tendremos una serie de restricciones. Por ejemplo, en nuestro equipo no puede haber más de once jugadores:

O, si llamamos Gkn a una variable que es igual a 1 si el jugador n-ésimo es un portero y es igual a 0 si no lo es, podemos expresar la restricción de que nuestro equipo solo tenga un guardameta de la siguiente manera:

Hacemos lo mismo con el resto de las posiciones, fijando, por ejemplo, una alineación 4-3-3.
Solo nos queda por definir el límite de presupuesto, que se puede expresar como:

Para quitarnos la desigualdad, definimos una variable S (slack variable) que sea igual al dinero sobrante:

Y ahora sí, tenemos planteado nuestro problema de optimización:

Dado que tenemos que elegir la solución óptima de entre todas las posibles, el sistema formado por todas estas ecuaciones debería ser compatible pero indeterminado, y así es, dado que tenemos 32 variables (los 30 jugadores Jn, el presupuesto sobrante S y el resultado esperado Z) y solo 7 ecuaciones. El espacio de soluciones factibles forma un politopo de 32 dimensiones.
Dicho sistema puede ser expresado como:

Con la particularidad de que la mayoría de nuestras variables (Jn) son binarias. Esto convierte el problema en un caso especialmente difícil de resolver (mixed binary integer lineal programming) que nos obliga a resolverlo programáticamente.
Utilizando la librería PuLP en Python, logramos el resultado que maximiza la puntuación para la alineación 4-3-3:

Es decir: Ter Stegen en la portería; Dest, Piqué, Alaba y Nacho Fernández en la defensa; Marco Asensio, Camavinga y Coutinho en el centro del campo; y Depay, Benzemá y Ansu Fati en el ataque. Con un precio de 99,2 millones y una puntuación esperada de 68 puntos.

Además, repetimos el cálculo para cada alineación del juego, resultando ser la 4-2-4 la más competitiva (igual que la 4-3-3 pero cambiando a Alaba y Camavinga por Vinicius y Mingueza), con un resultado esperado de 70,6 puntos y un coste de 97,3 millones.
Nosotros usaremos la 4-3-3, que es la más competitiva de entre las gratuitas, y subiremos aquí mismo el resultado.
¿Quieres saber qué relación guarda la alineación óptima del clásico con uno de los problemas del milenio? ¡Hay un millón de euros en juego! Próximamente en un futuro post.