Pregunta

Hace algún tiempo he escrito un autómata celular como WA-Tor (Ver Wikipedia) pero con algunas especies más y un poco más inteligente. Excepto por una gran cantidad de ajuste para obtener un sistema estable, era bastante simple y funcionó bien. Sin embargo, desde entonces me pregunto (y ahora tú) cómo actualizar las celdas "de manera realista".

Mi 'mundo' era una cuadrícula y siempre se actualizó desde la parte superior izquierda hasta la parte inferior derecha. En mi opinión, eso también significa que las células que están más cerca de la parte superior e izquierda son siempre más rápidas. Entonces, por ejemplo, un pez en la célula [3, 3] puede ser comido por un tiburón en [3, 2] antes de ser actualizado. Si las células tenían las posiciones opuestas, el pez siempre escapaba del tiburón, ya que puede alejarse del tiburón antes de actualizarse.

¿Estoy en lo correcto que este es un 'problema' (o al menos poco realista)?

La OMI, en un entorno realista, todas las celdas deben actualizarse simultáneamente, pero no sé cómo implementar algo así. Otro método que puedo imaginar es evaluar las células en un orden 'barajado'.

¿Cómo resolverías este problema / cómo se resuelven tales problemas?

¿Fue útil?

Solución

Como menciona @rogach, las actualizaciones simultáneas no funcionarán. Debido a que sus autómatas celulares no son deterministas, dos peces no sabrán la próxima posición entre sí y pueden chocar.

Creo que la mejor solución, dado que sus autómatas celulares no son deterministas, es actualizar su cuadrícula de manera no determinista, es decir. aleatoriamente. Elija células aleatorias para actualizar. Elija las células al azar y realice un seguimiento de cuál ha actualizado, para que cada celda se actualice exactamente una vez por garrapata, o elija celdas al azar y no se moleste en hacer un seguimiento. El segundo enfoque sería más fácil, pero corre el riesgo de actualizar algunas celdas levemente más a menudo. En promedio, todas las celdas se actualizarían la misma cantidad, si tuviera una función aleatoria distribuida uniformemente.

Otros consejos

La OMI, en un entorno realista, todas las celdas deben actualizarse simultáneamente, pero no sé cómo implementar algo así.

Este es el enfoque que sugeriría. Tener dos cuadrículas, una 'vieja' una y una 'nueva/actual'. Al calcular la próxima generación, base sus cálculos en la cuadrícula anterior y escriba sus resultados a la nueva cuadrícula. Luego muestre la nueva cuadrícula. Ahora cambie los punteros para que la nueva cuadrícula sea ahora la 'vieja', y la antigua cuadrícula se convierte en la nueva cuadrícula. Repetir.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top