Modificata in modo massiccio questa domanda per renderla più facile da capire.Algoritmo di esplorazione
Dato un ambiente con dimensioni arbitrarie e posizionamento arbitrario di un numero arbitrario di ostacoli, ho un agente che esplora l'ambiente con un campo visivo limitato (gli ostacoli non bloccano la vista). Può muoversi nelle quattro direzioni cardinali di NSEW, una cella alla volta, e il grafico non è pesato (ogni passo ha un costo di 1). Collegato sotto è una mappa che rappresenta la credenza corrente dell'agente (ragazzo giallo) dell'ambiente nell'istante della pianificazione. Il tempo non passa nella simulazione mentre l'agente sta pianificando.
http://imagizer.imageshack.us/a/img913/9274/qRsazT.jpg
Che algoritmo di esplorazione posso usare per ottimizzare il rapporto costo-efficacia del programma di utilità, dato che rivisitando le cellule sono permessi? Ogni cella contiene un valore di utilità. Idealmente, cercherò di massimizzare la somma dell'utilità di tutte le celle SEEN (non visitate) divise per la lunghezza del percorso, sebbene se ciò sia troppo complesso per qualsiasi algoritmo adatto, il numero di celle viste sarà sufficiente. C'è una lunghezza massima del percorso ma generalmente è di centinaia o superiore. (Gli attuali ambienti di test utilizzati sul mio agente sono almeno 4x più grandi, anche se teoricamente non esiste un limite superiore per le dimensioni che è possibile impostare e la lunghezza massima del percorso aumenterebbe di conseguenza)
Ritengo BFS e DFS a essere intrattabile, A * essere non ottimale data la mancanza di un'euristica adeguata, e l'inadeguatezza di Dijkstra nel generare un singolo percorso ininterrotto. C'è qualche algoritmo che riesci a pensare? Inoltre, ho bisogno di aiuto con il rilevamento del loop, come non l'ho mai fatto prima, dato che consentire le revisitazioni è la mia prima volta.
Un approccio che ho considerato è quello di ridurre la mappa in uno spanning tree, tranne che invece di definirlo come un albero che collega tutte le celle, è definito come un albero che può vedere tutte le celle. Il mio approccio comporterebbe la seguente:
http://imagizer.imageshack.us/a/img910/3050/HGu40d.jpg
Nella struttura risultante, l'agente può andare da un nodo a tutti i nodi adiacenti sotto 0-1 sua volta via agli incroci. Questo è il mio pensiero fino adesso. Una soluzione generata usando questo albero potrebbe non essere ottimale, ma dovrebbe essere almeno quasi ottimale con molte meno celle elaborate dall'algoritmo, quindi se questo renderebbe l'algoritmo più facilmente trattabile, allora suppongo che sia accettabile scambio. Sono ancora bloccato pensando come esattamente generare un percorso per questo tuttavia.
Puoi controllare questo: http://en.wikipedia.org/wiki/Simultaneous_localization_and_mapping. – perreal
perché non A * con euristica in base al numero di celle viste – nkcode
@perreal Sapete quali algoritmi esatti da SLAM posso applicare al mio problema? Il mio agente è in grado di accedere alle dimensioni della mappa e conosce la sua posizione esatta in ogni momento, quindi deve solo generare un percorso di esplorazione in rilevamento tracciabile del tempo e del ciclo. – thegreatjedi