TdP-prove-finali/Introduzione

Proposta prova finale Matteo Busnelli s273820

Closed this issue · 5 comments

Studente proponente

S273820 Matteo Busnelli

Titolo della proposta

Simulazione Superlega

Descrizione del problema proposto

Vorrei elaborare un’applicazione che permetta all’utente di scegliere una delle 12 squadre facenti parte alla superlega, e di “crearsi” la rosa di giocatori da lui preferita, nel rispetto dei vincoli di :

  • Numero minimo di giocatori per ruolo
  • Stipendi totali non superiori al salary cap
    L’utente, per poter effettuare al meglio la sua scelta, potrà accedere a tutte le statistiche/informazioni di ogni giocatore.
    Una volta composta la squadra, potrà simulare l’intero campionato e vedere in che posizione si è classificata la sua squadra, in base ai giocatori scelti, i loro valori di attacco/difesa, tenendo anche conto della probabilità di infortuni e altre casistiche.
    Le altre squadre, non scelte dall’utente, verranno composte di giocatori, in maniera casuale, nel rispetto dei vincoli imposti. Alla fine, si otterrà la squadra vincitrice.

Descrizione della rilevanza gestionale del problema

Si tratta di un problema di rilevanza gestionale in quanto l’utente deve immedesimarsi nel ruolo di manager di una squadra di calcio, gestendo al meglio gli stipendi dei giocatori da inserire in rosa, per vincere il campionato.
Il progetto della superlega è un tema estremamente discusso negli ultimi mesi. Si tratta di un nuovo modello di calcio, non entrato ancora in vigore, che si rifà al modello americano dell’NBA. Infatti, cambia radicalmente la visione della squadra, in quanto viene vista come una vera e propria franchigia, all’interno di un mercato internazionale. Si tratta di un progetto molto promettente, in quanto il moderno calcio europeo, soprattutto dopo la crisi economica subita durante la pandemia e tutt’ora in atto anche a causa della guerra, ha bisogno di una nuova scossa e un nuovo ridimensionamento; infatti, sono sempre di più le società indebitate (vedi ad esempio il Barcellona) che vedono anche nell’aspetto sportivo, grosse ripercussioni. L’attuale calcio europeo non porta più grossi introiti, si tratta oramai di un dato di fatto, la UEFA Champions League sta perdendo sempre di più l’interesse e il fascino che l’ha sempre contraddistinta, sicuramente anche per l’accesso a tale competizione di un numero sempre maggiore di squadre sconosciute, che dal punto di vista economico, non portano alcun interesse.
Quindi, l’idea della superlega è quello di permettere l’accesso ad un numero limitato di squadre, si parla dei top club europei, al fine di garantire un grande interesse collettivo ad ogni partita, il quale porterebbe a grandi vantaggi economici.

Una delle idee principali della superlega è l’introduzione di un salary cap, in cui il costo di ingaggi, impostato di anno in anno, non può essere superato. L’idea è quindi di creare un campionato (una nuova Champions league) con le migliori squadre europee che non possono spendere più di una certa cifra in ingaggi, al fine di garantire, almeno sulla carta, un certo equilibrio di partenza tra tutti i partecipanti.

Nulla è ancora certo riguardo all’entrata in vigore della superlega, ma ciò che è sicuro è che il mondo del calcio ho bisogno di un ridimensionamento, e qualche provvedimento in questa direzione, sicuramente verrà preso.

Descrizione dei data-set per la valutazione

Statistiche e stipendio giocatori:
https://www.kaggle.com/stefanoleone992/fifa-22-complete-player-dataset
In questo dataset, gli stipendi dei giocatori sono netti e calcolati su base settimanale. Io li convertirò su una base annuale di 10 mesi e lordi.
Squadre:
Creo io un dataset semplicissimo contenente le 12 squadre e qualche informazione su di esse.

Descrizione preliminare degli algoritmi coinvolti

Salvare le scelte dell’utente riguardo ai giocatori in apposite strutture dati.
Gestire e manipolare tali strutture dati per il controllo dei vincoli imposti.
Assegnazione casuale per riempire le altre undici squadre non scelte dall’utente.
Una volta riempite tutte le strutture dati, simulazione ad eventi in cui si simula l’intero campionato in modalità play-off.

Descrizione preliminare delle funzionalità previste per l’applicazione software

L’utente potrà impostare, scegliendo tra una serie di valori, il salary cap e, basandosi su tale valore, scegliere la squadra che vuole comporre nel rispetto di tutti i vincoli. Per scegliere i giocatori, potrà valersi di tutte le statistiche necessarie, ossia in base a valori ipotetici assegnati al singolo giocatore da parte degli sviluppatori di fifa, i quali dovrebbero rispettare le reali capacità del giocatore in questione. Una volta composta la squadra, l’utente potrà simulare l’intero campionato per vedere il posizionamento in classifica della squadra da lui composta.

