Come creare pareti labirinto in NetLogo?
-
19-09-2019 - |
Domanda
Sto cercando di creare una griglia 5x5 con 2 uscite e mettere alcune pareti in esso. In altre parole, voglio creare un labirinto o un labirinto.
Mi chiedevo se esiste un modo per fare una linea bordo più spesso o cambia il colore di un solo lato di un cerotto.
Voglio mettere un solo agente dentro e fargli trovare l'uscita da lui premiare con alcuni punti. (Algoritmo Q-learning)
Qualcuno ha un'idea?
Se questo non fosse possibile, si può suggerire il codice paragonabile per favore?
Ecco un esempio di ciò che voglio creare:
Come chiesto, ho postato alcuni dei miei lavori (anche se sembra inefficiente per aver fatto questo manuale). Ecco quello che ho finora:
breed [frame frames]
to setup
ca
ask patches [ set pcolor white]
ask patch -7 8 [ set pcolor black]
ask patch -6 8 [ set pcolor black]
ask patch -5 8 [ set pcolor black]
ask patch -4 8 [ set pcolor black]
ask patch -3 8 [ set pcolor black]
ask patch -2 8 [ set pcolor black]
ask patch -1 8 [ set pcolor black]
ask patch 1 8 [ set pcolor black]
ask patch 0 8 [ set pcolor black]
ask patch 2 8 [ set pcolor black]
ask patch 3 8 [ set pcolor black]
ask patch 6 8 [ set pcolor black]
ask patch 7 8 [ set pcolor black]
ask patch 8 8 [ set pcolor black]
ask patch -7 7 [ set pcolor black]
ask patch -7 6 [ set pcolor black]
ask patch -7 5 [ set pcolor black]
ask patch -7 4 [ set pcolor black]
ask patch -7 3 [ set pcolor black]
ask patch -7 2 [ set pcolor black]
ask patch -7 1 [ set pcolor black]
ask patch -7 0 [ set pcolor black]
ask patch -7 -1 [ set pcolor black]
ask patch -7 -2 [ set pcolor black]
ask patch -7 -3 [ set pcolor black]
ask patch -7 -4 [ set pcolor black]
ask patch -7 -5 [ set pcolor black]
ask patch -7 -6 [ set pcolor black]
ask patch -7 -7 [ set pcolor black]
ask patch -7 -7 [ set pcolor black]
ask patch -6 -7 [ set pcolor black]
ask patch -5 -7 [ set pcolor black]
ask patch -4 -7 [ set pcolor black]
ask patch -3 -7 [ set pcolor black]
ask patch -2 -7 [ set pcolor black]
ask patch -1 -7 [ set pcolor black]
ask patch 1 -7 [ set pcolor black]
ask patch 0 -7 [ set pcolor black]
ask patch 2 -7 [ set pcolor black]
ask patch 3 -7 [ set pcolor black]
ask patch 4 -7 [ set pcolor black]
ask patch 5 -7 [ set pcolor black]
ask patch 8 -7 [ set pcolor black]
ask patch 8 8 [ set pcolor black]
ask patch 8 7 [ set pcolor black]
ask patch 8 6 [ set pcolor black]
ask patch 8 5 [ set pcolor black]
ask patch 8 4 [ set pcolor black]
ask patch 8 3 [ set pcolor black]
ask patch 8 2 [ set pcolor black]
ask patch 8 1 [ set pcolor black]
ask patch 8 0 [ set pcolor black]
ask patch 8 -1 [ set pcolor black]
ask patch 8 -2 [ set pcolor black]
ask patch 8 -3 [ set pcolor black]
ask patch 8 -4 [ set pcolor black]
ask patch 8 -5 [ set pcolor black]
ask patch 8 -6 [ set pcolor black]
ask patch -6 5 [ set pcolor black]
ask patch -5 5 [ set pcolor black]
ask patch -4 5 [ set pcolor black]
ask patch -4 4 [ set pcolor black]
ask patch -4 3 [ set pcolor black]
ask patch -4 2 [ set pcolor black]
ask patch -4 -1 [ set pcolor black]
ask patch -4 -2 [ set pcolor black]
ask patch -4 -3 [ set pcolor black]
ask patch -4 -4 [ set pcolor black]
ask patch -5 -4 [ set pcolor black]
ask patch -6 -4 [ set pcolor black]
ask patch -1 7 [ set pcolor black]
ask patch -1 6 [ set pcolor black]
ask patch -1 5 [ set pcolor black]
ask patch -1 4 [ set pcolor black]
ask patch -1 3 [ set pcolor black]
ask patch -1 2 [ set pcolor black]
ask patch 2 5 [ set pcolor black]
ask patch 2 4 [ set pcolor black]
ask patch 2 3 [ set pcolor black]
ask patch 2 2 [ set pcolor black]
ask patch 5 5 [ set pcolor black]
ask patch 5 4 [ set pcolor black]
ask patch 5 3 [ set pcolor black]
ask patch 5 2 [ set pcolor black]
ask patch 5 1 [ set pcolor black]
ask patch 5 0 [ set pcolor black]
ask patch 5 -1 [ set pcolor black]
ask patch 6 5 [ set pcolor black]
ask patch 7 5 [ set pcolor black]
ask patch -1 -1 [ set pcolor black]
ask patch 0 -1 [ set pcolor black]
ask patch 1 -1 [ set pcolor black]
ask patch 2 -1 [ set pcolor black]
ask patch 3 -1 [ set pcolor black]
ask patch 4 -1 [ set pcolor black]
ask patch -1 -2 [ set pcolor black]
ask patch -1 -3 [ set pcolor black]
ask patch -1 -4 [ set pcolor black]
ask patch 0 -4 [ set pcolor black]
ask patch 1 -4 [ set pcolor black]
ask patch 2 -4 [ set pcolor black]
ask patch 3 -4 [ set pcolor black]
ask patch 4 -4 [ set pcolor black]
ask patch 5 -4 [ set pcolor black]
end
Di nuovo, questo è un metodo inefficiente. Se dovessi continuare con questo metodo, come posso Unisci 4 patch in 1 in modo che posso inserire il mio agente dentro e essere centrato?
Grazie in anticipo.
Soluzione
Per evidenziare il bordo di una patch, è necessario utilizzare una tartaruga. Creare una forma di tartaruga che proprio consiste in una linea, quindi creare una tartaruga con quella forma e la posizione di conseguenza. Probabilmente si vorrà usare una razza a parte delle tartarughe (chiamarli "muri", per esempio).
Dopo aver creato la tartaruga, è possibile tenerlo in giro se si vuole fare qualcosa in un secondo momento, oppure si può avere fare "die timbro" per ucciderlo ma prima averlo lasciare un'immagine di sé dietro nel disegno.
Altri suggerimenti
Prova a guardare il codice modello di questo labirinto-maker NetLogo. l'idea di base per l'algoritmo è quello di utilizzare un deambulatore casuale che costruisce muri (percorso) mentre cammina. Quando raggiunge un vicolo cieco che è teletrasportato in un luogo precedente dove ha preso una piega.
Buon divertimento! Non v'è, naturalmente, una wikipedia ingresso su algoritmi di generazione di labirinto se si desidera approfondire.