Domanda

Qualche tempo fa ho scritto un WA-Tor come Automata cellulare (Vedi Wikipedia) ma con alcune specie in più e una piccola specie più intelligente. Fatta eccezione per molta messa a punto per ottenere un sistema stabile, era abbastanza semplice e ha funzionato bene. Tuttavia da quel momento mi chiedo (e ora tu) come aggiornare le celle "realisticamente".

Il mio "mondo" era una griglia ed è sempre stato aggiornato dall'alto sinistra al basso a destra. IMO che significa anche che le celle più vicine alla parte superiore e a sinistra sono sempre più veloci. Quindi, ad esempio, un pesce nella cellula [3, 3] può essere mangiato da uno squalo in [3, 2] prima di essere aggiornato. Se le cellule avessero le posizioni opposte, il pesce fuggirebbe sempre dallo squalo poiché può allontanarsi dallo squalo prima che venga aggiornato.

Ho ragione che questo è un "problema" (o almeno irrealistico)?

IMO In un'impostazione realistica tutte le celle dovrebbero essere aggiornate contemporaneamente ma non so come implementare qualcosa del genere. Un altro metodo che posso immaginare è valutare le cellule in un ordine "mescolato".

Come risolveresti questo problema / Come vengono solitamente risolti tali problemi?

È stato utile?

Soluzione

Come menziona @Rogach, gli aggiornamenti simultanei non funzionano. Poiché i tuoi automi cellulari non sono deterministici, due pesci non conosceranno la posizione successiva l'una dell'altra e potrebbero scontrarsi.

Penso che la soluzione migliore, dato che i tuoi automi cellulari non sono deterministici, sia aggiornare la tua griglia in modo non deterministico, cioè. a caso. Scegli le celle casuali da aggiornare. O scelte le celle in modo casuale e tieni traccia di quali hai aggiornato, quindi ogni cella viene aggiornata esattamente una volta per tick, o scegli le celle in modo casuale e non preoccuparti di tenere traccia. Il secondo approccio sarebbe più semplice, ma rischia alcune celle aggiornate leggermente più spesso. In media tutte le celle verrebbero aggiornate la stessa quantità, se avessi una funzione casuale uniformemente distribuita.

Altri suggerimenti

IMO In un'impostazione realistica tutte le celle dovrebbero essere aggiornate contemporaneamente ma non so come implementare qualcosa del genere.

Questo è l'approccio che suggerirei. Avere due griglie, una "vecchia" e una "nuova/attuale". Quando si calcola la generazione successiva, basa i calcoli sulla vecchia griglia e scrivi i risultati sulla nuova griglia. Quindi visualizzare la nuova griglia. Ora scambia i suggerimenti in modo che la nuova griglia sia ora quella "vecchia" e la vecchia griglia diventa la nuova griglia. Ripetere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top