LucaFalasca / Bus4You

1 stars 0 forks source link

Ideas about clustering on the graph database #47

Open LucaFalasca opened 1 year ago

LucaFalasca commented 1 year ago

Idee di design per la rappresentazione dei dati e il clustering nel database a grafo:

Rappresentiamo ogni nodo con la prenotazione richiesta (sostanzialmente la coppia (fermata inziale, fermata finale)). Ogni volta che andiamo ad inserire un nuovo nodo andiamo a verificare quali nodi hanno almeno uno tra fermata iniziale o fermata finale vicino ad una fermata inziale o finale di un altro nodo. La vicinanza verrà definità in base alla distanza tra le coordinate senza andare a usare le api, in pratica si traccia un cerchio intorno alle coordinate e si prendono tutte le fermate che ci cadono dentro. immagine

In questo esempio i due marker rosa rappresentano un nodo prenotazione e quelli verdi un altro. Essi saranno considerati "compatibili spazialmente" perchè l'arrivo del nodo rosa è vicino alla partenza del nodo verde immagine

Una volta che si hanno a disposizioni questi nodi si va a controllare se sono anche "compatibili temporalmente". Quindi si va a verificare se la distanza in termini di tempo tramite le api di Snap4City e si verifica se è compatibile rispetto alla tempo indicato sulla prenotazione. Questa verifica va fatta molto a grana larga in modo da non escludere troppo facilemente dei tempi che potrebbero essere compatibili o no in base al percorso che potrebbe fare l'autobus, però allo stesso tempo escludere quelli sicuramente impossibili (tipo quelli che hanno un tempo minore del tempo di percorrena oppure una distanza di tempo di prenotazione di diverse ore).

Se i due nodi sono compatibili anche temporalmente allora essi verranno collegati sul grafo e clusterizzati. In questo modo dovrebbe essere più semplice scegliere i nodi più papabili per l'algoritmo.

StefanAdrianHuma commented 1 year ago

Guarda, perfetto! Le modifiche che ho apportato al database le ho fatte proprio in vista di questa cosa avendovi gia sentito parlare dell'aprossimazione spaziale tra fermate. Tanto per dare un numero su cui iniziare quanto considerate accettabile come raggio della circonferenza (1Km , 500m) considerate che quello è una distanza che l'utente fa a piedi.

LucaFalasca commented 1 year ago

Pensavo di definire in maniera più specifica come avviene il potenziale collegamento tra nodi (potenziale perché l'effettivo collegamento dipenderà anche dalla compatibilità temporale). Casistiche:

Ogni nodo rappresenta sempre una prenotazione e quindi sarà collegato a due fermate. Queste due fermate potrebbero essere considerate come altri nodi di altro tipo a cui ogni nodo prenotazione è collegato. In questo modo ci sono due tipologie di nodi:

@StefanAdrianHuma fammi sapere se questa rappresentazione che ho pensato è compatibile con il db a grafo e in generale fatemi sapere che ne pensate @matteo-conti-97 @StefanAdrianHuma

LucaFalasca commented 1 year ago

Tanto per dare un numero su cui iniziare quanto considerate accettabile come raggio della circonferenza (1Km , 500m) considerate che quello è una distanza che l'utente fa a piedi.

Secondo me si può anche aumentare il raggio di più perché altrimenti si rischia di isolare troppo zone sperdute e va a finire che non fanno mai parte di nessun cluster. Un altro problema è che andremo a stimare questo raggio attraverso le coordinate delle fermate e non tramite la loro distanza effettiva su strada perché altrimenti per ogni distanza tra coppie di fermate dovremmo fare una richiesta diversa alle api di snap4city. A meno che non vogliamo "clonare" il database delle fermate di snap4city sul nostro a grafo con le relative distanze perché se no dovremmo fare N richieste (o 2N nel caso in cui vogliamo calcolare sia l'andata che il ritorno) alle api di snap4city per ogni nodo nuovo che entra nel db, considerato N come il numero di nodi già nel database

LucaFalasca commented 1 year ago

Guarda, perfetto! Le modifiche che ho apportato al database le ho fatte proprio in vista di questa cosa avendovi gia sentito parlare dell'aprossimazione spaziale tra fermate. Tanto per dare un numero su cui iniziare quanto considerate accettabile come raggio della circonferenza (1Km , 500m) considerate che quello è una distanza che l'utente fa a piedi.

Però forse tu hai capito male il discorso fatto ora che ci penso. Perché mi sa che tu intendi con approssimazione spaziale che due fermate sono intercambiabili per proporre all'utente di cambiare nel caso in cui ci sia un'altra fermata con già un percorso o cose del genere. Invece io con compatibile spazialmente intendo che due nodi vengono messi nello stesso cluster, cioè è un modo per fare il filtraggio dei nodi per poi proporli all'algoritmo.

Per fare quello che dici tu potremmo implementare un altro tipo di collegamento che indica la "intercambiabilità" tra due nodi e questo magari possiamo deciderlo entro un altro raggio che potrebbe essere però di massimo 100-200 metri secondo me. In questo caso ci vuole un doppio collegamento (o un collegamento non orientato, ma non so se è disponibile sul db a grafo) tra 2 nodi fermate

LucaFalasca commented 1 year ago

Tra l'altro stavo pensando che con questo approccio andiamo a fare clustering direttamente, quindi non serve più avere un microservizio se si occupa di questo

LucaFalasca commented 1 year ago

Compatibilità temporale Dati:

Compatibilità