Algoritmo di esplorazione della città

1

Lo scopo dell'algoritmo è creare n rotte su una mappa geografica, dove viene dato n , mentre tutte le rotte non prendono più di t unità di tempo a piedi e finiscono dove iniziano, mentre provano per avere il minimo sovrapposizioni possibile, il che significa che l'utente che cammina i percorsi percorre il minor numero possibile di strade il più spesso possibile.

Il software calcola i percorsi chiusi (punto iniziale = punto finale) mentre la lunghezza dei percorsi deve essere uguale al tempo t . Un'altra restrizione è che ogni strada dovrebbe essere percorsa il più possibile per esplorare sempre nuove aree mentre si cammina per lo stesso periodo di tempo.

Esempio:

Sei a New York City ( google maps per una mappa di esempio)

  • Vuoi camminare per 40 minuti.
  • Vuoi essere su nuove strade o percorsi il più spesso possibile.

Immagine con una discussione. Il thread ha una lunghezza di velocity_walking * t in una scala più piccola. Ora incollare la fine e iniziare a un punto di partenza sulla mappa, lat e lon . Quindi sposti il filo in modo che si trovi solo su strade / sentieri, senza essere sulla stessa strada due volte.

Ora prendi un altro thread e incollalo alla fine e inizi a un punto di partenza sulla tua mappa, lat e lon . Ora fai la stessa cosa come sopra, cercando di non metterlo sopra l'altro thread.

Ripeti questo n volte, tutto sommato, quindi dati i primi due thread, lo ripeterai n-2 volte.

Quindi i passaggi sono

  1. Inserisci n
  2. Inserisci t
  3. Inserisci il punto di partenza in lat e lon
  4. Crea n rotte che prendono t unità di tempo per camminare a piedi, iniziare e terminare in lat , lon e, se possibile, non contenere le stesse strade o parti di strade due volte.

La mia idea:

Avere un cerchio di raggio pari a walking_velocity * t / 2 . Pianifica percorsi da inizio a punto in cerchio per iniziare.

Svantaggi:

  • Stesse strade fino alla circonferenza del cerchio e ritorno.
  • Molte strade sono state omesse.

Qual è l'algoritmo migliore per farlo? La lingua non ha importanza, l'algoritmo conta.

    
posta Timo Theobald 15.08.2014 - 01:30
fonte

1 risposta

1

Questo potrebbe non essere il più efficiente, ma sarebbe un buon punto di partenza. Penso che qualsiasi algoritmo migliore sarebbe un'ottimizzazione o una semplificazione di questo.

Imposta il problema

  1. Converti la mappa geografica in un grafico. Le intersezioni sono nodi, strade o altri percorsi pedonali sono bordi.
  2. Ogni spigolo ha un costo che è il tempo richiesto per attraversare quel bordo.
  3. Ogni spigolo tiene traccia del numero di volte che è stato attraversato.
  4. Scegli un nodo iniziale.
  5. Scegli l'ora desiderata ( costo ) a cui termina la rotta.
  6. L'algoritmo avrà un totale parziale del costo accumulato dal passaggio dei nodi precedenti. Questo costo inizia da zero.

Attraversa il grafico

  1. In ogni dato nodo, valuta i bordi ad esso collegati. Se il costo di un margine più il costo attuale accumulato è maggiore del costo di chiusura, tale margine viene rimosso dalla considerazione. Se l'algoritmo è tornato indietro da un bordo, rimuovi quel bordo dalla considerazione.
  2. Se non ci sono bordi da considerare, fai il backtrack e rimuovi il costo del backtracked edge. Se il costo totale è zero (vale a dire nel nodo iniziale con niente attraversato), l'algoritmo termina.
  3. Dei bordi rimanenti, scegli uno per attraversare e ripeti l'algoritmo.

Analisi

Questo è essenzialmente un algoritmo di base dell'albero di ricerca che include i costi per ogni spigolo. Si noti inoltre che non vieta di attraversare indietro avanti , cioè di passare dal nodo A a B e di tornare ad A senza fare retromarcia. Questo potrebbe effettivamente aumentare la quantità totale di distanza coperta se B è un vicolo cieco e il costo è basso rispetto ad altri spigoli.

    
risposta data 15.08.2014 - 04:06
fonte

Leggi altre domande sui tag