Quindi, sono abbastanza nuovo per l'intelligenza artificiale in generale e sto cercando di implementare una ricerca basata su albero da un input di file di testo (un labirinto). Un esempio potrebbe essere:
||||||||||||||||||||||
| || | | | \
| |||||| | |||||| | \
|||||| | P | \
| .| |||||| || ||||| \ P = Start
| |||| | | | / . = Goal
| ||| ||| | | /
|||||||||| |||||| | /
| || | /
||||||||||||||||||||||
Capisco gli algoritmi di base in generale (BFS, DFS, A *, ecc.), ma voglio assicurarmi che li sto implementando correttamente, e non in qualche modo tagliare gli angoli perché "So dove è il percorso migliore" . La mia idea di base è:
- Analizza il file in un array 2D
- Durante l'analisi, se incontro
P
, annota l'indice di avvio - Durante l'analisi, se incontro
.
, annota l'indice Obiettivo - Inizia con
Index(Start)
e valuta gli spazi [vuoti] circostanti
- Crea
Node
s per questi e aggiungi le azioni appropriate alle azioni disponibili del nodo corrente --- Aggiungi questiNode
s alla miafrontier
que - [continua qualsiasi algoritmo da qui]
Quindi immagino che la mia domanda principale sia: sto generando il mio "mondo" correttamente? È giusto non creare realmente Nodi finché non li incontro durante la ricerca? Sembra uno spreco ottenere uno spazio [vuoto], scansionare le 4 direzioni circostanti per altri spazi [vuoti], e se esistono aggiungili alle azioni disponibili e crea Node
s per tutte le azioni possibili.
Un'altra alternativa sarebbe quella di generare nodi quando incontro gli spazi [vuoti], ma sarebbe difficile (dato che non sarei a conoscenza degli spazi vuoti in arrivo) ... dovrei analizzare il file completamente e la traversata l'array memorizzato per creare tutti i possibili nodi / collegamenti / azioni? O è considerato cheating in qualche modo ...