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

Creazione di un'applicazione per il turismo della regione Puglia #36

Closed vitopalmis closed 4 years ago

vitopalmis commented 4 years ago

Studente proponente

s248020 Vito Palmisano

Titolo della proposta

Creazione di un'applicazione per il turismo della regione Puglia

Descrizione del problema proposto

L'obiettivo prefissato consiste nella creazione di un’applicazione, in grado di garantire all’utente un’esperienza di viaggio sul territorio Pugliese, che soddisfi a pieno le sue esigenze e che rispecchi la tipologia di vacanza desiderata. A tal proposito, all’utente verrebbero proposti degli itinerari sviluppati a partire da alcune sue preferenze: le zone che principalmente vorrebbe visitare, il budget che sarebbe disposto a spendere, la distanza massima che vorrebbe percorrere, il periodo dell'anno ed il numero di giorni a disposizione.

Descrizione della rilevanza gestionale del problema

Dal punto di vista gestionale l'applicazione avrebbe rilevanza per il turismo Pugliese, in quanto consentirebbe all’utente di cercare con una singola applicazione e attraverso pochi e semplici passaggi, sia le attività da svolgere che i luoghi in cui pernottare.

Descrizione dei data-set per la valutazione

Si utilizzeranno più data-set, i quali saranno principalmente di 2 tipologie. Una prima tipologia di data-set conterrà informazioni riguardanti b&b e strutture simili presenti sull'intero territorio Pugliese. Una seconda tipologia di data-set conterrà le informazioni riguardanti: 1) attività turistiche (escursioni, attività sportive, attività di formazione); 2) luoghi di interesse (castelli, parchi, riserve, teatri, chiese, grotte, masserie, trulli); 3) stabilimenti balneari. I vari data-set sono già stati trovati ed analizzati, per quanto possibile, per verificare la correttezza dei dati. Per quanto riguarda la prima tipologia è stato trovato un data-set delle strutture alberghiere e dei b&b che si affidano al portale Airbnb, aggiornato ad Aprile 2020. Questo data-set è fornito gratuitamente dal sito 'insideairbnb.com' e non contiene dati sensibili riguardanti gli host. La seconda tipologia di data-set comprende al momento 3 data-set, uno per ognuna delle tre descrizioni date sopra. Anche questi data-set sono stati trovati su siti che ne forniscono l'utilizzo gratuito ed in tutti i casi l'autore viene identificato come 'Regione Puglia'. E' importante specificare che tutti i data-set contengono le informazioni riguardanti il comune, la latitudine e la longitudine, in cui è situato l'elemento specifico del data-set. Vi è inoltre un ulteriore data-set contente esclusivamente i dati sui singoli comuni, così da poter collegare facilmente fra di loro i data-set descritti precedentemente.

Descrizione preliminare degli algoritmi coinvolti

Il primo passo consiste nel creare un grafo non orientato pesato, i cui vertici saranno i vari comuni della regione ed il peso sarà la distanza fra i comuni. Ovviamente non tutti i comuni saranno collegati, ma solo quelli che risultano avere una distanza massima fra loro, inferiore ad un certo valore (ipotizzabile, in maniera preliminare, attorno ai 20km). Le distanze sarebbero calcolate attraverso l'utilizzo dei dati relativi a latitudine e longitudine presenti in ogni data-set. Il secondo passo consiste, una volta ricevuti i dati di input inseriti dall'utente, nel creare nuovi nodi all'interno del grafo, corrispondenti ai b&b della zona scelta ed alle attività che hanno come tipologia una di quelle scelte dall'utente. Questi nodi saranno connessi al nodo corrispondente al comune in cui il b&b/attività ha sede. Terzo passo sarà quello di eseguire una ricorsione per trovare le migliori combinazioni di attività e b&b rispettanti i dati di input.

Descrizione preliminare delle funzionalità previste per l’applicazione software

L'Utente avrà la possibilità di selezionare, da un apposito menu a tendina, la provincia in cui vorrebbe svolgere la vacanza. Avrà anche la possibilità, se lo desidera, di scendere più nel dettaglio, selezionando il comune specifico in cui vorrebbe soggiornare. Selezionerà successivamente la tipologia di attività che gradirebbe svolgere, che siano esse di tipo culturale, ricreativo o sportivo. Una volta impostati il budget che è disposto a spendere, la distanza massima che è disposto a percorrere per raggiungere un qualsiasi punto d'interesse, il periodo dell'anno in cui vorrebbe svolgere la vacanza e la sua durata, l'utente riceverà in output una lista delle attività corrispondenti alle tipologie scelte, accompagnata da una lista dei b&b più qualificati presenti nella zona. Le liste fornite saranno tali da rispettare i limiti imposti dall'utente.

