Pianificazione gare di trail running
Closed this issue · 1 comments
Studente proponente
s257971 Gaudino Ivan
Titolo della proposta
Pianificazione gare di trail running
Descrizione del problema proposto
Ogni anno si svolgono gare di trail running (corsa su sentieri in ambiente naturale) in molti paesi del mondo e la maggior parte di esse, soprattutto quelle più conosciute, richiede l'iscrizione con parecchi mesi di anticipo, poiché il numero di partecipanti è spesso limitato. Oltre che iscriversi, gli atleti che intendono partecipare ad una gara vogliono anche arrivarci preparati fisicamente e mentalmente per ottenere il miglior risultato possibile. Questo richiede una preparazione, con allenamenti costanti, che l'atleta vuole programmare con sufficiente anticipo.
Si vuole offrire all'atleta un'applicazione in grado di pianificare le gare a cui vuole/può partecipare, sulla base di filtri e preferenze indicate dall'atleta stesso.
Descrizione della rilevanza gestionale del problema
Per un atleta appassionato di trail running che vuole partecipare a più gare durante l'anno, può essere certamente utile poter sfruttare un'applicazione che crei una programmazione personalizzata delle gare, basata su filtri e preferenze selezionati dall'atleta stesso. Grazie a ciò, l'atleta può procedere ad iscriversi alle gare di interesse con congruo anticipo, evitando di trovare chiuse le iscrizioni poiché raggiunto il numero massimo di corridori, e può inoltre pianificare con cura gli allenamenti, la dieta e tutto quello che ritiene necessario per arrivare preparato alla gara, evitando in questo caso infortuni o scarsi risultati.
Descrizione dei data-set per la valutazione
Il dataset utilizzato è reperibile sulla piattaforma Kaggle al seguente indirizzo https://www.kaggle.com/datasets/mgpoirot/utmb-world-race-daa.
La tabella include dettagli e risultati di più di 38.000 gare di trail running svolte dal 2014 al 2024.
Non tutte le colonne saranno rilevanti al fine del funzionamento dell'applicazione; di seguito vengono riportati i campi di interesse con relativa descrizione:
Campo | Variabile | Descrizione |
---|---|---|
Race UID | INT | Codice univoco della gara |
Year | INT | Anno |
Day | INT | Giorno, numero intero a partire dal 1 Gennaio |
Race Title | VARCHAR | Nome della gara |
N Participants | INT | Numero di partecipanti |
Race Category | VARCHAR | Categoria della gara (20K, 50K, 100K, 100M) |
Distance | DOUBLE | Lunghezza della gara, in kilometri |
Elevation Gain | INT | Dislivello positivo della gara |
Mean Finish Time | DOUBLE | Tempo medio in ore dei partecipanti che hanno concluso la gara |
Winning Time | DOUBLE | Tempo in ore del vincitore |
Last Time | DOUBLE | Tempo in ore dell'ultimo classificato |
N DNF | INT | Numero di partecipanti ritirati dalla gara |
N Women | INT | Numero di partecipanti donne |
Raw Location | VARCHAR | Città/Paese in cui si svolge la gara |
Continent | VARCHAR | Sigla del continente |
Country | VARCHAR | Sigla della nazione |
Descrizione preliminare degli algoritmi coinvolti
L'applicazione prevede il calcolo di una lista di gare, tra quelle presenti nel dataset, mediante un algoritmo ricorsivo che lavora sulla base dei filtri inseriti dall'utente. Ogni filtro mira a rendere la soluzione finale la più appropriata possibile alle preferenze dell'utente, nonché a ridurre la complessità computazionale dell'algoritmo date le dimensioni del dataset.
Tra i filtri, l'utente può scegliere la sua categoria di gara preferita, i continenti e le nazioni che è in grado di raggiungere per disputare le gare, i mesi in cui non può/vuole partecipare a nessuna gara, una gara a cui vuole assolutamente partecipare, il numero massimo di gare che intende correre durante l'anno, il massimo dei kilometri che può avere una gara.
Inoltre, l'utente è tenuto ad indicare il suo livello di abilità (principiante, intermedio, esperto) o accedere, tramite un bottone, ad una finestra che calcola il livello sulla base dei risultati ottenuti dall'atleta in gare disputate in passato, sfruttando i dati Mean Finish Time, Winning Time e Last Time presenti nel dataset. Il livello di abilità è utile al fine di imporre alcuni vincoli sulle categorie di gare che l'atleta può correre e sul numero minimo di giorni che deve intercorrere tra una gara e la successiva.
Infine, l'utente deve anche selezionare l'anno (dal 2014 al 2024) a cui vuole fare riferimento per la pianificazione delle gare, soprattutto per motivi legati alla costruzione del dataset: non tutte le gare vengono svolte ogni anno e per una stessa gara (stesso Race UID), al variare dell'anno, vi sono più campi discordanti quali il giorno, il numero di partecipanti, i risultati e il nome stesso, che nel dataset spesso include anche l'anno di riferimento o comunque differisce di anno in anno, per cui risulterebbe inappropriato raggruppare le gare secondo il loro codice univoco Race UID.
Oltre ai filtri, l'utente deve scegliere l'obiettivo che intende dare all'algoritmo per il calcolo della soluzione: massimizzare il numero di gare a cui partecipare, oppure massimizzare i kilometri totali, oppure ancora massimizzare il numero di nazioni in cui correre le gare. A seconda dell'obiettivo scelto, l'algoritmo proporrà all'utente una soluzione ottimale costituita da una lista di gare riportante, per ognuna, la data in cui si terrà, il luogo, il nome, i kilometri da percorrere e il dislivello.
Descrizione preliminare delle funzionalità previste per l’applicazione software
La schermata principale dell'applicazione è volta alla definizione dei criteri per il calcolo della pianificazione personalizzata delle gare. A tale scopo, l'utente specifica le proprie preferenze mediante i seguenti filtri:
- livello di abilità: principiante, intermedio, esperto. La scelta del livello impone alcuni vincoli "preimpostati", quali le categorie di gare che l'atleta può correre, un limite sul numero di gare di una certa categoria e il numero minimo di giorni "di riposo" dopo una gara a seconda della categoria di questa;
- categoria preferita: 20K, 50K, 100K e 100M. La soluzione sarà composta per almeno il 50% da gare della categoria scelta;
- anno: anno a cui far riferimento per il calcolo della soluzione, dal 2014 al 2024;
- continenti: la soluzione includerà gare che si svolgono nei continenti selezionati;
- nazioni: la soluzione includerà gare che si svolgono nelle nazioni selezionate;
- mesi da escludere: le gare che si svolgono nei mesi selezionati saranno escluse;
- gara preferita: le gare visualizzate saranno compatibili con le scelte sui filtri precedenti. La gara selezionata farà sicuramente parte della soluzione;
- numero massimo di gare: se impostato, la soluzione sarà formata al massimo da questo numero di gare;
- kilometri massimi per gara: se impostato, le gare facenti parte della soluzione non supereranno questo limite.
A supporto dell'utente, l'applicazione prevede la presenza di una schermata secondaria per il calcolo del livello di abilità. Se l'utente vuole che sia l'applicazione a determinare il suo livello di abilità, accede ad una schermata dedicata dove, inserendo le gare da lui disputate in passato e il tempo ottenuto per ogni gara, l'applicazione farà riferimento ai dati Mean Finish Time, Winning Time e Last Time presenti nel dataset per quelle gare per stabilire il livello dell'utente.
Tornando alla schermata principale, l'utente procede scegliendo l'obiettivo per il calcolo della pianificazione delle gare, tra le seguenti opzioni: massimizzare il numero di gare a cui partecipare, massimizzare i kilometri totali, massimizzare il numero di nazioni in cui correre le gare. L'applicazione mostrerà la soluzione come elenco di gare con relativi dettagli.
Ecco la tua repo: https://github.com/TdP-prove-finali/GaudinoIvan