Hay un problema realmente importante en los autómatas celulares llamado el problema Mayoritario :
El problema mayoritario o la tarea de clasificación de densidad es el problema de encontrar reglas de autómatas celulares unidimensionales que realicen con precisión el voto mayoritario.
...
Dada una configuración de un autómata celular de dos estados con un total de celdas i + j, i de las cuales están en el estado cero yj de las cuales están en el estado único, una solución correcta al problema de votación eventualmente debe establecer todas las celdas en cero si i> j y eventualmente debe establecer todas las celdas en una si i <j. El estado eventual deseado no se especifica si i = j.
Aunque se ha demostrado que ningún autómata celular puede resolver el problema mayoritario en todos los casos, existen muchas reglas que pueden resolverlo en la mayoría de los casos. El autómata Gacs-Kurdyumov-Levin tiene una precisión de aproximadamente el 78% con condiciones iniciales aleatorias. La regla GKL no es complicada:
- Radio de 3, lo que significa que el nuevo estado de la celda depende de 7 celdas anteriores: en sí, las 3 celdas a la derecha y las 3 celdas a la izquierda.
- Si una celda está actualmente
O
, su nuevo estado es la mayoría de sí misma, la celda a su izquierda y la celda 3 pasos a su izquierda. - Si una celda está actualmente
1
, su nuevo estado es la mayoría de sí misma, la celda a su derecha y la celda 3 pasos a su derecha.
Aquí hay un ejemplo:
0 1 0 1 1 1 0 1 1 0 1 0 0 1
0 1 1 1 1 1 1 1 0 0 1 1 0 0
0 1 1 1 1 1 1 1 1 0 1 0 0 0
0 1 1 1 1 1 1 1 0 1 0 1 0 0
0 1 1 1 1 1 1 0 1 0 1 0 1 0
0 1 1 1 1 1 0 1 0 1 0 1 1 1
1 1 1 1 1 0 1 0 1 1 1 1 1 1
1 1 1 1 0 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1
En este ejemplo, el autómata celular calculó correctamente que 8> 6. Otros ejemplos toman períodos de tiempo más largos y producen algunos patrones interesantes mientras tanto. A continuación hay dos ejemplos que encontré al azar.
0 0 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 1 1 0 1 1 1 1 0 1 0 0 1 1 1
1 0 0 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 1 0 0 0 1 0 0 1 1
Llévandolo al siguiente nivel
Por lo que mi investigación en Internet ha demostrado, casi toda la investigación académica sobre el problema mayoritario se realizó con AC de 2 estados. En este desafío, vamos a expandir el problema mayoritario a las AC de 3 estados . Llamaré a esto el problema de la pluralidad . La pluralidad , o mayoría relativa, se refiere a la condición en la que una de las opciones tiene más votos que cada una de las alternativas, pero no necesariamente una mayoría de todos los votos.
Planteamiento del problema
- Hay un autómata celular 1D de 3 estados con radio 3.
- Hay 151 celdas con una condición de contorno circular.
- Estas celdas tienen un estado inicial aleatorio, con la única condición de que 1 de los 3 estados tenga una pluralidad estricta. "Aleatorio" significa una distribución uniforme independiente para cada celda.
- La precisión de una regla es el porcentaje de condiciones iniciales aleatorias (válidas) en las que todas las celdas se sincronizan con el estado correcto (el que tiene pluralidad) dentro de 10000 generaciones .
- El objetivo es encontrar una regla con alta precisión,
Casos extremos de pluralidad: cualquier configuración con 50/50/51 es una configuración de inicio válida (ya que existe una pluralidad estricta), mientras que cualquier configuración con 51/51/49 no es válida (ya que no existe una pluralidad estricta).
El espacio de búsqueda es 3 ^ 3 ^ 7 (~ 3e1043), muy fuera del alcance de cualquier búsqueda exhaustiva. Esto significa que deberá utilizar otras técnicas, como algoritmos genéticos, para resolver este problema. También tomará algo de ingeniería humana.
La regla de generación 10000 está sujeta a cambios, dependiendo de los tiempos de ejecución / precisión de las reglas que las personas encuentran. Si es demasiado bajo para permitir tasas razonables de convergencia, entonces puedo aumentarlo. Alternativamente, puedo bajarlo para que sirva de desempate.
Victorioso
El ganador es la persona que presenta la regla CA de radio 3 con la mayor precisión de todos los concursantes.
Su envío debe incluir ...
- Una descripción de la regla (usando el código Wolfram si es necesario)
- La tasa de precisión y el tamaño de la muestra.
- Una explicación de tamaño razonable de cómo descubrió la regla, incluidos los programas que escribió para resolverla, o cualquier ingeniería "manual". (Esta es la parte más interesante, ya que todo lo demás son solo números en bruto).
Trabajo prioritario
- Un artículo de Juille y Pollack , que describe cómo evolucionaron una regla de 2 estados con un 86% de precisión.
- Este artículo utilizó r = 3, 149 celdas, CA de 2 estados. No trató sin embargo a la mayoría resuelve el problema, pero en lugar de encontrar rápidamente las reglas que resultan en una alternancia de todo-
1
-todos-0
patrón. A pesar de estas diferencias, sospecho que muchas técnicas serán similares. - Un documento (no muy útil porque está detrás de un muro de pago) de Wolz y de Oliviera, que actualmente tienen el récord de 2 estados
Respuestas:
Tipo de GKL más escalada, 61.498%
Si una celda es un 0, mira las celdas 3 a la izquierda, 1 a la izquierda y a sí misma. Establecer el valor a la mayoría. Si es un empate, quédese como está.
Si una celda es un 1, mira las celdas 3 a la derecha, 1 a la derecha y a sí misma. Establecer el valor a la mayoría. Si es un empate, quédese como está.
Si una celda es un 2, mira las celdas 2 a la izquierda, 2 a la derecha y 3 a la derecha. Establecer el valor a la mayoría. Si es un empate, quédese como está.
Obtuve 59453 de un total de 100000, 59.453%
Algunas mutaciones y escaladas resultaron en 61498/100000 = 61.498%.
Probablemente probaré un poco más y publicaré más información más adelante.
fuente
"Solo tira los 2 y haz GKL" - 55.7%
No es tan fácil adivinar cuál sería una buena regla, así que intenté al menos llegar a algo que obtuviera un puntaje superior a 1/3. La estrategia es tratar de obtener la respuesta correcta cuando el estado mayoritario es 0 o 1, y aceptar la pérdida si es 2. Obtuvo un puntaje de 56.5% en 100,000 ensayos, que de alguna manera es ligeramente mejor de lo que se esperaría de multiplicar 78% ( puntaje de GKL) * 2/3 (fracción del tiempo cuando la respuesta es 0 o 1) = 52%.
Más concretamente, la estrategia es la siguiente:
Usé este código para probar:
fuente
"Solo roba lo que sea mejor y evoluciona", bleh
Editar: en su estado actual, esta respuesta, en lugar de encontrar mejores patrones, encuentra una mejor muestra aleatoria.
Esta respuesta codifica / decodifica soluciones enumerando todos los estados como números ternarios (primero el dígito menos significativo). La solución para 59.2%:
Esta respuesta se desarrolló a partir del 55.7% de feersum, utilizando el siguiente código. Este código requiere libop , que es mi biblioteca personal de solo encabezado C ++. Es muy fácil de instalar, solo hazlo
git clone https://github.com/orlp/libop
en el mismo directorio donde guardaste el programa. Sugiero compilar cong++ -O2 -m64 -march=native -std=c++11 -g
. Para un desarrollo rápido, también sugiero precompilar libop ejecutando el comando anterior enlibop/op.h
.fuente
Codificado a mano, 57.541%
En realidad, esto solo mira las 5 celdas por encima. Probablemente podría mejorarse aumentando el rango que observa. Funcionó con 100,000 casos de prueba.
Algoritmo:
Gene:
Código de prueba:
Ejemplo
fuente