fulcorno commented 4 years ago

Innanzitutto scusa per il ritardo con cui rispondo a questa proposta. Il tipo di applicazione è interessante ed i data set sembrano adeguati. Non è troppo chiaro quali siano in vincoli specificati dall'utente. In altre parole, qual è l'obiettivo che la funzione ricorsiva dovrà massimizzare? Se io scelgo di stare nella provincia (o comune) X, e mi interessano le attività Y, non sarebbe semplice (banale?) trovare le attività di tipo Y che trovo ad una distanza massima di K kilometri (facendo un semplice calcolo di cammini minimi)? O ci sono ulteriori vincoli per cui quest soluzione banale non sarebbe accettabile? Ti chiederei di chiarire questo aspetto.

vitopalmis commented 4 years ago

Mi scusi se le rispondo solo ora. Precisazione: a seguire, con il termine 'attività', indico, per semplicità, 'luoghi di interesse', 'attività turistiche' e 'stabilimenti balneari', nominati nella descrizione già data in precedenza. Riguardo ai vincoli specificati dall'utente, egli imposterebbe un budget massimo che sarebbe disposto a spendere, la distanza massima che sarebbe disposto a percorrere per raggiungere una determinata meta, il giorno della partenza ed il giorno del ritorno. In queste due date appena citate, sono implicite la durata della vacanza ed il periodo dell'anno durante il quale la si vorrebbe svolgere. Per quanto riguarda il periodo, esso è utile per escludere la possibilità di andare in un lido nei mesi non estivi (gli stabilimenti balneari si ipotizzerebbero aperti solo nei mesi che vanno da inizio maggio a fine settembre). Inoltre, precedentemente, non ho specificato abbastanza l'importanza di alcuni di questi vincoli, quali la durata in giorni della vacanza ed il budget massimo. Il budget massimo è un vincolo che riguarda la somma dei costi dei pernottamenti e di tutte le attività svolte, di conseguenza, al variare delle attività svolte, varierà la spesa complessiva. Il numero di giorni pone invece un vincolo sulla quantità di attività che è possibile svolgere durante la vacanza. All'interno dell'applicazione si ipotizzerebbe che non sia possibile svolgere più di due differenti attività nell'arco della stessa giornata (una al mattino ed una al pomeriggio). In base a quest'ultimo vincolo si viene a creare una situazione nella quale si hanno due possibili casi: 1) numeroAttivitaSelezionate >= 2numeroGiorniVacanza 2) numeroAttivitaSelezionate < 2numeroGiorniVacanza. In entrambi i casi, una ricorsione restituirebbe una lista contenente le varie combinazioni di attività, cioè una lista contenente delle liste di Attivita (List<List>), dove tutte le List avrebbero dimensione 2*numeroGiorniVacanza. Nel caso (1) le varie List conterrebbero le diverse combinazioni di attività possibili, senza mai contenere tutte le tipologie di attività selezionate dall'utente. Nel caso (2) nelle List verrebbero inserite più di una volta alcune delle tipologie di attività selezionate (avrebbero la precedenza quelle tipologie di attività che ha senso ripetere più di una volta, in zone diverse magari, es: andare al mare, svolgere una ciclo-passeggiata, ecc). Nella ricorsione si cercherebbe di massimizzare la spesa della vacanza, restando al di sotto del budget inserito dall'utente, questo perché si vorrebbe creare l'itinerario migliore per il turista e per far ciò si ipotizzerebbe che ad una maggiore spesa corrisponda una maggiore qualità della vacanza. In definitiva, la List che massimizza la spesa sarebbe il "percorso" più consigliato, mentre tutte la altre List, che rispettano i requisiti sopra citati, sarebbero fornite all'utente per completezza, per dargli una scelta più vasta. In ogni caso, trovare tutte le attività Y a distanza massima K dal comune X, sarebbe sì banale, ma non sarebbe questo il cuore dell'applicazione, dato che fra tutte queste attività bisognerebbe andare a fare una selezione in base ai criteri appena detti. Spero di essere riuscito a chiarire ogni dubbio, senza lasciarne spazio ad altri.

fulcorno commented 4 years ago

ok, va bene, puoi procedere con i chiarimenti forniti (che ti pregherei di riportare nel documento finale)