TdP-prove-finali / Introduzione

Istruzioni e documentazione per la proposta e lo svolgimento delle prove finali relative al corso di Tecniche di Programmazione.
http://bit.ly/tecn-progr
Apache License 2.0
4 stars 13 forks source link

Applicazione Java per il calcolo di un itinerario Interrail #83

Closed filippoCaste closed 2 years ago

filippoCaste commented 2 years ago

Studente proponente

s270867 Castellarin Filippo

Titolo della proposta

Applicazione Java per il calcolo di un itinerario Interrail

Descrizione del problema proposto

L'applicazione si propone di calcolare un itinerario percorribile in treno attraverso le stazioni delle città europee. Per fare ciò, è necessario l'inserimento da parte dell'utente dei propri interessi turistici, inteso come le proprie preferenze in termini di attività da svolgere durante un viaggio, da quale città desidera partire, e il numero di 'giorni di viaggio' del biglietto Interrail da lui acquistato.

Per la definizione di 'giorni di viaggio' vedasi fondo pagina.

Descrizione della rilevanza gestionale del problema

L'algoritmo tratta il calcolo di un itinerario turistico ottimale a partire dall'inserimento di semplici preferenze turistiche da parte del fruitore dell'applicazione. Per questo motivo, tale applicazione potrebbe risultare appropriata per tour operator e agenzie viaggi che si occupano nella definizione di itinerari turistici da vendere ai propri clienti.
Inoltre, l'applicazione in questione, potrebbe risultare utile anche ai fini del progetto Interrail stesso, in quanto potrebbe suggerire già in partenza un itinerario a coloro i quali sono interessati a viaggi di questo stile (che però sono indecisi sui luoghi da visitare), e quindi permettere una maggior diffusione del progetto Interrail tra i cittadini europei.

Descrizione dei data-set per la valutazione

Le principali fonti di reperimento delle informazioni sono:

Al momento i database più affini sono:

Nota: per quanto riguarda il database sulle città europee, è abbastanza carente in termini di contenuti turistici (considera soltanto numero di visite musei, cinema, biblioteche e teatri), pertanto sto cercandone di più completi.

Descrizione preliminare degli algoritmi coinvolti

Opzione 1:
Come primo passo, tramite un algoritmo ricorsivo l'applicazione calcola quali sono le città più affini agli interessi turistici del fruitore dell'applicazione tramite un processo di massimizzazione attribuendo ai vari indicatori un ordine decrescente (in questo caso all'utente sarebbe richiesto ordinare i criteri turistici). Questo primo passo, restituisce una lista (di dimensione massima pari (o pari al doppio) al numero di giorni di viaggio Interrail) di città ordinate in base agli interessi espressi.
Successivamente, poiché il dataset che concerne le città europee contiene indicazioni circa la posizione geografica della città, potrebbe essere creato un grafo dove il peso degli archi corrisponde alla distanza calcolata tra le due città usando le informazioni di latitudine e longitudine.
L'obiettivo è quindi massimizzare il numero di vertici (città selezionate in base alle preferenze turistiche espresse) attraversate con la minor distanza percorsa e verificando sia sempre minore del numero di giorni di viaggio Interrail (è qui necessario supporre che in un 'giorno di viaggio' Interrail possono essere percorsi TOT numero di km poiché il database non contiene informazioni riguardo le connessioni ferroviarie tra le varie città fatta salva l'ipotesi di trovarne uno più completo).

Nota: Questo punto potrebbe essere altresì svolto tramite algoritmo ricorsivo nel quale si va a minimizzare la distanza di percorrenza tra le città.

Opzione 2:
Se possibile, eseguire concettualmente lo stesso algoritmo di sopra ristretto a un singolo stato europeo nel quale le informazioni riguardo interconnessioni ferroviarie (con durata di percorrenza delle singole tratte) e dati derivanti dal turismo nelle varie città, siano presenti in maniera più accurata.

Nota: Interrail offre anche la possibilità di fare un viaggio Interrail all'interno di uno stesso paese. Clicca qui per maggiori informazioni riguardo le offerte di viaggio Interrail.

Descrizione preliminare delle funzionalità previste per l’applicazione software

All'avvio dell'applicazione, l'utente si troverà una serie di campi a scelta (ComboBox) che è tenuto a completare per procedere al calcolo dell'itinerario.
In particolare dovrà scegliere:

  1. Quali sono i suoi interessi turistici in base a quelli contenuti nella ComboBox (in base al database, ed eventualmente ordinarli in base alle proprie preferenze);
  2. Quale è la città di origine (ed eventualmente una di destinazione);
  3. Quanti giorni di viaggio Interrail possiede il suo biglietto.

Dopodiché, vi sarà un Button 'Calcola itinerario' che non appena premuto, avvierà gli algoritmi di cui al punto precedente per il calcolo del percorso migliore in base alle preferenze selezionate dall'utente tramite interfaccia grafica.


Giorno di viaggio Interrail, dal sito ufficiale Interrail:
Un giorno di viaggio equivale a un periodo di 24 ore in cui puoi viaggiare in treno con il tuo Interrail Pass e va dalle 00:00 (mezzanotte) alle 23:59 dello stesso giorno di calendario. In ciascun giorno di viaggio puoi accedere alle reti ferroviarie di validità del tuo Interrail Pass.


filippoCaste commented 2 years ago

Aggiornamento 28 maggio:

Database

Il database concernente le città tratto dal sito di eurostat è stato aggiornato e sono presenti alcuni indicatori in più, per cui dovrebbe risultare sufficiente per l'obiettivo dell'applicazione java in questione.

Ciò implica che è possibile procedere con il calcolo dell'itinerario a livello internazionale, entro i confini europei, senza la necessità di restringersi a un solo paese.

Algoritmo

Per quanto riguarda la parte algoritmica, in particolare per il calcolo della distanza tra le varie città, mi avvarrei della libreria LatLng (vista anche a lezione), tenendo viva, se d'accordo, l'ipotesi riguardo il poter percorrere TOT km all'interno di un giorno di viaggio. Per calcolare il percorso, prevedo la costruzione di un grafo nel quale i vertici sono le città potenzialmente interessanti per il fruitore (calcolate al passo 1 con previo inserimento degli interessi da parte dell'utente), e il peso tra di esse è la distanza calcolata come specificato.

fulcorno commented 2 years ago

La proposta mi pare adeguata e rilevante. Direi di concentrarsi sul percorso europeo (e tralasciare quello nazionale). Riguardo all'algoritmo, mi sembra controproducente selezionare PRIMA un set di città e poi selezionare un percorso breve tra di esse, quindi cercare di affrontare il problema in un'unica passata di ottimizzazione. Con queste precisazioni, la proposta è approvata.