Il tema proposto è certamente rilevante ed anche decisamente attuale (polemiche a parte).
Dal punto di vista algoritmico, mi pare che sia forse un po' troppo semplice (se ho ben capito la proposta). La scelta delle squadre viene fatta manualmente dall'utente oppure casualmente per le altre, e la simulazione del campionato, mi sembra un po' un'estrazione di valori casuali (uno per partita) sulla base di coefficienti noti.
Se si riuscisse a rendere più interessante la parte algoritmica, sarebbe una proposta accettabile.

Stavo pensando di rendere più interessante la parte iniziale, ossia quella di scelta dei giocatori nella squadra. L’obiettivo è quello di crearsi una squadra il più ottimizzata possibile che permetta quindi di scegliere i giocatori migliori e più adatti alla squadra che si sta creando.
La squadra è un grafo di 11 vertici che corrispondono ai giocatori (il modulo può variare in base alla scelta dell’utente), ogni vertice è collegato con i suoi vicini e il peso dell’arco è dato dall’intesa reciproca tra i due giocatori. L’intesa è calcolata in base a se i due giocatori in questione sono della stessa nazionalità, se giocano nello stesso campionato o nella stessa squadra. Il valore di intesa è compreso tra 0 e 3 (0 se non è rispettata nessuna delle tre condizioni, 1 se è rispettata solo una, e così via). L’utente non è vincolato a un minimo valore, può comporsi la squadra liberamente, sarà il programma stesso ad indicare l’attuale stato, il quale, a valori crescenti, garantirà una probabilità crescente di vittoria; infatti, l’intesa totale sarà un parametro influente all’interno della simulazione.
Inoltre, un ulteriore possibilità per crearsi la squadra migliore sta nello scegliere i giocatori migliori (con overall più alto e stipendio più basso per garantirsi un buon giocatore che non vada ad impattare eccessivamente sul monte ingaggi) quindi, in base a valori crescenti di questo rapporto, il giocatore sarà "migliore" di un altro e di conseguenza permetterà di crearsi una squadra più vincente. L'utente in fase di scelta dei giocatori, potrà effettuare delle ricerche specifiche in base ai parametri a cui è interessato, potrà farsi suggerire dal programma stesso il giocatore consigliato da inserire in rosa e, se si tentasse di inserire un nuovo giocatore "migliore" rispetto ad un altro già scelto ed è stato raggiunto il limite salariale, quest'ultimo giocatore potrà essere rimosso. Il programma suggerirà quindi allo stesso tempo sia il giocatore migliore da acquistare, sia il giocatore peggiore attualmente presente in rosa che può essere scartato. Il giocatore migliore sarà quindi il giocatore con rapporto overall/stipendio più alto scelto all’interno dei criteri che garantiscano un livello di intesa accettabile (almeno 1).
Nella speranza di aver chiarito i suoi dubbi, la ringrazio in anticipo.

ok sulla parte di selezione dei giocatori e sul rapporto prestazioni/costo.
continuo a non capire bene come si svolgerà la simulazione del campionato

La simulazione si basa sull'analisi e la combinazione di parametri noti, innanzi tutto l'intesa rappresenta un fattore moltiplicativo della probabilità di vittoria. In generale, tutte le statistiche presenti nel dataset di ogni singolo giocatore, contribuiscono al risultato finale, inoltre prevede degli algoritmi di randomizzazione che permettono quindi l'inserimento nella coda degli eventi di possibilità di infortunio, espulsioni, ecc. tali probabilità dipendono sempre dalle statistiche del singolo giocatore (un giocatore che es. 60 di fisico, avrà più probabilità di infortunarsi rispetto ad uno con 90).
Fondamentale è l'equilibrio della squadra nei quattro ruoli principali (portiere, difesa, centrocampo e attacco). Per ogni ruolo di ogni squadra verrà calcolato un valore complessivo dei giocatori in quel ruolo, e confrontato con un valore complessivo del ruolo che si oppone della squadra avversaria (es. SQUADRA A, attacco 80, SQUADRA B difesa 70, nella durata complessiva della simulazione, l'attacco della SQUADRA A prevale sulla difesa della SQUADRA B, si andrà a vedere negli altri ruoli quale delle due squadre prevale e verrà decretato il vincitore). Verranno inoltre mostrate in output all'utente tutte le statistiche della partita.

se ben capisco, gli eventi della simulazione corrispondono a ciò che avviene sul campo durante una partita (goal, infortunio, ammonizione,ecc ecc).
Questo però corrisponde a simulare UNA partita.
Per Simulare il campionato, indendi il fatto di simulare una ad una le partite e contare il punteggio?

Oppure ho capito male, ed il singolo Evento corrisponde alla singola Partita (in cui deciderai in modo stocastico chi ha vinto, tenendo conto di tutti i parametri che hai citato)?

In entrambi i casi la proposta va bene, e quindi è approvata, però nella relazione cerca di descriverla in modo più chiaro.